> ## 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* 매개 변수를 전달하는 두 가지 방법이 있습니다.

첫 번째로 null이 전달됩니다. 시스템은 자동으로 타임스탬프를 계산하고 현재로부터 *durationInMilliseconds* 길이의 과거 활동을 녹화합니다.

<Note>새 클립을 위한 공간을 확보하기 위해 할당된 공간이 가득 차면 오래된 클립이 삭제됩니다. 일정 기간 동안 클립을 유지하려면 [PLS](/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members)(영구 로컬 저장소), 연결된 저장소(예: [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);
}
```

두 번째로, 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](/ko/reference/system/xappcapture/structs/xappcapturelocalresult.md)
- [XAppCaptureReadLocalStream](/ko/reference/system/xappcapture/functions/xappcapturereadlocalstream.md)
- [XAppCaptureGetVideoCaptureSettings](/ko/reference/system/xappcapture/functions/xappcapturegetvideocapturesettings.md)
- [XAppCapture](/ko/reference/system/xappcapture/xappcapture_members.md)
- [GDK용 Unity C# API 래퍼](/ko/build/gdk-and-engines/unity/unity-api-wrappers.md)
