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

Effectue un enregistrement GameDVR. Aucune interface utilisateur n'indique qu'un tel enregistrement est en cours. L'utilisateur n'a pas accès à l'enregistrement. Au plus 2 enregistrements de ce type peuvent exister en même temps. Une fois 2 enregistrements effectués, il faudra appeler [XAppCaptureCloseLocalStream](/fr-CA/reference/system/xappcapture/functions/xappcapturecloselocalstream) pour fermer et supprimer un enregistrement avant de pouvoir en effectuer un autre. Cette fonction peut servir à capturer l'activité passée ou future.

## Syntaxe

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

### Paramètres

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

L'horodatage à partir duquel commencer l'enregistrement. Ce paramètre peut être null, auquel cas le système calcule automatiquement l'heure de début comme étant *durationInMilliseconds* dans le passé, et l'enregistrement contiendra les activités passées.

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

Durée de l'enregistrement, en millisecondes.

*result* \_Out\_\
Type : XAppCaptureLocalResult \*

À la fin de la fonction, contient les résultats de la capture. Consultez [XAppCaptureReadLocalStream](/fr-CA/reference/system/xappcapture/functions/xappcapturereadlocalstream) pour savoir comment lire l'enregistrement obtenu.

### Valeur de retour

Type : HRESULT

Résultat de la fonction.

La fonction retourne E\_ACCESSDENIED si le paramètre GameDVR de l'utilisateur interdit aux jeux d'effectuer des captures.

## Remarques

Il existe deux façons de transmettre le paramètre *startTimestamp* pour enregistrer l'activité passée.

Dans la première, on transmet null. Le système calcule automatiquement l'horodatage et enregistre les activités passées d'une durée de *durationInMilliseconds* jusqu'à maintenant.

<Note>Les clips plus anciens seront supprimés lorsque l'espace alloué sera plein afin de faire de la place pour les nouveaux clips. Utilisez [PLS](/fr-CA/reference/system/xpersistentlocalstorage/xpersistentlocalstorage_members) (stockage local persistant), le stockage connecté (p. ex. [XGameSave](/fr-CA/reference/system/xgamesave/xgamesave_members) ou [XGameSaveFiles](/fr-CA/reference/system/xgamesavefiles/xgamesavefiles_members)) ou un système de stockage semblable afin de conserver les clips pendant une période déterminée.</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);
}
```

Dans la seconde, vous devez calculer l'horodatage de début souhaité en convertissant SYSTEMTIME ou FILETIME en ULARGE\_INTEGER, en effectuant les calculs nécessaires, puis en reconvertissant ULARGE\_INTEGER en 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 peut également servir à enregistrer les *durationInMilliseconds* prochaines millisecondes d'activité en spécifiant l'heure système actuelle pour *startTimestamp*.

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

Consultez [XAppCaptureLocalResult](/fr-CA/reference/system/xappcapture/structs/xappcapturelocalresult) et [XAppCaptureReadLocalStream](/fr-CA/reference/system/xappcapture/functions/xappcapturereadlocalstream)

## Configuration requise

**En-tête :** XAppCapture.h

**Bibliothèque :** xgameruntime.lib

**Plateformes prises en charge :** consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[Membres de XAppCapture](/fr-CA/reference/system/xappcapture/xappcapture_members)


## Related topics

- [XAppCaptureLocalResult](/fr-CA/reference/system/xappcapture/structs/xappcapturelocalresult.md)
- [XAppCaptureReadLocalStream](/fr-CA/reference/system/xappcapture/functions/xappcapturereadlocalstream.md)
- [XAppCapture](/fr-CA/reference/system/xappcapture/xappcapture_members.md)
- [XAppCaptureGetVideoCaptureSettings](/fr-CA/reference/system/xappcapture/functions/xappcapturegetvideocapturesettings.md)
- [Wrappers d'API C# Unity pour le GDK](/fr-CA/build/gdk-and-engines/unity/unity-api-wrappers.md)
