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);
}
}
要求
头文件:XAppCapture.h
库:xgameruntime.lib
支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机