

# Gravação individual de participante do IVS \$1 Streaming em tempo real
Gravação individual de participante

Este documento explica como usar a gravação de participantes individuais com o streaming em tempo real do IVS.

Sujeito a custos de armazenamento padrão e solicitação do S3. As miniaturas não incorrem em cobranças adicionais do IVS. Para obter mais detalhes, consulte [Preços do Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Introdução


A gravação individual de participante permite que os clientes de streaming em tempo real do IVS gravem os publicadores de palco do IVS individualmente em buckets do S3. Quando a gravação individual de participante está habilitada para um palco, o conteúdo do publicador é gravado assim que ele começa a publicar no palco.

**Observação:** se você precisar juntar todos os participantes do palco em um único vídeo, o recurso de gravação composta é o mais adequado. Consulte [Gravação](rt-recording.md) para obter um resumo da gravação de conteúdo de streaming em tempo real do IVS.

![\[Gravação da mídia de cada publicador em um arquivo separado usando a gravação de cada participante.\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Fluxo de trabalho


![\[Fluxo de trabalho da gravação da mídia de cada publicador em um arquivo separado usando a gravação de cada participante.\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. Crie um bucket do S3


Você precisará de um bucket do S3 para gravar VODs. Para obter detalhes, consulte a documentação do S3 sobre [como criar buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). Observe que, para a gravação individual de participante, os buckets do S3 devem ser criados na mesma região da AWS do palco do IVS.

**Importante**: se você usa um bucket do S3 existente:
+ A configuração de **Propriedade do objeto** deve ser **Imposta pelo proprietário do bucket** ou **Preferencial do proprietário do bucket**.
+ A configuração de **Criptografia padrão** deve ser **Criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3)**.

Para obter mais detalhes, consulte a documentação do S3 sobre como [controlar a propriedade de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) e [proteger dados com criptografia](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).

### 2. Criar um objeto StorageConfiguration


Depois de criar um bucket, chame a API de streaming em tempo real do IVS para [criar um objeto StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html). Depois que a configuração de armazenamento for criada com êxito, o IVS terá permissão para gravar no bucket fornecido do S3. Você pode reutilizar esse objeto StorageConfiguration em vários palcos.

### 3. Criar um palco com tokens de participantes


Agora você precisa [criar um palco do IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html) com a gravação individual de participante habilitada (definindo o objeto AutoParticipantRecordingConfiguration), bem como tokens de participantes para cada publicador.

A solicitação abaixo cria um palco com dois tokens de participantes e a gravação individual de participante 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. Entrar no palco como publicador ativo


Distribua os tokens de participantes para os publicadores e faça com que eles entrem no palco e comecem a [publicar nele](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html).

Quando eles entram no palco e começam a publicar nele usando um dos [SDKs de transmissão de streaming em tempo real do IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html), o processo de gravação do participante é iniciado automaticamente e envia para você um [evento do EventBridge](eventbridge.md) indicando que a gravação começou. (O evento é Alteração do estado da gravação do participante do IVS - Início da gravação.) Ao mesmo tempo, o processo de gravação do participante começa a gravar os arquivos VOD e de metadados no bucket configurado do S3. Observação: não é garantido que os participantes conectados por períodos extremamente curtos (menos de 5s) sejam gravados.

Há duas maneiras de obter o prefixo do S3 para cada gravação:
+ Receber o evento do 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"
     }
  }
  ```
+ Usar a operação da API [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html): a resposta inclui o prefixo e o bucket do S3 de onde um participante está sendo gravado. A solicitação é:

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

  E esta é a resposta:

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

### 5. Reproduzir o VOD


Depois que a gravação for finalizada, você poderá assisti-la usando o [reprodutor do IVS](https://debug.ivsdemos.com/?p=ivs). Consulte [Reprodução de conteúdo gravado de buckets privados](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback) para obter instruções sobre como configurar distribuições do CloudFront para reprodução de VOD.

## Gravação somente de áudio


Ao configurar a gravação individual de participante, você pode optar por ter somente segmentos de áudio HLS gravados no bucket do S3. Para usar esse recurso, escolha `AUDIO_ONLY mediaType` ao criar o palco:

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

## Gravação somente de miniaturas


Ao configurar a gravação individual de participante, você pode optar por ter apenas miniaturas gravadas no seu bucket do S3. Para usar esse atributo, defina `mediaType` como `NONE` ao criar o estágio. Isso garante que nenhum segmento HLS seja gerado; as miniaturas ainda são criadas e gravadas no seu bucket do 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"
      }
   ]
}
```

## Conteúdo do registro


Quando a gravação individual de participante estiver ativa, segmentos de vídeo HLS, arquivos de metadados e miniaturas começarão a ser gravados no bucket do S3 fornecido quando o estágio foi criado. Esse conteúdo está disponível para pós-processamento ou reprodução como vídeo sob demanda.

Observe que depois que uma gravação é finalizada, um evento Alteração do estado da gravação do participante do IVS - Início da gravação é enviado pelo EventBridge. Recomendamos que você reproduza ou processe streams gravados somente após o evento ter sido recebido. Para mais detalhes, consulte [Usar o EventBridge com o streaming em tempo real do IVS](eventbridge.md)

Veja a seguir um exemplo de estrutura de diretório e conteúdo de uma gravação de uma sessão do IVS ao vivo:

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

A pasta `events` contém os arquivos de metadados correspondentes ao evento de gravação. Os arquivos de metadados JSON são gerados quando a gravação é iniciada, termina com êxito ou termina com falhas:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Uma determinada pasta de `events` vai conter `recording-started.json` e `recording-ended.json` ou `recording-failed.json`. Elas contêm metadados relacionados à sessão gravada e seus formatos de saída. Os detalhes de JSON são fornecidos abaixo.

A pasta `media` contém o conteúdo de mídia compatível. A subpasta `hls` contém todos os arquivos de mídia e manifesto gerados durante a sessão de gravação e pode ser reproduzida com o reprodutor do IVS. Se configuradas, as subpastas `thumbnails` e `latest_thumbnail` contêm arquivos de mídia em miniatura JPEG gerados durante a sessão de gravação.

## Mesclar gravações fragmentadas de participantes individuais


A propriedade `recordingReconnectWindowSeconds` em uma configuração de gravação permite especificar uma janela de tempo (em segundos) durante a qual o IVS tentará gravar no mesmo prefixo do S3 da sessão anterior se o publicador do palco se desconectar e então se reconectar ao palco. Em outras palavras, se um publicador se desconectar e depois se reconectar dentro do intervalo especificado, as várias gravações serão consideradas uma única gravação e mescladas juntas.

Se a gravação de miniaturas estiver habilitada no modo `SEQUENTIAL`, as miniaturas também serão mescladas sob o mesmo `recordingS3Prefix`. Quando as gravações são mescladas, o contador de miniaturas é reiniciado com base no valor da miniatura anterior que foi gravado para a gravação anterior.

**Eventos de mudança de estado de gravação do IVS no Amazon EventBridge:** os eventos Recording End e os arquivos de metadados JSON recording-ended são atrasados em pelo menos `recordingReconnectWindowSeconds`, pois o IVS espera para garantir que um novo fluxo não seja iniciado.

Para obter instruções sobre como configurar a funcionalidade de mesclagem de fluxos, consulte [Etapa 2: criar um palco com gravação opcional de participantes](getting-started-create-stage.md) em *Conceitos básicos do streaming em tempo real do Amazon IVS*.

### Elegibilidade


Para mesclar várias gravações usando o mesmo prefixo do S3, é necessário atender a algumas condições para todas as gravações:
+ O valor da propriedade `recordingReconnectWindowSeconds` de AutoParticipantRecordingConfiguration para o palco estar definido como maior que 0.
+ O `StorageConfigurationArn` usado para gravar os artefatos de VOD ser o mesmo para cada gravação.
+ A diferença de tempo em segundos entre o momento em que o participante sai e volta ao palco ser menor ou igual a `recordingReconnectWindowSeconds`.

Observe que o valor padrão de `recordingReconnectWindowSeconds` é 0, o que desativa a mesclagem.

## Sincronizar várias gravações de participantes


As gravações individuais dos participantes incluem tags `EXT-X-PROGRAM-DATE-TIME` nas listaS de reprodução HLS, que fornecem carimbos de data e hora UTC precisos, com precisão de milissegundos, para sincronizar gravações de vários participantes durante o pós-processamento.

Quando você grava vários participantes individualmente e deseja criar uma composição sincronizada (como um layout lado a lado ou picture-in-picture), pode usar esses carimbos de data e hora para alinhar as gravações com precisão, mesmo que os participantes tenham entrado no palco em momentos diferentes ou tenham passado por descontinuidades potencialmente causadas por interrupções de rede.

A lista de reprodução HLS de cada participante inclui tags `EXT-X-PROGRAM-DATE-TIME` que indicam:
+ O início da gravação (primeiro segmento).
+ Quaisquer pontos de descontinuidade durante a gravação; por exemplo, quando ocorre a junção de trechos.

Esses carimbos de data e hora usam precisão de milissegundos e são sincronizados entre todos os participantes usando a mesma referência de tempo.

### Exemplo de lista de reprodução HLS


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

As tags `EXT-X-PROGRAM-DATE-TIME` fornecem o horário UTC exato do primeiro segmento e de cada ponto de descontinuidade, permitindo a sincronização precisa com as gravações dos demais participantes.

### Fluxo de trabalho de sincronização


Para sincronizar gravações de vários participantes, extraia os carimbos de data e hora `EXT-X-PROGRAM-DATE-TIME` das tags de cada playlist HLS e use-os para calcular os deslocamentos de tempo. Esses deslocamentos podem, então, ser aplicados durante a composição no pós-processamento usando ferramentas de processamento de vídeo como o FFmpeg. Quando houver descontinuidades nas gravações, os carimbos de data e hora nesses pontos fornecem as referências de tempo necessárias para manter a sincronização precisa ao longo de toda a gravação.

Observação: para uma saída sincronizada em tempo real, sem pós-processamento, considere usar composição do servidor em vez da gravação individual de participantes.

## Arquivos de metadados de JSON


Os metadados estão em formato JSON. Eles contêm as seguintes informações: 


| Campo | Tipo | Obrigatório | Descrição | 
| --- | --- | --- | --- | 
| `stage_arn` | string | Sim | ARN do palco que está sendo usado como a origem da gravação. | 
| `session_id` | string | Sim | String representando o `session_id` do palco em que o participante é gravado. | 
| `participant_id` | string | Sim | String representando o identificador do participante gravado. | 
| `recording_started_at` | string | Condicional | Timestamp RFC 3339 UTC de quando a gravação foi iniciada. Isso não estará disponível quando `recording_status` for `RECORDING_START_FAILED`. Além disso, veja a observação abaixo para `recording_ended_at`. | 
| `recording_ended_at` | string | Condicional | Timestamp RFC 3339 UTC em que a gravação terminou. Isso só está disponível quando `recording_status` é `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. **Observação:** `recording_started_at` e `recording_ended_at` são carimbos de data e hora quando esses eventos são gerados e podem não corresponder exatamente aos carimbos de data e hora do segmento de vídeo HLS. Para determinar com precisão a duração de uma gravação, use o campo `duration_ms`. | 
| `recording_status` | string | Sim | O status da gravação. Valores válidos: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | string | Condicional | Informações descritivas sobre o status. Isso só está disponível quando `recording_status` é `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `media` | objeto | Sim | Objeto que contém os objetos enumerados de conteúdo de mídia disponível para essa gravação. Valor válido: `"hls"`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sim | Campo enumerado que descreve a saída do formato HLS da Apple. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | inteiro | Condicional | Duração do conteúdo de HLS gravado em milissegundos. Isso só está disponível quando `recording_status` é `"RECORDING_ENDED"` ou `"RECORDING_ENDED_WITH_FAILURE"`. Se ocorreu uma falha antes de qualquer gravação ter sido feita, é 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo S3 onde o conteúdo de HLS é armazenado. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Nome do arquivo da lista de reprodução principal de HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sim | Matriz de execuções (variantes de HLS) de objetos de metadados. Há sempre pelo menos uma representação. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo S3 em que o conteúdo de HLS é armazenado para essa versão. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Nome do arquivo da lista de reprodução de mídia para esta versão. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Condicional | Campo enumerado que descreve a saída de miniaturas. Isso está disponível somente quando o campo `storage` de configuração da miniatura incluir `SEQUENTIAL`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo do S3 onde o conteúdo da miniatura sequencial é armazenado. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sim | Matriz de versões (variantes de miniaturas) de objetos de metadados. Há sempre pelo menos uma representação. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo S3 onde o conteúdo da miniatura é armazenado para esta versão. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Condicional | Campo enumerado que descreve a saída de miniaturas. Isso está disponível somente quando o campo `storage` de configuração da miniatura incluir `LATEST`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo do S3 onde `latest_thumbnail` é armazenado. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | objeto | Sim | Matriz de versões (variantes de miniaturas) de objetos de metadados. Há sempre pelo menos uma representação. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | string | Sim | Caminho relativo do prefixo S3 onde a miniatura mais recente é armazenada para esta versão. | 
| `version` | string | Sim | A versão do esquema de metadados. | 

### Exemplo: recording-started.json


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

### Exemplo: recording-ended.json


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

### Exemplo: recording-failed.json


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

## Converter gravações em MP4


As gravações de participantes individuais são armazenadas no formato HLS, que consiste em listas de reprodução e segmentos MP4 fragmentados (fMP4). Para converter uma gravação HLS em um único arquivo MP4, instale o FFmpeg e execute o seguinte comando:

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