次の方法で共有


XAppCaptureRecordTimespan

GameDVR の記録を行います。 この種の記録が行われていることを示す UI はありません。 ユーザーに記録へのアクセス権がありません。 この種の記録は、特定の時間に最大 2 回行うことができます。 記録が 2 回行われた場合、さらに 1 回記録を行うには、その前に 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 パラメーターを渡す方法は 2 つあります。

1 つ目の方法では、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);
}

2 つ目の方法では、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 のメンバー