

# Enregistrement IVS \$1 Diffusion en temps réel
<a name="rt-recording"></a>

Il existe deux options d’enregistrement pour la diffusion en temps réel IVS :
+ Avec l’enregistrement des participants individuels, le contenu multimédia de chaque diffuseur de publication est enregistré dans des fichiers séparés.
+ En revanche, l’enregistrement composite combine le contenu multimédia de tous les diffuseurs de publication en une seule vue et l’enregistre dans un seul fichier.

L’enregistrement des participants individuels n’entraîne aucun frais Amazon IVS supplémentaire, tandis que l’enregistrement composite entraîne des frais correspondant au tarif horaire de la vidéo encodée. Les deux options d’enregistrement impliquent des coûts standards de stockage et de requête S3. Pour plus de détails, consultez la [Tarification Amazon IVS](https://aws.amazon.com/ivs/pricing/).

Pour une solution plus personnalisée, envisagez d’utiliser le projet open-source [IVSStageSaver](https://github.com/aws-samples/amazon-ivs-stage-recorder) comme base pour votre propre service d’enregistrement auto-hébergé.

## Enregistrement des participants individuels
<a name="ind-par-rec"></a>

Cette option est idéale pour les diffusions en direct avec un seul diffuseur de publication ou lorsque des enregistrements séparés de chaque diffuseur de publication sont nécessaires, notamment à des fins de modération. Pour plus de détails, consultez la section [Enregistrement des participants individuels](rt-individual-participant-recording.md).

![\[Enregistrement de chaque diffuseur de publication dans un fichier séparé par l’enregistrement des participants individuels.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Enregistrement composite
<a name="comp-rec"></a>

Cette option combine le contenu multimédia de plusieurs diffuseurs de publication en une seule vue et les enregistre dans un seul fichier, ce qui est idéal pour une expérience de vidéo à la demande. Pour plus de détails, consultez la section [Enregistrement composite](rt-composite-recording.md).

![\[Enregistrer une scène dans un compartiment S3 à l’aide d’un montage côté serveur.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/images/Composite_Recording.png)


## Miniatures
<a name="thumbnails"></a>

L'enregistrement des miniatures pour le streaming en temps réel IVS peut être configuré à la fois pour les enregistrements des participants individuels et pour les enregistrements composites (multi-participants). Pour activer ou désactiver l'enregistrement des miniatures et régler l'intervalle de génération des miniatures :
+ Pour les enregistrements des participants individuels, utilisez la propriété `thumbnailConfiguration`.
+ Pour les enregistrements composites, utilisez la propriété `thumbnailConfigurations`.

Les intervalles entre miniatures peuvent être compris entre 1 seconde et 86400 secondes (24 heures) ; par défaut, l'enregistrement des miniatures est désactivé. Pour obtenir des détails, veuillez consulter la [Référence de l'API de streaming en temps réel Amazon IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/Welcome.html).

Une configuration de miniatures comprend un champ `storage`, qui peut être défini sur `SEQUENTIAL` et/ou `LATEST`. Le champ `storage` détermine le comportement de stockage S3 pour les miniatures :
+ `SEQUENTIAL` enregistre toutes les miniatures en série. Il s’agit de l’option par défaut.
+ `LATEST` enregistre uniquement la miniature la plus récente, en remplaçant la précédente.

Si vous spécifiez les deux `SEQUENTIAL` et `LATEST`, les miniatures sont écrites dans deux chemins S3 séparés, l'un pour l'archive séquentielle et l'autre pour la dernière miniature.

# Enregistrement des participants individuels IVS \$1 Diffusion en temps réel
<a name="rt-individual-participant-recording"></a>

Ce document explique comment utiliser l'enregistrement individuel des participants avec la diffusion en temps réel IVS.

Les coûts de stockage et de demande S3 standard s'appliquent. Les miniatures n'entraînent aucun frais IVS supplémentaire. Pour en savoir plus, consultez la [Tarification Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Introduction
<a name="ind-part-rec-introduction"></a>

L’enregistrement des participants individuels permet aux clients de diffusion en temps réel IVS d’enregistrer chaque diffuseur de publication de scène IVS individuellement dans des compartiments S3. Lorsque l’enregistrement des participants individuels est activé pour une scène, le contenu du diffuseur de publication est enregistré dès qu’il commence à publier sur la scène.

**Remarque :** si vous avez besoin d’enregistrer tous les participants d’une scène dans une seule vidéo, la fonctionnalité d’enregistrement composite est plus adaptée. Consultez la section [Enregistrement](rt-recording.md) pour un résumé sur l’enregistrement du contenu de diffusion en temps réel IVS.

![\[Enregistrement de chaque diffuseur de publication dans un fichier séparé par l’enregistrement des participants individuels.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Flux de travail
<a name="ind-part-rec-workflow"></a>

![\[Flux de travail pour l’enregistrement de chaque diffuseur de publication dans un fichier séparé par l’enregistrement des participants individuels.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. Création d'un compartiment S3
<a name="ind-part-rec-create-s3-bucket"></a>

Vous aurez besoin d’un compartiment S3 pour écrire des vidéos à la demande (VOD). Pour plus de détails, consultez la documentation S3 sur la [création des compartiments](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). Notez que pour l’enregistrement des participants individuels, les compartiments S3 doivent être créés dans la même région AWS que la scène IVS.

**Important** : si vous utilisez un compartiment S3 existant :
+ Le paramètre **Propriété de l’objet** doit être configuré sur **Application du propriétaire du compartiment** ou **Préférence pour le propriétaire du compartiment**.
+ Le paramètre **Chiffrement par défaut** doit être **Chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3)**.

Pour plus d’informations, consultez la documentation S3 sur le [contrôle de la propriété des objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) et la [protection des données à l’aide du chiffrement](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).

### 2. Création d’un objet StorageConfiguration
<a name="ind-part-rec-create-storageconfig-object"></a>

Après avoir créé un compartiment, appelez l’API de diffusion en temps réel IVS pour [créer un objet StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html). Une fois la configuration de stockage créée avec succès, IVS aura l’autorisation d’écrire dans le compartiment S3 indiqué. Vous pouvez réutiliser cet objet StorageConfiguration pour plusieurs scènes.

### 3. Création d’une scène avec des jetons de participant
<a name="ind-part-rec-create-stage-with-part-tokens"></a>

Vous devez maintenant [créer une scène IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html) avec l’enregistrement des participants individuels activé (en configurant l’objet AutoParticipantRecordingConfiguration) et des jetons de participant pour chaque diffuseur de publication.

La requête ci-dessous crée une scène avec deux jetons de participant et l’enregistrement des participants individuels activé.

```
POST /CreateStage HTTP/1.1
Content-type: application/json

{
   "autoParticipantRecordingConfiguration": { 
      "mediaTypes": ["AUDIO_VIDEO"],
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "thumbnailConfiguration": {
         "recordingMode": "INTERVAL",
         "storage": ["LATEST", "SEQUENTIAL"],
         "targetIntervalSeconds": 60
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

### 4. Participation à la scène en tant que diffuseur de publication actif
<a name="ind-part-rec-join-stage-as-active-pub"></a>

Distribuez les jetons de participant à vos diffuseurs de publication pour qu’ils rejoignent la scène et commencent à [y publier](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html).

Lorsqu’ils rejoignent la scène et commencent à y publier à l’aide de l’un des [kits SDK de diffusion en temps réel IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html), le processus d’enregistrement des participants démarre automatiquement et vous envoie un [événement EventBridge](eventbridge.md) indiquant que l’enregistrement a commencé. (L’événement est Changement d’état de l’enregistrement des participants IVS – Démarrage de l’enregistrement.) Simultanément, le processus d’enregistrement des participants commence à écrire les fichiers VOD et les métadonnées dans le compartiment S3 configuré. Remarque : l’enregistrement des participants connectés pour des durées extrêmement courtes (moins de 5 secondes) n’est pas garanti.

Il existe deux méthodes pour obtenir le préfixe S3 de chaque enregistrement :
+ Écouter l’événement EventBridge :

  ```
  {
     "version": "0",
     "id": "12345678-1a23-4567-a1bc-1a2b34567890",
     "detail-type": "IVS Participant Recording State Change",
     "source": "aws.ivs",
     "account": "123456789012",
     "time": "2024-03-13T22:19:04Z",
     "region": "us-east-1",
     "resources": ["arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij"],
     "detail": {
        "session_id": "st-ZyXwvu1T2s",
        "event_name": "Recording Start",
        "participant_id": "xYz1c2d3e4f",
        "recording_s3_bucket_name": "ivs-recordings",
        "recording_s3_key_prefix": "<stage_id>/<session_id>/<participant_id>/2024-01-01T12-00-55Z"
     }
  }
  ```
+ Utiliser l’opération d’API [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html) : la réponse inclut le compartiment S3 et le préfixe indiquant où un participant est enregistré. Voici la requête :

  ```
  POST /GetParticipant HTTP/1.1
  Content-type: application/json
  {
     "participantID": "xYz1c2d3e4f",
     "sessionId": "st-ZyXwvu1T2s",
     "stageArn": "arn:aws:ivs:us-west-2:123456789012:stage/AbCdef1G2hij"
  }
  ```

  Et voici la réponse :

  ```
  Content-type: application/json
  {
     "participant": {
        ...
        "recordingS3BucketName": "ivs-recordings",
        "recordingS3Prefix": "<stage_id>/<session_id>/<participant_id>",
        "recordingState": "ACTIVE",
        ...
     }
  }
  ```

### 5. Lecture de la VOD
<a name="ind-part-rec-play-back-vod"></a>

Une fois l’enregistrement finalisé, vous pouvez le visionner en utilisant le [lecteur IVS](https://debug.ivsdemos.com/?p=ivs). Consultez la section [Lecture du contenu enregistré à partir de compartiments privés](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback) pour obtenir des instructions sur la configuration des distributions CloudFront pour la lecture de vidéos à la demande.

## Enregistrement audio uniquement
<a name="ind-part-rec-audio-only-recordings"></a>

Lors de la configuration de l’enregistrement des participants individuels, vous pouvez choisir de n’enregistrer que les segments HLS audio dans votre compartiment S3. Pour utiliser cette fonctionnalité, choisissez le `AUDIO_ONLY mediaType` lors de la création de la scène :

```
POST /CreateStage HTTP/1.1
Content-type: application/json

{
   "autoParticipantRecordingConfiguration": { 
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "mediaTypes": ["AUDIO_ONLY"],
      "thumbnailConfiguration": {
         "recordingMode": "DISABLED"
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

## Enregistrement miniatures uniquement
<a name="ind-part-rec-recording-thumbnail-only"></a>

Lors de la configuration de l’enregistrement des participants individuels, vous pouvez choisir de n’enregistrer que les mininatures dans votre compartiment S3. Pour utiliser cette fonctionnalité, définissez `mediaType` sur `NONE` lors de la création de la scène. Cela garantit qu'aucun segment HLS n'est généré ; les miniatures sont toujours créées et écrites dans votre compartiment S3.

```
POST /CreateStage HTTP/1.1
Content-type: application/json
{
   "autoParticipantRecordingConfiguration": { 
      "storageConfigurationArn": "arn:aws:ivs:us-west-2:123456789012:storage-configuration/AbCdef1G2hij",
      "mediaTypes": ["NONE"],
      "thumbnailConfiguration": {
         "recordingMode": "INTERVAL",
         "storage": ["LATEST", "SEQUENTIAL"],
         "targetIntervalSeconds": 60
      }
   },
   "name": "TestStage",
   "participantTokenConfigurations": [ 
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "1"
      },
      { 
         "capabilities": ["PUBLISH", "SUBSCRIBE"],
         "duration": 20160,
         "userId": "2"
      }
   ]
}
```

## Enregistrer des contenus
<a name="ind-part-rec-recording-contents"></a>

Lorsque l’enregistrement des participants individuels est actif, les segments vidéo HLS, les fichiers de métadonnées et les miniatures commenceront à être écrits dans le compartiment S3 spécifié lors de la création de la scène. Ce contenu est disponible pour le post-traitement ou la lecture en tant que vidéo à la demande.

Notez qu’une fois l’enregistrement finalisé, un événement Changement d’état de l’enregistrement des participants IVS – Fin de l’enregistrement est envoyé via EventBridge. Nous vous recommandons de lire ou de traiter les flux enregistrés uniquement après réception de cet événement. Pour plus de détails, consultez [Utilisation d’Amazon EventBridge avec le streaming en temps réel IVS](eventbridge.md).

Voici un exemple de structure de répertoire et de contenu d’un enregistrement d’une session IVS en direct :

```
s3://mybucket/stageId/stageSessionId/participantId/timestamp
   events
      recording-started.json
      recording-ended.json
   media
      hls
	 multivariant.m3u8
         high
            playlist.m3u8
            1.mp4
      thumbnails
         high
            1.jpg
            2.jpg
      latest_thumbnail
         high
            thumb.jpg
```

Le dossier `events` contient les fichiers de métadonnées correspondant à l’événement d’enregistrement. Les fichiers de métadonnées JSON sont générés lorsque l’enregistrement démarre, se termine avec succès ou se termine avec des échecs :
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Un dossier `events` contient `recording-started.json` et `recording-ended.json` ou `recording-failed.json`. Ceux-ci contiennent des métadonnées relatives à la session enregistrée et à ses formats de sortie. Les détails JSON sont fournis ci-dessous.

Le dossier `media` contient le contenu multimédia pris en charge. Le sous-dossier `hls` contient tous les fichiers multimédia et manifestes générés au cours de la session d’enregistrement et est lisible avec le lecteur IVS. S'ils sont configurés, les sous-dossiers `thumbnails` et `latest_thumbnail` contiennent des fichiers multimédias miniatures JPEG générés au cours de la session d'enregistrement.

## Fusionner les enregistrements fragmentés de participants individuels
<a name="ind-part-rec-merge-frag"></a>

La propriété `recordingReconnectWindowSeconds` d’une configuration d’enregistrement vous permet de spécifier une fenêtre horaire (en secondes) pendant laquelle, si un éditeur d'étape se déconnecte d'une étape puis se reconnecte, IVS essaie d'enregistrer sur le même préfixe S3 que la session précédente. En d’autres termes, si un éditeur se déconnecte puis se reconnecte dans l’intervalle spécifié, les enregistrements multiples sont considérés comme un seul enregistrement et sont fusionnés.

Si l'enregistrement des miniatures est activé en mode `SEQUENTIAL`, les miniatures sont également fusionnées sous le même `recordingS3Prefix`. Lorsque les enregistrements sont fusionnés, le compteur des miniatures redémarre à partir de la valeur de miniature précédente écrite pour l'enregistrement précédent.

**Événements de changement d’état d’enregistrement IVS dans Amazon EventBridge :** les événements de fin d’enregistrement et les fichiers de métadonnées JSON recording-ended sont retardés d’au moins `recordingReconnectWindowSeconds`, pendant qu’IVS attend de s’assurer qu’un nouveau flux ne démarre pas.

Pour obtenir des instructions sur la configuration de fusion des flux, veuillez consulter la rubrique [Étape 2 : Créer une étape avec enregistrement optionnel des participants](getting-started-create-stage.md) dans *Mise en route avec la diffusion en temps réel d’Amazon IVS*.

### Éligibilité
<a name="ind-part-rec-merge-frag-eligibility"></a>

Pour que plusieurs enregistrements soient fusionnés en utilisant le même préfixe S3, certaines conditions doivent être remplies pour tous les enregistrements :
+ La valeur de la propriété `recordingReconnectWindowSeconds` AutoParticipantRecordingConfiguration pour l’étape est définie sur une valeur supérieure à 0.
+ Le `StorageConfigurationArn` utilisé pour écrire les artefacts de VOD est le même pour chaque enregistrement.
+ La différence de temps en secondes entre le moment où le participant quitte l'étape et celui où il rejoint l'étape est inférieur ou égal à `recordingReconnectWindowSeconds`.

Notez que la valeur par défaut de `recordingReconnectWindowSeconds` est 0, ce qui désactive la fusion.

## Synchroniser les enregistrements de plusieurs participants
<a name="ind-part-rec-sync-multiple"></a>

Les enregistrements individuels des participants incluent des balises `EXT-X-PROGRAM-DATE-TIME` dans les listes de lecture HLS, qui fournissent des horodatages UTC précis avec une précision de l’ordre de la milliseconde pour synchroniser les enregistrements de participants multiples lors du post-traitement.

Lorsque vous enregistrez plusieurs participants individuellement et que vous souhaitez créer un montage synchronisé (comme une mise en page côte à côte ou image en incrustation), vous pouvez utiliser ces horodatages pour aligner les enregistrements avec précision, même si les participants ont rejoint l’étape à des moments différents ou ont connu des discontinuités potentiellement causées par des interruptions du réseau.

La liste de lecture HLS de chaque participant inclut des balises `EXT-X-PROGRAM-DATE-TIME` qui indiquent :
+ Le début de l’enregistrement (premier segment).
+ Tout point de discontinuité pendant l’enregistrement, par exemple lors de l’assemblage.

Ces horodatages utilisent une précision de l’ordre de la milliseconde et sont synchronisés entre tous les participants en utilisant la même référence temporelle.

### Exemple de liste de lecture HLS
<a name="ind-part-rec-sync-multiple-hls-playlist"></a>

```
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:12
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="init-0.mp4"
#EXT-X-PROGRAM-DATE-TIME:2024-01-01T12:00:00.000Z
#EXTINF:3.30091,
0.mp4
#EXTINF:5.63794,
1.mp4
#EXTINF:2.74290,
2.mp4
#EXT-X-DISCONTINUITY
#EXT-X-MAP:URI="init-1.mp4"
#EXT-X-PROGRAM-DATE-TIME:2024-01-01T12:00:52.772Z
#EXTINF:2.54412,
3.mp4
#EXTINF:5.63649,
4.mp4
```

Les balises `EXT-X-PROGRAM-DATE-TIME` fournissent l’heure UTC exacte pour le premier segment et à chaque point de discontinuité, ce qui permet une synchronisation précise avec les enregistrements des autres participants.

### Flux de travail de synchronisation
<a name="ind-part-rec-sync-multiple-workflow"></a>

Pour synchroniser les enregistrements de plusieurs participants, extrayez les horodatages `EXT-X-PROGRAM-DATE-TIME` de la liste de lecture HLS de chaque participant et utilisez-les pour calculer les décalages temporels. Ces décalages peuvent ensuite être appliqués lors du post-traitement du montage à l’aide d’outils de traitement vidéo comme FFmpeg. Lorsque des discontinuités sont présentes dans les enregistrements, les horodatages à ces points fournissent les références temporelles nécessaires pour maintenir une synchronisation précise tout au long de l’enregistrement.

Remarque : pour une sortie synchronisée en temps réel sans post-traitement, envisagez d’utiliser un montage côté serveur plutôt qu’un enregistrement des participants individuels.

## Fichiers de métadonnées JSON
<a name="ind-part-rec-json-metadata-files"></a>

Ces métadonnées sont au format JSON. Il contient les informations suivantes : 


| Champ | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
| `stage_arn` | chaîne | Oui | ARN de la scène utilisée comme source d’enregistrement. | 
| `session_id` | chaîne | Oui | Chaîne représentant l’identifiant `session_id` de la scène où le participant est enregistré. | 
| `participant_id` | chaîne | Oui | Chaîne représentant l’identifiant du participant enregistré. | 
| `recording_started_at` | chaîne | Conditionnel | Horodatage RFC 3339 UTC lorsque l’enregistrement a démarré. Ceci n’est pas disponible quand `recording_status` est à l’état `RECORDING_START_FAILED`. Consultez également la remarque ci-dessous pour `recording_ended_at`. | 
| `recording_ended_at` | chaîne | Conditionnel | Horodatage RFC 3339 UTC à la fin de l’enregistrement. Disponible uniquement lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. **Remarque :** `recording_started_at` et `recording_ended_at` sont des horodatages lorsque ces événements sont générés et peuvent ne pas correspondre exactement aux horodatages du segment vidéo HLS. Pour déterminer avec précision la durée d’un enregistrement, utilisez le champ `duration_ms`. | 
| `recording_status` | chaîne | Oui | Statut de l’enregistrement. Valeurs valides: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | chaîne | Conditionnel | Informations descriptives sur le statut. Disponible uniquement lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `media` | objet | Oui | Objet contenant les objets énumérés du contenu multimédia disponibles pour cet enregistrement. Valeur valide : `"hls"`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Oui | Champ énuméré qui décrit la sortie du format Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | entier | Conditionnel | Durée du contenu HLS enregistré en millisecondes. Celle-ci n’est disponible que lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. Si un échec s’est produit avant l’enregistrement, la valeur est 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu HLS est stocké. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Nom du fichier de la liste de lecture principale HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Oui | Tableau des rendus (variantes HLS) d’objets de métadonnées. Il y a toujours au moins un rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu HLS est stocké pour ce rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Nom du fichier de la liste de lecture des médias pour ce rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Conditionnel | Champ énuméré qui décrit la sortie des miniatures. Ce champ n’est disponible que lorsque le champ `storage` de la configuration des miniatures comprend `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu des miniatures séquentielles est stocké. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Oui | Tableau des rendus (variantes de miniatures) d’objets de métadonnées. Il y a toujours au moins un rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu des miniatures est stocké pour ce rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Conditionnel | Champ énuméré qui décrit la sortie des miniatures. Ce champ n’est disponible que lorsque le champ `storage` de la configuration des miniatures comprend `LATEST`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où est stocké `latest_thumbnail`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objet | Oui | Tableau des rendus (variantes de miniatures) d’objets de métadonnées. Il y a toujours au moins un rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où la dernière miniature est stockée pour ce rendu. | 
| `version` | chaîne | Oui | Version du schéma des métadonnées. | 

### Exemple : recording-started.json
<a name="ind-part-rec-json-ex-rec-start"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T13:17:17Z",
   "recording_status": "RECORDING_STARTED",
   "media": {
      "hls": {
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

### Exemple : recording-ended.json
<a name="ind-part-rec-json-ex-rec-end"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T19:44:19Z",
   "recording_ended_at": "2024-03-13T19:55:04Z",
   "recording_status": "RECORDING_ENDED",
   "media": {
      "hls": {
         "duration_ms": 645237,
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

### Exemple : recording-failed.json
<a name="ind-part-rec-json-ex-rec-failed"></a>

```
{
   "version": "v1",
   "stage_arn": "arn:aws:ivs:us-west-2:aws_account_id:stage/AbCdef1G2hij",
   "session_id": "st-ZyXwvu1T2s",
   "participant_id": "xYz1c2d3e4f",
   "recording_started_at": "2024-03-13T19:44:19Z",
   "recording_ended_at": "2024-03-13T19:55:04Z",
   "recording_status": "RECORDING_ENDED_WITH_FAILURE",
   "media": {
      "hls": {
         "duration_ms": 645237,
         "path": "media/hls",
         "playlist": "multivariant.m3u8",
         "renditions": [
            {
               "path": "high",
               "playlist": "playlist.m3u8"
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "renditions": [
            {
               "path": "high"
            }
         ]
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail",
         "renditions": [
            {
               "path": "high"
            }
         ]
      }
   }
}
```

## Conversion d'enregistrements en MP4
<a name="ind-part-rec-convert-rec-mp4"></a>

Les enregistrements des participants individuels sont stockés au format HLS, composé de listes de lecture et de segments MP4 fragmentés (fMP4). Pour convertir un enregistrement HLS en un seul fichier MP4, installez FFmpeg et exécutez la commande suivante :

```
ffmpeg -i /path/to/playlist.m3u8 -i /path/to/playlist.m3u8 -map 0:v -map 1:a -c copy output.mp4
```

# Enregistrement composite IVS \$1 Diffusion en temps réel
<a name="rt-composite-recording"></a>

Ce document explique comment utiliser la fonction d’enregistrement composite dans un [montage côté serveur.](server-side-composition.md) L’enregistrement composite vous permet de générer des enregistrements HLS d’une scène IVS. Pour ce faire, il combine efficacement tous les diffuseurs de publication en une seule vue à l’aide d’un serveur IVS, puis enregistre la vidéo obtenue dans un compartiment S3.

Les coûts de stockage et de demande S3 standard s'appliquent. Les miniatures n'entraînent aucun frais IVS supplémentaire. Pour en savoir plus, consultez la [Tarification Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Conditions préalables
<a name="comp-rec-prerequisites"></a>

Pour utiliser l’enregistrement composite, vous devez disposer d’une scène avec des diffuseurs de publication actifs ainsi que d’un compartiment S3 comme destination d’enregistrement. Vous trouverez ci-dessous un flux de travail possible qui utilise les événements EventBridge pour enregistrer un montage dans un compartiment S3. Vous pouvez également démarrer et arrêter des montages en fonction de la logique de votre propre application.

1. Créez une [scène IVS](getting-started-create-stage.md) et des jetons de participation pour chaque diffuseur de publication.

1. Créez une configuration [EncoderConfiguration](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_CreateEncoderConfiguration.html) (un objet représentant la manière dont la vidéo enregistrée doit être rendue).

1. Créez un [compartiment S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) et une configuration [StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html) (emplacement où le contenu de l’enregistrement sera stocké).

   **Important** : si vous utilisez un compartiment S3 existant, le paramètre **Propriété de l’objet** doit être **appliqué par le propriétaire du compartiment** ou **préféré par le propriétaire du compartiment**. Pour plus de détails, consultez la documentation S3 sur le [contrôle de la propriété des objets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).

1. [Joignez-vous à la scène et diffusez dessus](getting-started-pub-sub.md).

1. Lorsque vous recevez un [événement EventBridge](eventbridge.md) diffusé par un participant, appelez [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html) avec un objet S3 DestinationConfiguration comme destination

1. Au bout de quelques secondes, vous devriez être en mesure de voir que les segments HLS sont conservés dans vos compartiments S3.

![\[Enregistrer une scène dans un compartiment S3 à l’aide d’un montage côté serveur.\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/images/Composite_Recording_Workflow.png)


**Remarque** : un montage s’arrête automatiquement après 60 secondes d’inactivité de la part du diffuseur de publication participant à la scène. À ce stade, le montage prend fin et passe à un état `STOPPED`. Un montage est automatiquement supprimé après quelques minutes passées dans l’état `STOPPED`. Pour plus de détails, consultez la section [Cycle de vie des montages](ssc-overview.md#ssc-composition-endpoint) dans *Montage côté serveur*.

## Exemple d’enregistrement composite : StartComposition avec une destination de compartiment S3
<a name="comp-rec-example"></a>

L’exemple ci-dessous montre un appel typique à l’opération [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html), spécifiant S3 comme seule destination pour le montage. Une fois que le montage passe à un état `ACTIVE`, les segments vidéo et les métadonnées commencent à être écrits dans le compartiment S3 spécifié par l’objet `storageConfiguration`. Pour créer des montages avec différentes mises en page, consultez la rubrique « Mises en page » de la section [Montage côté serveur](ssc-overview.md#ssc-api-layouts) ainsi que la [Référence de l’API de diffusion en temps réel IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_LayoutConfiguration.html).

### Demande
<a name="comp-rec-example-request"></a>

```
POST /StartComposition HTTP/1.1
Content-type: application/json

{
   "destinations": [
      {
         "s3": {
            "encoderConfigurationArns": [
              "arn:aws:ivs:ap-northeast-1:927810967299:encoder-configuration/PAAwglkRtjge"
            ],
            "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:927810967299:storage-configuration/ZBcEbgbE24Cq",
	    "thumbnailConfigurations": [
	       {
		  "storage": ["LATEST", "SEQUENTIAL"],
		  "targetIntervalSeconds": 30
               }
	    ]
	 }
      }
   ],
   "idempotencyToken": "db1i782f1g9",
   "stageArn": "arn:aws:ivs:ap-northeast-1:927810967299:stage/WyGkzNFGwiwr"
}
```

### Réponse
<a name="comp-rec-example-response"></a>

```
{
    "composition": {
        "arn": "arn:aws:ivs:ap-northeast-1:927810967299:composition/s2AdaGUbvQgp",
        "destinations": [
            {
                "configuration": {
                    "name": "",
                    "s3": {
                        "encoderConfigurationArns": [
                            "arn:aws:ivs:ap-northeast-1:927810967299:encoder-configuration/PAAwglkRtjge"
                        ],
                        "recordingConfiguration": {
                            "format": "HLS"
                        },
                        "storageConfigurationArn": "arn:aws:ivs:ap-northeast-1:927810967299:storage-configuration/ZBcEbgbE24Cq",
	                "thumbnailConfigurations": [
	                   {
		              "storage": ["LATEST", "SEQUENTIAL"],
		              "targetIntervalSeconds": 30
                           }
	                ]
                    }
                },
                "detail": {
                    "s3": {
                        "recordingPrefix": "MNALAcH9j2EJ/s2AdaGUbvQgp/2pBRKrNgX1ff/composite"
                    }
                },
                "id": "2pBRKrNgX1ff",
                "state": "STARTING"
            }
        ],
        "layout": null,
        "stageArn": "arn:aws:ivs:ap-northeast-1:927810967299:stage/WyGkzNFGwiwr",
        "startTime": "2023-11-01T06:25:37Z",
        "state": "STARTING",
        "tags": {}
    }
}
```

Le champ `recordingPrefix`, présent dans la réponse StartComposition, peut être utilisé pour déterminer l’emplacement où le contenu de l’enregistrement sera stocké. 

## Enregistrer des contenus
<a name="comp-rec-contents"></a>

Lorsque le montage passe à un état `ACTIVE`, les segments vidéo HLS, les fichiers de métadonnées et les miniatures (si configurées) commenceront à être écrits dans le compartiment S3 spécifié lors de l'appel de StartComposition. Ce contenu est disponible pour le post-traitement ou la lecture en tant que vidéo à la demande.

Notez qu’une fois qu’un montage est mis en ligne, un événement « IVS Composition State Change » est émis et cela peut prendre un peu de temps avant que les fichiers manifestes, les segments vidéo et les miniatures ne soient écrits. Nous vous recommandons de ne lire ou de ne traiter les flux enregistrés qu’après réception de l’événement « Changement d’état du montage IVS (fin de session) ». Pour plus de détails, consultez [Utilisation d’Amazon EventBridge avec le streaming en temps réel IVS](eventbridge.md).

Voici un exemple de structure de répertoire et de contenu d’un enregistrement d’une session IVS en direct :

```
MNALAcH9j2EJ/s2AdaGUbvQgp/2pBRKrNgX1ff/composite
   events
      recording-started.json
      recording-ended.json
   media
      hls
      thumbnails
      latest_thumbnail
```

Le dossier `events` contient les fichiers de métadonnées correspondant à l’événement d’enregistrement. Les fichiers de métadonnées JSON sont générés lorsque l’enregistrement démarre, se termine avec succès ou se termine avec des échecs :
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Un fichier `events` contiendra `recording-started.json` et `recording-ended.json` ou `recording-failed.json`.

Ceux-ci contiennent des métadonnées relatives à la session enregistrée et à ses formats de sortie. Les détails JSON sont fournis ci-dessous.

Le dossier `media` contient le contenu multimédia pris en charge. Le sous-dossier `hls` contient tous les fichiers multimédia et manifestes générés au cours de la session de montage et est lisible avec le lecteur Amazon IVS. Le manifeste HLS se trouve dans le dossier `multivariant.m3u8`. S'ils sont configurés, les sous-dossiers `thumbnails` et `latest_thumbnail` contiennent des fichiers multimédias miniatures JPEG générés au cours de la session de composition.

## Politique de compartiment pour la configuration du stockage
<a name="comp-rec-bucket-policy"></a>

Lorsqu’un objet StorageConfiguration est créé, IVS disposera de l’accès nécessaire pour écrire du contenu dans le compartiment S3 spécifié. Cet accès est accordé en apportant des modifications à la politique du compartiment S3. *Si la politique du compartiment est modifiée de manière à supprimer l’accès d’IVS, les enregistrements en cours et les nouveaux enregistrements échoueront.*

L’exemple ci-dessous montre une politique de compartiment S3 qui permet à IVS d’écrire dans le compartiment S3 :

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CompositeWrite-y1d212y",
            "Effect": "Allow",
            "Principal": {
                "Service": "ivs-composite.ap-northeast-1.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                },
                "Bool": {
                    "aws:SecureTransport": "true"
                }
            }
        }
    ]
}
```

------

## Fichiers de métadonnées JSON
<a name="comp-rec-json"></a>

Ces métadonnées sont au format JSON. Il contient les informations suivantes : 


| Champ | Type | Obligatoire | Description | 
| --- | --- | --- | --- | 
| `stage_arn` | chaîne | Oui | ARN de la scène utilisée comme source du montage. | 
| `media` | objet | Oui | Objet contenant les objets énumérés du contenu multimédia disponibles pour cet enregistrement. Valeurs valides : `"hls"`.  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html) | objet | Oui | Champ énuméré qui décrit la sortie du format Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | entier | Conditionnel | Durée du contenu HLS enregistré en millisecondes. Celle-ci n’est disponible que lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. Si un échec s’est produit avant l’enregistrement, la valeur est 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu HLS est stocké. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui |  Nom du fichier de la liste de lecture principale HLS.  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | objet | Oui | Tableau des rendus (variante HLS) d’objets de métadonnées. Il y a toujours au moins un rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu HLS est stocké pour ce rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Nom du fichier de la liste de lecture des médias pour ce rendu. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | ent | Conditionnel | Hauteur de résolution en pixels de la vidéo encodée. Cette option n’est disponible que lorsque le rendu contient une piste vidéo. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | ent | Conditionnel | Largeur de résolution en pixels de la vidéo encodée. Cette option n’est disponible que lorsque le rendu contient une piste vidéo. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | objet | Conditionnel | Champ énuméré qui décrit la sortie des miniatures. Ce champ n’est disponible que lorsque le champ `storage` de la configuration des miniatures comprend `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu des miniatures séquentielles est stocké. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | objet | Oui | Tableau des résolutions (variantes de miniatures) d’objets de métadonnées. Il y a toujours au moins une résolution. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où le contenu des miniatures est stocké pour cette résolution. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Oui | Hauteur de résolution en pixels des miniatures. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Oui | Largeur de résolution en pixels des miniatures. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | objet | Conditionnel | Champ énuméré qui décrit la sortie des miniatures. Ce champ n’est disponible que lorsque le champ `storage` de la configuration des miniatures comprend `LATEST`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où est stocké `latest_thumbnail`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | objet | Oui | Tableau des résolutions (variantes de miniatures) d’objets de métadonnées. Il y a toujours au moins une résolution. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | chaîne | Oui | Chemin relatif depuis le préfixe S3 où la dernière miniature est stockée pour cette résolution. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Oui | Hauteur de résolution en pixels de la dernière miniature. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Oui | Largeur de résolution en pixels de la dernière miniature. | 
| `recording_ended_at` | chaîne | Conditionnel | Horodatage RFC 3339 UTC à la fin de l’enregistrement. Disponible uniquement lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. `recording_started_at` et `recording_ended_at` sont des horodatages lorsque ces événements sont générés et peuvent ne pas correspondre exactement aux horodatages du segment vidéo HLS. Pour déterminer avec précision la durée d’un enregistrement, utilisez le champ `duration_ms`.  | 
| `recording_started_at` | chaîne | Conditionnel | Horodatage RFC 3339 UTC lorsque l’enregistrement a démarré. Ceci n’est pas disponible quand `recording_status` est à l’état `RECORDING_START_FAILED`. Veuillez lire la note ci-dessus relative à `recording_ended_at`.  | 
| `recording_status` | chaîne | Oui | Statut de l’enregistrement. Valeurs valides: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | chaîne | Conditionnel | Informations descriptives sur le statut. Disponible uniquement lorsque `recording_status` est `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `version` | chaîne | Oui | Version du schéma des métadonnées. | 

### Exemple : recording-started.json
<a name="comp-rec-json-ex-rec-start"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-11-01T06:01:36Z",
  "recording_status": "RECORDING_STARTED",
  "media": {
    "hls": {
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

### Exemple : recording-ended.json
<a name="comp-rec-json-ex-rec-end"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-10-27T17:00:44Z",
  "recording_ended_at": "2023-10-27T17:08:24Z",
  "recording_status": "RECORDING_ENDED",
  "media": {
    "hls": {
      "duration_ms": 460315,
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

### Exemple : recording-failed.json
<a name="comp-rec-json-ex-rec-fail"></a>

```
{
  "version": "v1",
  "stage_arn": "arn:aws:ivs:ap-northeast-1:123456789012:stage/aAbBcCdDeE12",
  "recording_started_at": "2023-10-27T17:00:44Z",
  "recording_ended_at": "2023-10-27T17:08:24Z",
  "recording_status": "RECORDING_ENDED_WITH_FAILURE",
  "media": {
    "hls": {
      "duration_ms": 460315,
      "path": "media/hls",
      "playlist": "multivariant.m3u8",
      "renditions": [
        {
          "path": "720p30-abcdeABCDE12",
          "playlist": "playlist.m3u8",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "thumbnails": {
      "path": "media/thumbnails",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    },
    "latest_thumbnail": {
      "path": "media/latest_thumbnail",
      "resolutions": [
        {
          "path": "1280x720",
          "resolution_width": 1280,
          "resolution_height": 720
        }
      ]
    }
  }
}
```

## Lecture de contenu enregistré à partir de compartiments privés
<a name="comp-rec-playback"></a>

Par défaut, le contenu enregistré est privé ; par conséquent, ces objets sont inaccessibles à la lecture à l’aide de l’URL directe S3. Si vous essayez d’ouvrir la liste de lecture multivariée HLS (fichier m3u8) pour la lecture à l’aide du lecteur IVS ou d’un autre lecteur, vous obtiendrez une erreur (par exemple, « Vous n’avez pas l’autorisation d’accéder à la ressource demandée »). Au lieu de cela, vous pouvez lire ces fichiers avec le CDN (réseau de diffusion de contenu) Amazon CloudFront.

Les distributions CloudFront peuvent être configurées pour diffuser du contenu à partir de compartiments privés. Généralement, il est préférable d’utiliser cette configuration plutôt que d’avoir des compartiments ouvertement accessibles où les lectures contournent les contrôles proposés par CloudFront. Votre pouvez configurer votre distribution pour diffuser à partir d’un compartiment privé en créant un contrôle d’accès d’origine (OAC), qui est un utilisateur CloudFront spécial qui dispose d’autorisations de lecture sur le compartiment d’origine privé. Vous pouvez créer l’OAC après avoir créé votre distribution, via la console ou l’API CloudFront. Consultez la section [Créer un nouveau contrôle d’accès à l’origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#create-oac-overview-s3) dans le *Guide du développeur Amazon CloudFront*.

### Configurer la lecture à l’aide de CloudFront avec CORS activé
<a name="comp-rec-playback-setup"></a>

Cet exemple explique comment un développeur peut configurer une distribution CloudFront avec CORS activé ; cela permet de lire ses enregistrements depuis n’importe quel domaine. Cela est particulièrement utile pendant la phase de développement. N’hésitez pas à modifier l’exemple ci-dessous pour l’adapter à vos besoins de production.

#### Étape 1 : Créer un compartiment S3
<a name="comp-rec-playback-setup-step1"></a>

Créez un compartiment S3 qui sera utilisé pour stocker les enregistrements. Notez que le compartiment doit se trouver dans la même région que celle que vous utilisez pour votre flux de travail IVS.

Ajouter une poilitque d’autorisation CORS au compartiment :

1. Dans la console AWS, accédez à l’onglet **Autorisations du compartiment S3**.

1. Copiez la stratégie CORS ci-dessous et collez-la sous ** Partage de ressources inter-origines (CORS)**. Cela permettra d’activer l’accès CORS sur le compartiment S3.

   ```
   [
       {
           "AllowedHeaders": [
               "*"
           ],
           "AllowedMethods": [
               "PUT",
               "POST",
               "DELETE",
               "GET"
           ],
           "AllowedOrigins": [
               "*"
           ],
           "ExposeHeaders": [
               "x-amz-server-side-encryption",
               "x-amz-request-id",
               "x-amz-id-2"
           ]
       }
   ]
   ```

#### Étape 2 : Créer une distribution CloudFront
<a name="comp-rec-playback-setup-step2"></a>

Consultez la section [Créer d’une distribution CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html) dans le *Guide du développeur CloudFront*.

Dans la console AWS, entrez les informations suivantes :


| Pour ce champ … | Choisissez ceci... | 
| --- | --- | 
| Domaine de l’origine | Compartiment S3 que vous avez créé à l’étape précédente | 
| Accès à l’origine | Paramètres de contrôle d’accès à l’origine (recommandés) | 
| Comportement du cache par défaut : politique de protocole du visualiseur | Redirect HTTP to HTTPS | 
| Comportement du cache par défaut : méthodes HTTP autorisées | GET, HEAD et OPTIONS | 
| Comportement de cache par défaut : clé de cache et demandes d’origine | Politique de désactivation de la mise en cache | 
| Comportement du cache par défaut : politique de demande d’origine | CORS-S3Origin | 
| Comportement du cache par défaut : politique des en-têtes de réponse | SimpleCORS | 
| Pare-feu d’application Web | Activez les protections de sécurité | 

Enregistrez ensuite la distribution CloudFront.

#### Étape 3 : Configurer la stratégie de compartiment S3
<a name="comp-rec-playback-setup-step3"></a>

1. Supprimez toute configuration de stockage que vous avez configurée pour le compartiment S3. Cela supprimera toutes les politiques de compartiment qui ont été automatiquement ajoutées au moment de la création de la politique pour ce compartiment.

1. Accédez à votre distribution CloudFront, assurez-vous que tous les champs de distribution sont dans les états définis à l’étape précédente, puis **copiez la politique de compartiment** en utilisant le bouton **Copier la politique**. 

1. Accédez à votre compartiment S3. Dans l’onglet **Autorisations**, sélectionnez **Modifier la politique de compartiment** puis collez la politique de compartiment que vous avez copiée à l’étape précédente. Lors de cette étape, la politique de compartiment doit être exclusivement basée sur la politique CloudFront. 

1. Créez une configuration de stockage en spécifiant le compartiment S3.

Une fois la configuration de stockage créée, vous verrez deux éléments dans la politique du compartiment S3 : l’un permet à CloudFront de lire le contenu, et l’autre autorise IVS à écrire du contenu. Un exemple de politique de compartiment final avec accès CloudFront et IVS est présenté dans [Exemple : politique de compartiment S3 avec CloudFront et IVS Access](#comp-rec-playback-example).

#### Étape 4 : Lire des enregistrements
<a name="comp-rec-playback-setup-step4"></a>

Après avoir correctement configuré la distribution CloudFront et mis à jour la politique de compartiment, vous devriez pouvoir lire les enregistrements à l’aide du lecteur IVS :

1. Démarrez correctement un montage et assurez-vous qu’un enregistrement est stocké dans le compartiment S3.

1. Après avoir suivi les étapes 1 à 3 de cet exemple, les fichiers vidéo devraient être disponibles pour consommation via l’URL CloudFront. Votre URL CloudFront est le **Nom de domaine de distribution** sur l’onglet **Détails** dans la console Amazon CloudFront. Elle doit ressembler à ceci : 

   `a1b23cdef4ghij.cloudfront.net`

1. Pour lire la vidéo enregistrée via la distribution CloudFront, recherchez la clé d’objet de votre fichier `multivariant.m3u8` dans le compartiment S3. Elle doit ressembler à ceci :

   `FDew6Szq5iTt/9NIpWJHj0wPT/fjFKbylPb3k4/composite/media/hls/multivariant.m3u8`

1. Ajoutez la clé d’objet à la fin de votre URL CloudFront. Votre URL finale ressemblera à ce qui suit :

   `https://a1b23cdef4ghij.cloudfront.net/FDew6Szq5iTt/9NIpWJHj0wPT/fjFKbylPb3k4/composite/media/hls/multivariant.m3u8`

1. Vous pouvez désormais ajouter l’URL finale à l’attribut source d’un lecteur IVS pour visionner l’enregistrement complet. Pour visionner la vidéo enregistrée, vous pouvez utiliser la démonstration fournie dans la section [Démarrer](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/web-getting-started.html) du *Guide Web : SDK du lecteur IVS*.

### Exemple : politique de compartiment S3 avec CloudFront et IVS Access
<a name="comp-rec-playback-example"></a>

L’extrait ci-dessous illustre une politique de compartiment S3 qui permet à CloudFront de lire du contenu dans le compartiment privé, et à IVS d’écrire du contenu dans le compartiment. **Remarque : ne faites pas un copier/coller de l’extrait ci-dessous dans votre propre compartiment. Votre politique doit contenir les identifiants qui correspondent à votre distribution CloudFront et à votre configuration de stockage.**

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CompositeWrite-7eiKaIGkC9DO",
      "Effect": "Allow",
      "Principal": {
        "Service": "ivs-composite.ap-northeast-1.amazonaws.com"
      },
      "Action": [
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": "arn:aws:s3:::eicheane-test-1026-2-ivs-recordings/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        },
        "Bool": {
          "aws:SecureTransport": "true"
        }
      }
    },
    {
      "Sid": "AllowCloudFrontServicePrincipal",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudfront.amazonaws.com"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::eicheane-test-1026-2-ivs-recordings/*",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:cloudfront::844311324168:distribution/E1NG4YMW5MN25A"
        }
      }
    }
  ]
}
```

------

## Résolution des problèmes
<a name="comp-rec-troubleshooting"></a>
+ **La montage n’est pas écrit dans le compartiment S3**. Assurez-vous que le compartiment S3 et les objets StorageConfiguration sont créés et se trouvent dans la même région. Assurez-vous également qu’IVS a accès au compartiment en vérifiant votre politique de compartiment ; consultez [Politique de compartiment pour StorageConfiguration](#comp-rec-bucket-policy).
+ **Je ne trouve pas de montages lorsque j’exécute *ListCompositions* :** Les montages sont des ressources éphémères. Une fois qu’ils sont passés à un état final, ils sont automatiquement supprimés au bout de quelques minutes.
+ **Mon montage s’arrête automatiquement :** un montage s’arrête automatiquement si aucun diffuseur de publication n’est présent sur la scène pendant plus de 60 secondes.

## Problème connu
<a name="comp-rec-issues"></a>

La liste de lecture multimédia écrite par enregistrement composite possède la balise `#EXT-X-PLAYLIST-TYPE:EVENT` pendant que le montage est en cours. Lorsque le montage est terminé, la balise est mise à jour vers `#EXT-X-PLAYLIST-TYPE:VOD`. Pour une expérience de lecture fluide, nous vous recommandons de n’utiliser cette liste de lecture qu’une fois le montage terminé avec succès.