> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XAppCaptureRecordTimespan

> XAppCaptureRecordTimespan

# XAppCaptureRecordTimespan

GameDVR 録画を作成します。 このような録画が行われていることを示す UI はありません。 ユーザーは録画にアクセスできません。 同時に最大 2 つのそのような録画を作成できます。 2 つの録画が作成されると、別の録画を作成する前に、[XAppCaptureCloseLocalStream](/reference/system/xappcapture/functions/xappcapturecloselocalstream) を呼び出して録画を閉じて削除する必要があります。 これは、過去または将来のアクティビティをキャプチャするために使用できます。

## 構文

```cpp theme={null}
HRESULT XAppCaptureRecordTimespan(
  const SYSTEMTIME * startTimestamp,
  uint64_t durationInMilliseconds,
  XAppCaptureLocalResult * result
)
```

### パラメーター

*startTimestamp* \_In\_opt\_\
型: const SYSTEMTIME \*

録画を開始するタイムスタンプです。 このパラメーターは null にすることができ、その場合、システムは自動的に *durationInMilliseconds* を過去の開始時刻として計算し、録画には過去のアクティビティが含まれます。

*durationInMilliseconds* \_In\_\
型: uint64\_t

録画の長さ (ミリ秒) です。

*result* \_Out\_\
型: XAppCaptureLocalResult \*

関数の完了時に、キャプチャ結果が含まれます。 結果の録画を読み取る方法については、[XAppCaptureReadLocalStream](/reference/system/xappcapture/functions/xappcapturereadlocalstream) を参照してください。

### 戻り値

型: HRESULT

関数の結果です。

ユーザーの GameDVR 設定でゲームによるキャプチャが禁止されている場合、この関数は E\_ACCESSDENIED を返します。

## 解説

過去のアクティビティを録画するために *startTimestamp* パラメーターを渡す方法は 2 つあります。

1 つ目は、null を渡す方法です。 システムは自動的にタイムスタンプを計算し、現時点から *durationInMilliseconds* 分の過去のアクティビティを録画します。

<Note>割り当てられた容量がいっぱいになると、新しいクリップ用のスペースを確保するために古いクリップは削除されます。 一定期間クリップを保持するには、[PLS](/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members) (Persistent Local Storage)、コネクテッド ストレージ (例: [XGameSave](/reference/system/xgamesave/xgamesave_members) または [XGameSaveFiles](/reference/system/xgamesavefiles/xgamesavefiles_members))、または類似のストレージ システムを使用してください。</Note>

```cpp theme={null}
XAppCaptureLocalResult appCaptureLocalResult = { 0 };
uint64_t durationInMs = 5000; /* 5 seconds, for example */

if (SUCCEEDED(XAppCaptureRecordTimespan(nullptr, durationInMs, &appCaptureLocalResult))) // record the past 5000ms (startTimestamp is calculated automatically)
{
    appLog.AddLog("StartTimestamp: %llu, Duration (ms): %llu, File Size (bytes): %llu, Width: %d, Height: %d, Encoding: %d, Color Format: %d\n", appCaptureLocalResult.clipStartTimestamp, appCaptureLocalResult.durationInMilliseconds, appCaptureLocalResult.fileSizeInBytes,
        appCaptureLocalResult.width, appCaptureLocalResult.height, appCaptureLocalResult.encoding, appCaptureLocalResult.colorFormat);
}
```

2 つ目の方法では、SYSTEMTIME または FILETIME を ULARGE\_INTEGER に変換し、必要な計算を行い、ULARGE\_INTEGER を SYSTEMTIME に戻すことで、目的の開始タイムスタンプを計算する必要があります。

