

# Grabación de participantes individuales en IVS \$1 Transmisión en tiempo real
<a name="rt-individual-participant-recording"></a>

Este documento explica cómo utilizar la grabación de participantes individuales con la transmisión en tiempo real de IVS.

Se aplican los costos estándar de almacenamiento y solicitudes de S3. Las miniaturas no generan cargos adicionales de IVS. Para obtener más información, consulte [Precios de Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Introducción
<a name="ind-part-rec-introduction"></a>

La grabación de participantes individuales permite a los clientes de IVS que transmiten en tiempo real grabar a los publicadores de fases de IVS de forma individual en buckets de S3. Cuando una fase permite la grabación de participantes individuales, el contenido del publicador se graba cuando este comienza a publicar en la fase.

**Nota:** Si necesita mezclar a todos los participantes de la fase en un solo video, la característica de grabación compuesta es la más adecuada. Consulte [Grabación](rt-recording.md) para ver un resumen de la grabación de contenido de transmisión en tiempo real de IVS.

![\[Grabación del contenido multimedia de cada publicador en un archivo independiente mediante la grabación de participantes individuales.\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Flujo de trabajo
<a name="ind-part-rec-workflow"></a>

![\[Flujo de trabajo para grabar el contenido multimedia de cada publicador en un archivo independiente mediante la grabación de participantes individuales.\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. Creación de S3 Bucket
<a name="ind-part-rec-create-s3-bucket"></a>

Necesitará un bucket de S3 para escribir VOD. Para obtener más información, consulte la documentación de S3 sobre [cómo crear buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). Tenga en cuenta que, para la grabación de participantes individuales, los buckets de S3 deben crearse en la misma región de AWS que la fase de IVS.

**Importante**: Si utiliza un bucket de S3 existente:
+ La configuración **Propiedad del objeto** debe ser **Aplicada al propietario del bucket** o **Propietario del bucket preferido**.
+ La opción de **Cifrado predeterminado** debe indicar **Cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3)**.

Para obtener más información, consulte la documentación de S3 sobre el [control de propiedad de los objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) y la [protección de datos mediante cifrado](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).

### 2. Creación de un objeto StorageConfiguration
<a name="ind-part-rec-create-storageconfig-object"></a>

Tras crear un bucket, llame a la API de transmisión en tiempo real de IVS para [crear un objeto StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html). Una vez que la configuración de almacenamiento se haya creado correctamente, IVS tendrá permiso para escribir en el bucket de S3 proporcionado. Puede reutilizar este objeto StorageConfiguration en varias fases.

### 3. Creación de una fase con tokens de participantes
<a name="ind-part-rec-create-stage-with-part-tokens"></a>

Ahora tiene que [crear una fase de IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html) con la grabación de participantes individuales habilitada (configurando el objeto AutoParticipantRecordingConfiguration), así como tokens de participantes para cada publicador.

La siguiente solicitud crea una fase con dos tokens de participantes y con la grabación de participantes individuales habilitada.

```
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. Unión a la fase como publicador activo
<a name="ind-part-rec-join-stage-as-active-pub"></a>

Distribuya los tokens de participantes entre los publicadores y haga que se unan a la fase y comiencen [a publicar en ella](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html).

Cuando se unan a la fase y comienzan a publicar en ella mediante uno de los [SDK de transmisión en tiempo real de IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html), el proceso de grabación de los participantes se inicia automáticamente y le envía un [evento de EventBridge](eventbridge.md) en el que se indica que la grabación ha comenzado. (El evento es Cambio en el estado de la grabación del participante de IVS: inicio de la grabación). Al mismo tiempo, el proceso de grabación de los participantes comienza a escribir los archivos de VOD y de metadatos en el bucket de S3 configurado. Nota: No se garantiza que los participantes conectados durante periodos extremadamente cortos (menos de 5 segundos) se graben.

Existen dos formas de obtener el prefijo de S3 para cada grabación:
+ Escuche el evento de 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"
     }
  }
  ```
+ Utilice la operación de la API [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html): la respuesta incluye el bucket de S3 y el prefijo del lugar donde se graba al participante. La solicitud es la siguiente:

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

  Y esta es la respuesta:

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

### 5. Reproducción del VOD
<a name="ind-part-rec-play-back-vod"></a>

Una vez finalizada la grabación, puede verla con el [reproductor de IVS](https://debug.ivsdemos.com/?p=ivs). Consulte [Playback of Recorded Content from Private Buckets](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback) para obtener instrucciones sobre cómo configurar las distribuciones de CloudFront para la reproducción de VOD.

## Grabación solo de audio
<a name="ind-part-rec-audio-only-recordings"></a>

Al configurar la grabación de un participante individual, puede elegir que solo se escriban segmentos de audio HLS en su bucket de S3. Para utilizar esta característica, elija `AUDIO_ONLY mediaType` al crear la fase:

```
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"
      }
   ]
}
```

## Grabación solo de miniaturas
<a name="ind-part-rec-recording-thumbnail-only"></a>

Al configurar la grabación de participantes individuales, puede optar por que solo las miniaturas se escriban en el bucket de S3. Para utilizar esta característica, esablezca `mediaType` en `NONE` al crear la fase. Esto garantiza que no se generen segmentos HLS; las miniaturas se seguirán creando y escribiendo en el bucket de 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"
      }
   ]
}
```

## Grabación de contenidos
<a name="ind-part-rec-recording-contents"></a>

Cuando la grabación de participantes individuales está activa, los segmentos de video HLS, los archivos de metadatos y las miniaturas comenzarán a escribirse en el bucket de S3 proporcionado al momento de crear la fase. Este contenido está disponible para posprocesamiento o reproducción como video bajo demanda.

Tenga en cuenta que, una vez finalizada la grabación, se envía un evento Cambio en el estado de la grabación del participante de IVS: fin de la grabación a través de EventBridge. Le recomendamos que reproduzca o procese transmisiones grabadas solo después de que se reciba este evento. Para obtener más detalles, vea [Uso de EventBridge con la transmisión en tiempo real de IVS](eventbridge.md).

A continuación, se muestra una estructura de directorios de ejemplo y el contenido de una grabación de una sesión en vivo de IVS:

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

La carpeta `events` contiene los archivos de metadatos correspondientes al evento de grabación. Los archivos de metadatos JSON se generan cuando la grabación se inicia, finaliza correctamente o termina con errores:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Una carpeta `events` contiene `recording-started.json` y `recording-ended.json` o `recording-failed.json`. Estos contienen metadatos relacionados con la sesión grabada y sus formatos de salida. Los detalles de JSON se dan a continuación.

La carpeta `media` contiene el contenido multimedia compatible. La subcarpeta `hls` contiene todos los archivos multimedia y de manifiesto generados durante la sesión de grabación y se puede reproducir con el reproductor de IVS. Si está configurado, las subcarpetas `thumbnails` y `latest_thumbnail` contienen archivos multimedia de miniaturas en formato JPEG generados durante la sesión de grabación.

## Combinación de grabaciones fragmentadas de participantes individuales
<a name="ind-part-rec-merge-frag"></a>

La propiedad `recordingReconnectWindowSeconds` de una configuración de grabación le permite especificar un periodo de tiempo (en segundos) durante el cual, si un publicador de fases se desconecta de una fase y, a continuación, se vuelve a conectar, IVS intenta grabar con el mismo prefijo de S3 que en la sesión anterior. En otras palabras, si un publicador se desconecta y, a continuación, se vuelve a conectar dentro del intervalo especificado, las múltiples grabaciones se consideran una sola grabación y se combinan.

Si la grabación de miniaturas está habilitada en el modo `SEQUENTIAL`, las miniaturas también se combinan en el mismo `recordingS3Prefix`. Cuando se combinan las grabaciones, el contador de miniaturas se reinicia a partir del valor de la miniatura anterior que se escribió para la grabación anterior.

**Eventos de cambio de estado de grabación de IVS en Amazon EventBridge:** eventos de finalización de la grabación y los archivos de metadatos JSON de grabación finalizada se retrasan al menos `recordingReconnectWindowSeconds`, ya que IVS espera para asegurarse de que no se inicie una nueva transmisión.

Para obtener instrucciones sobre cómo configurar la funcionalidad de fusión de transmisiones, consulte [Paso 2: crear una fase con grabación de participantes opcional](getting-started-create-stage.md) en *Introducción a transmisión en tiempo real de Amazon IVS*.

### Elegibilidad
<a name="ind-part-rec-merge-frag-eligibility"></a>

Para que varias grabaciones se combinen con el mismo prefijo de S3, se deben cumplir ciertas condiciones para todas las grabaciones:
+ El valor de la propiedad `recordingReconnectWindowSeconds` de AutoParticipantRecordingConfiguration para la fase se establece en un valor superior a 0.
+ El valor de `StorageConfigurationArn` utilizado para escribir los artefactos de VOD es el mismo para cada grabación.
+ La diferencia de tiempo en segundos entre el momento en que el participante abandona la fase y vuelve a entrar en ella es inferior o igual a `recordingReconnectWindowSeconds`.

Tenga en cuenta que el valor predeterminado de `recordingReconnectWindowSeconds` es 0, lo que desactiva la combinación.

## Sincronización de las grabaciones de varios participantes
<a name="ind-part-rec-sync-multiple"></a>

Las grabaciones de los participantes individuales incluyen etiquetas `EXT-X-PROGRAM-DATE-TIME` en las listas de reproducción HLS, que proporcionan marcas de tiempo UTC precisas con exactitud de milisegundos para sincronizar las grabaciones de varios participantes durante el posprocesamiento.

Cuando graba a varios participantes de manera individual y desea crear una composición sincronizada (como una vista lado a lado o imagen sobre imagen), puede usar estas marcas de tiempo para alinear las grabaciones con precisión, incluso si los participantes se unieron al escenario en momentos diferentes o experimentaron discontinuidades causadas potencialmente por interrupciones de red.

La lista de reproducción HLS de cada participante incluye etiquetas `EXT-X-PROGRAM-DATE-TIME` que marcan lo siguiente:
+ El inicio de la grabación (primer segmento).
+ Cualquier punto de discontinuidad durante la grabación, por ejemplo, cuando se reconstruye la secuencia.

Estas marcas de tiempo usan precisión de milisegundos y están sincronizadas entre todos los participantes mediante la misma referencia temporal.

### Ejemplo de lista de reproducción 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
```

Las etiquetas `EXT-X-PROGRAM-DATE-TIME` proporcionan la hora UTC exacta para el primer segmento y en cada punto de discontinuidad, lo que permite una sincronización precisa con las grabaciones de otros participantes.

### Flujo de sincronización
<a name="ind-part-rec-sync-multiple-workflow"></a>

Para sincronizar las grabaciones de varios participantes, extraiga las marcas de tiempo `EXT-X-PROGRAM-DATE-TIME` de la lista de reproducción HLS de cada participante y utilícelas para calcular los desfases temporales. Estos desfases pueden aplicarse luego durante la composición en la fase posterior al procesamiento mediante herramientas de procesamiento de video como FFmpeg. Cuando existen discontinuidades en las grabaciones, las marcas de tiempo en esos puntos proporcionan las referencias temporales necesarias para mantener una sincronización precisa a lo largo de toda la grabación.

Nota: Para obtener una salida sincronizada en tiempo real sin posprocesamiento, considere usar la composición del servidor en lugar de la grabación individual de participantes.

## Archivos de metadatos JSON
<a name="ind-part-rec-json-metadata-files"></a>

Estos metadatos están en formato JSON. Contiene la siguiente información: 


| Campo | Tipo | Obligatorio | Descripción | 
| --- | --- | --- | --- | 
| `stage_arn` | string | Sí | ARN de la fase que se utiliza como origen de la grabación. | 
| `session_id` | cadena | Sí | Cadena que representa el valor de `session_id` de la fase en la que se graba al participante. | 
| `participant_id` | cadena | Sí | Cadena que representa el identificador del participante grabado. | 
| `recording_started_at` | cadena | Condicional | Marca de hora UTC RFC 3339 cuando se inició la grabación. No está disponible cuando `recording_status` está`RECORDING_START_FAILED`. Consulte también la nota siguiente para obtener más información sobre `recording_ended_at`. | 
| `recording_ended_at` | cadena | Condicional | Marca de tiempo UTC RFC 3339 cuando finalizó la grabación. Esto solo está disponible cuando `recording_status` es `"RECORDING_ENDED"` o `"RECORDING_ENDED_WITH_FAILURE"`. **Nota:** `recording_started_at` y `recording_ended_at` son marcas de tiempo que indican cuando se generan estos eventos y es posible que no coincidan exactamente con las marcas de tiempo del segmento de video HLS. Para determinar con precisión la duración de una grabación, utilice la `duration_ms`. | 
| `recording_status` | cadena | Sí | El estado de la grabación. Valores válidos: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | cadena | Condicional | Información descriptiva sobre el estado. Esto solo está disponible cuando `recording_status` es `"RECORDING_ENDED"` o `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `media` | objeto | Sí | Objeto que contiene los objetos enumerados de contenido multimedia disponibles para esta grabación. Valor válido: `"hls"`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sí | Campo enumerado que describe la salida del formato HLS de Apple. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | integer | Condicional | Duración del contenido HLS grabado en milisegundos. Esto solo está disponible cuando `recording_status` es `"RECORDING_ENDED"` o `"RECORDING_ENDED_WITH_FAILURE"`. Si se produjo un error antes de realizar cualquier grabación, esto es 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Ruta relativa del prefijo S3 donde se almacena el contenido HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Nombre del archivo de lista de reproducción maestra HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sí | Matriz de representaciones (variantes HLS) de objetos de metadatos. Siempre hay al menos una copia. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Ruta relativa del prefijo S3 donde se almacena el contenido HLS para esta copia. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Nombre del archivo de lista de reproducción multimedia para esta copia. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Condicional | Campo enumerado que describe la salida de miniaturas. Esto está disponible solo cuando el campo `storage` de la configuración de miniaturas incluye `SEQUENTIAL`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | cadena | Sí | Ruta relativa desde el prefijo de S3 donde se almacena el contenido secuencial de miniaturas. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sí | Matriz de representaciones (variantes de miniaturas) de objetos de metadatos. Siempre hay al menos una copia. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Ruta relativa desde el prefijo de S3 donde se almacena el contenido de miniaturas para esta representación. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Condicional | Campo enumerado que describe la salida de miniaturas. Esto está disponible solo cuando el campo `storage` de la configuración de miniaturas incluye `LATEST`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | cadena | Sí | Ruta relativa del prefijo de S3 donde `latest_thumbnail` se almacena. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sí | Matriz de representaciones (variantes de miniaturas) de objetos de metadatos. Siempre hay al menos una copia. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sí | Ruta relativa desde el prefijo de S3 donde se almacena la miniatura más reciente para esta representación. | 
| `version` | cadena | Sí | La versión del esquema de metadatos. | 

### Ejemplo: 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"
            }
         ]
      }
   }
}
```

### Ejemplo: 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"
            }
         ]
      }
   }
}
```

### Ejemplo: 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"
            }
         ]
      }
   }
}
```

## Conversión de grabaciones a MP4
<a name="ind-part-rec-convert-rec-mp4"></a>

Las grabaciones de participantes individuales se almacenan en el formato HLS, que consta de listas de reproducción y segmentos MP4 fragmentados (fMP4). Para convertir una grabación HLS en un único archivo MP4, instale FFmpeg y ejecute el siguiente comando:

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