다음을 통해 공유


XAppCaptureRecordTimespan

GameDVR 레코딩을 만듭니다. 그러한 레코딩이 이루어지고 있음을 나타내는 UI가 없습니다. 사용자는 레코딩에 액세스할 수 없습니다. 이러한 레코딩은 주어진 시간에 최대 2개까지 만들 수 있습니다. 2번의 레코딩이 이루어지면 XAppCaptureCloseLocalStream을 호출하여 녹음을 닫고 삭제해야 다른 녹음을 할 수 있습니다.

구문

HRESULT XAppCaptureRecordTimespan(
  const SYSTEMTIME * startTimestamp,
  uint64_t durationInMilliseconds,
  XAppCaptureLocalResult * result
)

매개 변수

startTimestamp _In_opt_
유형: const SYSTEMTIME *

레코딩을 시작할 타임스탬프입니다. 이 매개 변수는 Null일 수 있으며, 이 경우 시스템은 지금부터 durationInMilliseconds 지난 활동을 기록할 수 있는 적절한 시작 시간을 자동으로 계산합니다.

durationInMilliseconds _In_
형식: uint64_t

녹음 길이(밀리초).

result _Out_
유형: XAppCaptureLocalResult *

기능 완료 시 캡처 결과를 포함합니다.

반환 값

형식: HRESULT

함수 결과입니다.

사용자의 GameDVR 설정이 게임 캡처를 금지하는 경우 이 함수는 E_ACCESSDENIED를 반환합니다.

설명

startTimestamp 매개변수를 전달하는 방법에는 두 가지가 있습니다.

처음에는 Null이 전달됩니다. 시스템은 자동으로 타임스탬프를 계산하고 지금부터 durationInMilliseconds 지난 활동을 기록합니다.

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

if (SUCCEEDED(XAppCaptureRecordTimespan(nullptr, durationInMs, &appCaptureLocalResult)))
{
    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으로 변환하여 원하는 시작 타임스탬프를 계산해야 합니다.

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 };
    /* 8 seconds, for example. You should call XAppCaptureGetVideoCaptureSettings() to make sure there's sufficient duration available */
    uint64_t durationInMs = 8000;
    FILETIME now;
    ULARGE_INTEGER calculatedStartTimestamp;
    SYSTEMTIME startTimestampAsSystemTime;

    GetSystemTimeAsFileTime(&now);
    SubtractMsDurationFromFileTimeToULarge(&now, durationInMs, &calculatedStartTimestamp));
    ULargeToSystemTime(calculatedStartTimestamp, &startTimestampAsSystemTime));

    if (SUCCEEDED(XAppCaptureRecordTimespan(&startTimestampAsSystemTime, durationInMs, &appCaptureLocalResult)))
    {
        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 참조

요구 사항

헤더: XAppCapture.h

라이브러리: xgameruntime.lib

지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔

참고 항목

XAppCapture 멤버