> ## 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

Faz uma gravação do GameDVR. Não há interface do usuário indicando que essa gravação está sendo feita. O usuário não tem acesso à gravação. No máximo 2 gravações desse tipo podem ser feitas a qualquer momento. Depois que 2 gravações forem feitas, será necessário chamar [XAppCaptureCloseLocalStream](/pt-BR/reference/system/xappcapture/functions/xappcapturecloselocalstream) para fechar e excluir uma gravação antes que outra gravação possa ser feita. Isso pode ser usado para capturar atividades passadas ou futuras.

## Sintaxe

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

### Parâmetros

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

O carimbo de data/hora a partir do qual começar a gravação. Este parâmetro pode ser nulo; nesse caso, o sistema calculará automaticamente a hora de início como *durationInMilliseconds* no passado e a gravação conterá atividades passadas.

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

Duração da gravação em milissegundos.

*result* \_Out\_\
Tipo: XAppCaptureLocalResult \*

Na conclusão da função, contém os resultados da captura. Consulte [XAppCaptureReadLocalStream](/pt-BR/reference/system/xappcapture/functions/xappcapturereadlocalstream) para saber como a gravação resultante pode ser lida.

### Valor retornado

Tipo: HRESULT

Resultado da função.

A função retornará E\_ACCESSDENIED se a configuração do GameDVR do usuário proibir que jogos façam capturas.

## Comentários

Há duas maneiras de passar o parâmetro *startTimestamp* para gravar atividades passadas.

Na primeira, é passado nulo. O sistema calculará automaticamente o carimbo de data/hora e gravará as atividades passadas com duração de *durationInMilliseconds* a partir de agora.

<Note>Os clipes mais antigos serão excluídos quando o espaço alocado estiver cheio, para abrir espaço para novos clipes. Use [PLS](/pt-BR/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members) (Persistent Local Storage), o armazenamento conectado (por exemplo, [XGameSave](/pt-BR/reference/system/xgamesave/xgamesave_members) ou [XGameSaveFiles](/pt-BR/reference/system/xgamesavefiles/xgamesavefiles_members)) ou um sistema de armazenamento semelhante para reter clipes por um período de tempo definido.</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);
}
```

Na segunda, você deve calcular o carimbo de data/hora de início desejado convertendo SYSTEMTIME ou FILETIME em ULARGE\_INTEGER, fazendo os cálculos necessários e, em seguida, convertendo ULARGE\_INTEGER de volta em 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 também pode ser usada para gravar os próximos *durationInMilliseconds* milissegundos de atividade, especificando *startTimestamp* como a hora atual do sistema.

```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);
    }
}
```

Consulte [XAppCaptureLocalResult](/pt-BR/reference/system/xappcapture/structs/xappcapturelocalresult) e [XAppCaptureReadLocalStream](/pt-BR/reference/system/xappcapture/functions/xappcapturereadlocalstream)

## Requisitos

**Cabeçalho:** XAppCapture.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatíveis:** consoles da família XBOX One e consoles XBOX Series

## Confira também

[Membros de XAppCapture](/pt-BR/reference/system/xappcapture/xappcapture_members)


## Related topics

- [XAppCaptureRecordTimespan](/reference/system/xappcapture/functions/xappcapturerecordtimespan.md)
- [XAppCaptureLocalResult](/reference/system/xappcapture/structs/xappcapturelocalresult.md)
- [XAppCaptureReadLocalStream](/reference/system/xappcapture/functions/xappcapturereadlocalstream.md)