```cpp theme={null}
void SubtractMsDurationFromFileTimeToULarge(_In_ FILETIME* pFileTime, _In_ uint64_t durationInMs, _Out_ ULARGE_INTEGER* pUlResultingTime)
{
    ULARGE_INTEGER fileTimeAsUlarge;

    fileTimeAsUlarge.LowPart = pFileTime->dwLowDateTime;
    fileTimeAsUlarge.HighPart = pFileTime->dwHighDateTime;

    // Convert ms to 100 ns intervals, the convention used by FILETIME
    pUlResultingTime->QuadPart = fileTimeAsUlarge.QuadPart - (durationInMs * 10000LL);
}

void ULargeToSystemTime(_In_ ULARGE_INTEGER ulInputTime, _Out_ SYSTEMTIME* pOutputTime)
{
    FILETIME inputAsFiletime;

    inputAsFiletime.dwLowDateTime = ulInputTime.LowPart;
    inputAsFiletime.dwHighDateTime = ulInputTime.HighPart;

    FileTimeToSystemTime(&inputAsFiletime, pOutputTime);
}

void YourFunction()
{
    XAppCaptureLocalResult appCaptureLocalResult = { 0 }; 
    uint64_t durationInMs = 8000; /* 8 seconds, for example */
    FILETIME now;
    ULARGE_INTEGER calculatedStartTimestamp;
    SYSTEMTIME startTimestampAsSystemTime;
    XAppCaptureVideoCaptureSettings captureSettings = { 0 };

    GetSystemTimeAsFileTime(&now);
    SubtractMsDurationFromFileTimeToULarge(&now, durationInMs, &calculatedStartTimestamp);
    ULargeToSystemTime(calculatedStartTimestamp, &startTimestampAsSystemTime);
    
    if (SUCCEEDED(XAppCaptureGetVideoCaptureSettings(&captureSettings)) && captureSettings.isCaptureByGamesAllowed && (captureSettings.maxRecordTimespanDurationInMs >= durationInMs)){
        if (SUCCEEDED(XAppCaptureRecordTimespan(&startTimestampAsSystemTime, durationInMs, &appCaptureLocalResult))) // record 8000ms starting from 8000ms before now (calculated manually)
        {
            appLog.AddLog("StartTimestamp: %llu, Duration (ms): %llu, File Size (bytes): %llu, Width: %d, Height: %d, Encoding: %d, Color Format: %d\n", appCaptureLocalResult.clipStartTimestamp, appCaptureLocalResult.durationInMilliseconds, appCaptureLocalResult.fileSizeInBytes,
                appCaptureLocalResult.width, appCaptureLocalResult.height, appCaptureLocalResult.encoding, appCaptureLocalResult.colorFormat);
        }
    }
}
```

XAppCaptureRecordTimespan は、*startTimestamp* を現在のシステム時刻として指定することで、次の *durationInMilliseconds* ミリ秒のアクティビティを録画するためにも使用できます。

```cpp theme={null}
XAppCaptureLocalResult appCaptureLocalResult = { 0 }; 
uint64_t durationInMs = 10000; /* 10 seconds, for example */
SYSTEMTIME nowStartTimestamp;
XAppCaptureVideoCaptureSettings captureSettings = { 0 };

GetSystemTime(&nowStartTimestamp);

if (SUCCEEDED(XAppCaptureGetVideoCaptureSettings(&captureSettings)) && captureSettings.isCaptureByGamesAllowed){
    if (SUCCEEDED(XAppCaptureRecordTimespan(&nowStartTimestamp, durationInMs, &appCaptureLocalResult))) // record the next 10 seconds starting now
    {
        appLog.AddLog("StartTimestamp: %llu, Duration (ms): %llu, File Size (bytes): %llu, Width: %d, Height: %d, Encoding: %d, Color Format: %d\n", appCaptureLocalResult.clipStartTimestamp, appCaptureLocalResult.durationInMilliseconds, appCaptureLocalResult.fileSizeInBytes,
            appCaptureLocalResult.width, appCaptureLocalResult.height, appCaptureLocalResult.encoding, appCaptureLocalResult.colorFormat);
    }
}
```

[XAppCaptureLocalResult](/reference/system/xappcapture/structs/xappcapturelocalresult) および [XAppCaptureReadLocalStream](/reference/system/xappcapture/functions/xappcapturereadlocalstream) を参照してください。

## 要件

**ヘッダー:** XAppCapture.h

**ライブラリ:** xgameruntime.lib

**サポートされているプラットフォーム:** XBOX One ファミリー本体、XBOX Series 本体

## 関連項目

[XAppCapture メンバー](/reference/system/xappcapture/xappcapture_members)


## Related topics

- [XAppCaptureLocalResult](/ja-jp/reference/system/xappcapture/structs/xappcapturelocalresult.md)
- [XAppCaptureReadLocalStream](/ja-jp/reference/system/xappcapture/functions/xappcapturereadlocalstream.md)
- [XAppCaptureGetVideoCaptureSettings](/ja-jp/reference/system/xappcapture/functions/xappcapturegetvideocapturesettings.md)
- [XAppCapture](/ja-jp/reference/system/xappcapture/xappcapture_members.md)
- [GDK 向け Unity C# API ラッパー](/ja-jp/build/gdk-and-engines/unity/unity-api-wrappers.md)
