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

Realiza una grabación de GameDVR. No hay ninguna interfaz de usuario que indique que se está realizando dicha grabación. El usuario no tiene acceso a la grabación. Se pueden realizar como máximo 2 grabaciones de este tipo en un momento dado. Una vez realizadas 2 grabaciones, será necesario llamar a [XAppCaptureCloseLocalStream](/reference/system/xappcapture/functions/xappcapturecloselocalstream) para cerrar y eliminar una grabación antes de poder realizar otra. Esto puede usarse para capturar actividad pasada o futura.

## Sintaxis

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

### Parámetros

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

Marca de tiempo desde la que se comienza a grabar. Este parámetro puede ser null, en cuyo caso el sistema calculará automáticamente la hora de inicio como *durationInMilliseconds* en el pasado y la grabación contendrá actividades pasadas.

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

Duración de la grabación en milisegundos.

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

Al finalizar la función, contiene los resultados de la captura. Consulte [XAppCaptureReadLocalStream](/reference/system/xappcapture/functions/xappcapturereadlocalstream) para saber cómo se puede leer la grabación resultante.

### Valor devuelto

Tipo: HRESULT

Resultado de la función.

La función devolverá E\_ACCESSDENIED si la configuración de GameDVR del usuario impide que los juegos realicen capturas.

## Comentarios

Hay dos formas de pasar el parámetro *startTimestamp* para grabar actividad pasada.

En la primera, se pasa null. El sistema calculará automáticamente la marca de tiempo y grabará las actividades pasadas con una duración de *durationInMilliseconds* a partir de ahora.

<Note>Los clips más antiguos se eliminarán cuando el espacio asignado se llene, para hacer sitio a los nuevos clips. Use [PLS](/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members) (almacenamiento local persistente), almacenamiento conectado (p. ej., [XGameSave](/reference/system/xgamesave/xgamesave_members) o [XGameSaveFiles](/reference/system/xgamesavefiles/xgamesavefiles_members)) o un sistema de almacenamiento similar para conservar los clips durante un período de tiempo determinado.</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);
}
```

En la segunda, debe calcular la marca de tiempo de inicio deseada convirtiendo SYSTEMTIME o FILETIME a ULARGE\_INTEGER, realizando la aritmética necesaria y, después, convirtiendo ULARGE\_INTEGER de nuevo a 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 también puede usarse para grabar los próximos *durationInMilliseconds* milisegundos de actividad especificando *startTimestamp* como la hora actual del 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](/reference/system/xappcapture/structs/xappcapturelocalresult) y [XAppCaptureReadLocalStream](/reference/system/xappcapture/functions/xappcapturereadlocalstream)

## Requisitos

**Encabezado:** XAppCapture.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatibles:** consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

[Miembros de XAppCapture](/reference/system/xappcapture/xappcapture_members)


## Related topics

- [XAppCaptureLocalResult](/es/reference/system/xappcapture/structs/xappcapturelocalresult.md)
- [XAppCaptureReadLocalStream](/es/reference/system/xappcapture/functions/xappcapturereadlocalstream.md)
- [XAppCapture](/es/reference/system/xappcapture/xappcapture_members.md)
- [XAppCaptureGetVideoCaptureSettings](/es/reference/system/xappcapture/functions/xappcapturegetvideocapturesettings.md)
- [Contenedores de API de C# de Unity para el GDK](/es/build/gdk-and-engines/unity/unity-api-wrappers.md)
