

# Registrazione in IVS I Streaming in tempo reale
<a name="rt-recording"></a>

Esistono due opzioni di registrazione per lo streaming in tempo reale IVS:
+ Con la registrazione di singoli partecipanti, i contenuti multimediali di ciascun publisher vengono registrati in file separati.
+ Al contrario, la registrazione composita combina i contenuti multimediali di tutti i publisher in un'unica visualizzazione e li registra in un unico file.

La registrazione di singoli partecipanti non comporta costi aggiuntivi di Amazon IVS, mentre la registrazione composita comporta costi per la tariffa oraria del video codificato. Entrambe le opzioni di registrazione sono soggette ai costi di archiviazione e di richiesta standard di S3. Per ulteriori dettagli, consulta la pagina [Prezzi di Amazon IVS](https://aws.amazon.com/ivs/pricing/).

Per una soluzione più personalizzabile, prendi in considerazione l'utilizzo del progetto open source [IVSStageSaver](https://github.com/aws-samples/amazon-ivs-stage-recorder) come base per il tuo servizio di registrazione ospitato autonomamente.

## Registrazione di singoli partecipanti
<a name="ind-par-rec"></a>

Questa opzione è ideale per gli streaming in diretta con un singolo publisher o quando sono necessarie registrazioni separate per ogni publisher, soprattutto a fini di moderazione. Per maggiori dettagli, consulta la sezione [Registrazione di singoli partecipanti](rt-individual-participant-recording.md).

![\[Registrazione dei contenuti multimediali di ciascun publisher in un file separato utilizzando la registrazione dei singoli partecipanti.\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Registrazione composita
<a name="comp-rec"></a>

Questa opzione combina i contenuti multimediali di più publisher in un'unica visualizzazione e li registra in un unico file; è la soluzione ideale per un'esperienza di video on demand. Per ulteriori dettagli, consulta la sezione [Registrazione composita](rt-composite-recording.md).

![\[Registrazione di una fase su un bucket S3 utilizzando la composizione lato server.\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/images/Composite_Recording.png)


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

La registrazione delle miniature per lo streaming in tempo reale IVS può essere impostata sia per le registrazioni dei singoli partecipanti che per le registrazioni composite (con più partecipanti). Per abilitare o disabilitare la registrazione delle miniature e regolare l'intervallo di generazione delle miniature:
+ Per le registrazioni dei singoli partecipanti, utilizza la proprietà `thumbnailConfiguration`.
+ Per le registrazioni composite, utilizza la proprietà `thumbnailConfigurations`.

Gli intervalli delle miniature possono variare da 1 a 86400 secondi (24 ore); per impostazione predefinita la registrazione delle miniature è disabilitata. Consulta la [Documentazione di riferimento delle API di Streaming in tempo reale di Amazon IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/Welcome.html).

Una configurazione della miniatura include un campo `storage`, che può essere impostato su `SEQUENTIAL` e/o `LATEST`. Il campo `storage` determina il comportamento di archiviazione S3 per le miniature:
+ `SEQUENTIAL` salva tutte le anteprime in modo seriale. Questa è l’impostazione predefinita.
+ `LATEST` salva solo la miniatura più recente, sovrascrivendo quella precedente.

Se si specificano entrambi `SEQUENTIAL` e `LATEST`, le miniature vengono scritte su due percorsi S3 separati, uno per l'archivio sequenziale e uno per l'ultima miniatura.

# Registrazione di singoli partecipanti in IVS \$1 Streaming in tempo reale
<a name="rt-individual-participant-recording"></a>

Questo documento spiega come utilizzare la registrazione dei singoli partecipanti con lo streaming IVS in tempo reale.

Si applicano i costi standard di archiviazione e richiesta di Amazon S3. Le miniature non comportano costi IVS aggiuntivi. Per ulteriori dettagli, consulta la pagina [Prezzi di Amazon IVS](https://aws.amazon.com/ivs/pricing/).

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

La registrazione di singoli partecipanti consente ai clienti che utilizzano lo streaming in tempo reale di registrare singolarmente i publisher di fase IVS in bucket S3. Quando la registrazione dei singoli partecipanti è abilitata per una fase, una volta che i publisher iniziano a pubblicare sulla fase i rispettivi contenuti vengono registrati.

**Nota:** se è necessario che tutti i partecipanti alla fase vengano mixati in un unico video, la soluzione migliore è la funzionalità di registrazione composita. Consulta la sezione [Registrazione](rt-recording.md) per un riepilogo della registrazione di contenuti in streaming in tempo reale in IVS.

![\[Registrazione dei contenuti multimediali di ciascun publisher in un file separato utilizzando la registrazione dei singoli partecipanti.\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/images/Individual_Participant_Recording.png)


## Flusso di lavoro
<a name="ind-part-rec-workflow"></a>

![\[Flusso di lavoro di registrazione dei contenuti multimediali di ciascun publisher in un file separato utilizzando la registrazione dei singoli partecipanti.\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/images/Workflow_Participant_Recording.png)


### 1. Creare un bucket S3
<a name="ind-part-rec-create-s3-bucket"></a>

Per la scrittura dei VOD occorre un bucket S3. Per i dettagli, consulta la documentazione di S3 su [come creare un bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html). Occorre tenere presente che per la registrazione dei singoli partecipanti i bucket S3 devono essere creati nella stessa regione AWS della fase IVS.

**Importante**: se utilizzi un bucket S3 esistente:
+ L'impostazione **Proprietà dell'oggetto** deve essere **Proprietario del bucket applicato** o **Proprietario del bucket preferito**.
+ In **Crittografia predefinita**, scegli **Crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3)**.

Per i dettagli, consulta la documentazione di S3 sul [controllo della proprietà degli oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html) e [protezione dei dati con la crittografia](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html).

### 2. Creazione di un oggetto StorageConfiguration
<a name="ind-part-rec-create-storageconfig-object"></a>

Dopo aver creato un bucket, chiama l'API di streaming in tempo reale IVS per creare un oggetto [StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html). Una volta creata correttamente la configurazione di archiviazione, IVS disporrà dell'autorizzazione a scrivere nel bucket S3 fornito. È possibile riutilizzare questo oggetto StorageConfiguration in più fasi.

### 3. Creazione di una fase con i token dei partecipanti
<a name="ind-part-rec-create-stage-with-part-tokens"></a>

Ora è necessario [creare una fase IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStage.html) con la registrazione dei singoli partecipanti abilitata (impostando l'oggetto AutoParticipantRecordingConfiguration), oltre ai token dei partecipanti per ogni publisher.

La richiesta seguente crea una fase con due token dei partecipanti e la registrazione dei singoli partecipanti abilitata.

```
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. Aggiunta alla fase come publisher attivo
<a name="ind-part-rec-join-stage-as-active-pub"></a>

Distribuisci i token dei partecipanti ai publisher e invitali ad aggiungersi alla fase e iniziare a [pubblicare su di essa](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/getting-started-pub-sub.html).

Quando si aggiungono alla fase e iniziano a pubblicare su di essa utilizzando uno degli [SDK di trasmissione in streaming in tempo reale IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/broadcast.html), il processo di registrazione dei partecipanti si avvia automaticamente e ti invia un [evento EventBridge](eventbridge.md) che segnala l'inizio della registrazione. L'evento è Modifica dello stato di registrazione dei partecipanti IVS - Avvio della registrazione. Contemporaneamente, il processo di registrazione dei partecipanti inizia a scrivere i file VOD e di metadati nel bucket S3 configurato. Nota: non è garantita la registrazione dei partecipanti collegati per periodi estremamente brevi (meno di 5 secondi).

Esistono due modi per ottenere il prefisso S3 per ogni registrazione:
+ Ascoltare l'evento 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"
     }
  }
  ```
+ Usa l'operazione dell'API [GetParticipant](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_GetParticipant.html): la risposta include il bucket S3 e il prefisso in cui è in corso la registrazione di un partecipante. Ecco la richiesta:

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

  Ed ecco la risposta:

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

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

Una volta completata la registrazione, è possibile guardarla utilizzando il [lettore IVS](https://debug.ivsdemos.com/?p=ivs). Consulta la sezione [Riproduzione di contenuti registrati da bucket privati](https://docs.aws.amazon.com//ivs/latest/RealTimeUserGuide/rt-composite-recording.html#comp-rec-playback) per istruzioni sulla configurazione delle distribuzioni CloudFront per la riproduzione del VOD.

## Registrazione solo audio
<a name="ind-part-rec-audio-only-recordings"></a>

Quando si configura la registrazione dei singoli partecipanti, è possibile scegliere di scrivere nel bucket S3 soltanto i segmenti audio HLS. Per utilizzare questa funzione, scegli `AUDIO_ONLY mediaType` quando crei 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"
      }
   ]
}
```

## Registrazione solo miniatura
<a name="ind-part-rec-recording-thumbnail-only"></a>

Quando si configura la registrazione dei singoli partecipanti, è possibile scegliere di scrivere nel bucket S3 soltanto le miniature. Per utilizzare questa funzionalità, imposta `mediaType` a `NONE` quando crei la fase. Ciò garantisce che non vengano generati segmenti HLS; le miniature vengono comunque create e scritte nel bucket 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"
      }
   ]
}
```

## Contenuto della registrazione
<a name="ind-part-rec-recording-contents"></a>

Quando la registrazione dei singoli partecipanti è attiva, i segmenti video, i file di metadati e le miniature HLS verranno scritti nel bucket S3 indicato durante la creazione della fase. Questo contenuto è disponibile per la post-elaborazione o la riproduzione come video on demand.

Si noti che dopo il completamento di una registrazione, tramite EventBridge viene inviato un evento Modifica dello stato di registrazione dei partecipanti IVS - Fine della registrazione. Consigliamo di riprodurre o elaborare i flussi registrati solo dopo l'invio dell'evento di fine della registrazione. Per maggiori dettagli, consulta [Utilizzo di EventBridge con lo streaming in tempo reale IVS](eventbridge.md).

Di seguito è riportato un esempio di contenuti e della struttura di directory di una registrazione di una sessione IVS live:

```
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 cartella `events` contiene i file di metadati corrispondenti all'evento di registrazione. I file di metadati JSON vengono generati quando la registrazione inizia, termina correttamente o termina con errori:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Una determinata cartella `events` contiene `recording-started.json` e `recording-ended.json` o `recording-failed.json`. Questi contengono metadati relativi alla sessione registrata e ai relativi formati di output. I dettagli JSON sono riportati di seguito.

La cartella `media` contiene i contenuti multimediali supportati. La sottocartella `hls` contiene tutti i file multimediali e i file manifesto generati durante la sessione di registrazione ed è riproducibile con il lettore IVS. Se configurate, le sottocartelle `thumbnails` e `latest_thumbnail` contengono file multimediali in miniatura JPEG generati durante la sessione di composizione.

## Unire le registrazioni frammentate dei singoli partecipanti
<a name="ind-part-rec-merge-frag"></a>

La proprietà `recordingReconnectWindowSeconds` su una configurazione di registrazione consente di specificare un intervallo di tempo (in secondi) durante il quale, se un publisher di fase si disconnette da una fase e poi si riconnette, IVS tenta di registrare con lo stesso prefisso S3 della sessione precedente. In altre parole, se un publisher si disconnette e riconnette entro l'intervallo specificato, le registrazioni multiple vengono considerate un'unica registrazione e unite insieme.

Se la registrazione delle anteprime è abilitata in modalità `SEQUENTIAL`, anche le anteprime vengono unite nello stesso `recordingS3Prefix`. Quando le registrazioni vengono unite, il contatore delle anteprime riparte dal valore di anteprima precedente scritto per la registrazione precedente.

**Eventi di modifica dello stato di registrazione IVS in Amazon EventBridge:** gli eventi di fine della registrazione e i file di metadati JSON di registrazione terminata sono ritardati di almeno `recordingReconnectWindowSeconds`, mentre IVS attende per assicurarsi che non venga avviato un nuovo flusso.

Per istruzioni sulla configurazione della funzionalità di unione dei flussi, consultare [Passaggio 2: Creazione di una fase con registrazione opzionale dei partecipanti](getting-started-create-stage.md) in *Nozioni di base su Streaming in tempo reale di Amazon IVS*.

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

Affinché più registrazione siano unite usando lo stesso prefisso S3, devono essere soddisfatte alcune condizioni per tutte le registrazioni:
+ Il valore della proprietà `recordingReconnectWindowSeconds` di AutoParticipantRecordingConfiguration per la fase è impostato su un valore maggiore di 0.
+ Il `StorageConfigurationArn` usato per scrivere gli artefatti VOD è lo stesso per ogni registrazione.
+ La differenza di tempo, in secondi, tra il momento in cui il partecipante esce e quello in cui torna alla fase è inferiore o uguale a `recordingReconnectWindowSeconds`.

Il valore predefinito di `recordingReconnectWindowSeconds` è 0, che disabilita l'unione.

## Sincronizzare le registrazioni di più partecipanti
<a name="ind-part-rec-sync-multiple"></a>

Le registrazioni dei singoli partecipanti includono i tag `EXT-X-PROGRAM-DATE-TIME` nelle playlist HLS, che forniscono timestamp UTC precisi con una precisione di millisecondi per sincronizzare le registrazioni di più partecipanti durante la post-elaborazione.

Quando si registrano singolarmente più partecipanti e si desidera creare una composizione sincronizzata (ad esempio un layout affiancato o picture-in-picture), è possibile utilizzare questi timestamp per allineare le registrazioni con precisione, anche se i partecipanti sono saliti sul palco in momenti diversi o hanno subito discontinuità potenzialmente causate da interruzioni di rete.

La playlist HLS di ogni partecipante include i tag `EXT-X-PROGRAM-DATE-TIME` che contrassegnano:
+ L'inizio della registrazione (primo segmento).
+ Eventuali punti di discontinuità durante la registrazione, ad esempio quando si verifica lo stitching.

Questi timestamp utilizzano una precisione al millisecondo e sono sincronizzati tra tutti i partecipanti utilizzando lo stesso riferimento temporale.

### Playlist HLS di esempio
<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
```

I tag `EXT-X-PROGRAM-DATE-TIME` forniscono l'ora UTC esatta per il primo segmento e su ogni punto di discontinuità, consentendo una sincronizzazione precisa con le registrazioni degli altri partecipanti.

### Flusso di lavoro di sincronizzazione
<a name="ind-part-rec-sync-multiple-workflow"></a>

Per sincronizzare le registrazioni di più partecipanti, estrai i timestamp `EXT-X-PROGRAM-DATE-TIME` dalla playlist HLS di ogni partecipante e usali per calcolare gli offset temporali. Questi offset possono quindi essere applicati durante la composizione post-elaborazione utilizzando strumenti di elaborazione video come FFmpeg. Quando sono presenti discontinuità nelle registrazioni, i timestamp in quei punti forniscono i riferimenti temporali necessari per mantenere una sincronizzazione accurata durante l'intera registrazione.

Nota: per un output sincronizzato in tempo reale senza post-elaborazione, prendi in considerazione l'utilizzo della composizione lato server anziché la registrazione dei singoli partecipanti.

## File di metadati JSON
<a name="ind-part-rec-json-metadata-files"></a>

Questi metadati sono in formato JSON. Tale controllo contiene le seguenti informazioni: 


| Campo | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
| `stage_arn` | stringa | Sì | ARN della fase utilizzata come origine della registrazione. | 
| `session_id` | stringa | Sì | Stringa che rappresenta il valore `session_id` della fase in cui viene registrato il partecipante. | 
| `participant_id` | stringa | Sì | Stringa che rappresenta l'identificatore del partecipante registrato. | 
| `recording_started_at` | stringa | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione inizia. Questo non è disponibile quando `recording_status` è `RECORDING_START_FAILED`. Inoltre, si veda la nota seguente per `recording_ended_at`. | 
| `recording_ended_at` | stringa | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione termina. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. **Nota:** `recording_started_at` e `recording_ended_at` sono timestamp del momento in cui questi eventi vengono generati e potrebbero non corrispondere esattamente ai timestamp del segmento video HLS. Per determinare con precisione la durata di una registrazione, utilizzare il campo `duration_ms`. | 
| `recording_status` | stringa | Sì | Lo stato della registrazione. Valori validi: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | stringa | Condizionale | Le informazioni descrittive sullo stato. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `media` | oggetto | Sì | L'oggetto che contiene gli oggetti enumerati del contenuto multimediale disponibile per la registrazione. Valore valido: `"hls"`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Sì | Il campo enumerato che descrive l'output in formato Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | intero | Condizionale | La durata del contenuto HLS registrato, in millisecondi. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. Se prima di una registrazione si è verificato un errore, allora sarà uguale a 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il nome del file della playlist principale HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Sì | L'array di rendering (variante HLS) degli oggetti di metadati. È presente sempre almeno un rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS per questo rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il nome del file della playlist multimediale per questo rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo `storage` della configurazione della miniatura include `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto delle miniature sequenziale. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Sì | L'array di rendering (variante miniatura) degli oggetti di metadati. È presente sempre almeno un rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto della miniatura per questo rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo `storage` della configurazione della miniatura include `LATEST` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato `latest_thumbnail`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | oggetto | Sì | L'array di rendering (variante miniatura) degli oggetti di metadati. È presente sempre almeno un rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-individual-participant-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzata l’ultima miniatura per questo rendering. | 
| `version` | stringa | Sì | La versione dello schema dei metadati. | 

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

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

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

## Conversione delle registrazioni in MP4
<a name="ind-part-rec-convert-rec-mp4"></a>

Le registrazioni dei singoli partecipanti vengono archiviate in formato HLS, costituito da playlist e segmenti MP4 frammentati (fMP4). Per convertire una registrazione HLS in un singolo file MP4, installare FFmpeg ed eseguire il seguente comando:

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

# Registrazione composita in IVS I Streaming in tempo reale
<a name="rt-composite-recording"></a>

Questo documento spiega come utilizzare la funzionalità di registrazione composita all'interno della [composizione lato server](server-side-composition.md). La registrazione composita consente di generare registrazioni HLS di una fase IVS combinando efficacemente tutti i publisher della fase in un'unica visualizzazione utilizzando un server IVS e quindi salvando il video risultante in un bucket S3.

Si applicano i costi standard di archiviazione e richiesta di Amazon S3. Le miniature non comportano costi IVS aggiuntivi. Per ulteriori dettagli, consulta la pagina [Prezzi di Amazon IVS](https://aws.amazon.com/ivs/pricing/).

## Prerequisiti
<a name="comp-rec-prerequisites"></a>

Per utilizzare la registrazione composita, è necessario disporre di una fase con publisher attivi e di un bucket S3 da utilizzare come destinazione di registrazione. Di seguito, descriviamo un possibile flusso di lavoro che utilizza gli eventi EventBridge per registrare una composizione in un bucket S3. In alternativa, puoi avviare e interrompere le composizioni in base alla logica della tua applicazione.

1. Crea [una fase IVS](getting-started-create-stage.md) e dei token per i partecipanti per ogni publisher.

1. Crea un [EncoderConfiguration](https://docs.aws.amazon.com/ivs/latest/RealTimeAPIReference/API_CreateEncoderConfiguration.html) (un oggetto che rappresenta come deve essere renderizzato il video registrato).

1. Crea un [bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) e una [StorageConfiguration](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_CreateStorageConfiguration.html) (dove verranno archiviati i contenuti della registrazione).

   **Importante**: se si utilizza un bucket S3 esistente, l'impostazione **Proprietà dell'oggetto** deve essere **Proprietario del bucket applicato** o **Proprietario del bucket preferito**. Per i dettagli, consulta la documentazione di S3 sul [controllo della proprietà degli oggetti](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html).

1. [Unisciti alla fase e pubblica su di essa](getting-started-pub-sub.md).

1. Quando ricevi un [ evento EventBridge](eventbridge.md) Partecipante pubblicato, chiama [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html) con un oggetto S3 DestinationConfiguration come destinazione

1. Dopo alcuni secondi, dovresti essere in grado di vedere i segmenti HLS mantenuti nei tuoi bucket S3.

![\[Registrazione di una fase su un bucket S3 utilizzando la composizione lato server.\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/images/Composite_Recording_Workflow.png)


**Nota**: una composizione si spegne automaticamente dopo 60 secondi di inattività dei publisher che partecipano alla fase. A quel punto, la composizione viene terminata e passa a uno stato `STOPPED`. Una composizione viene eliminata automaticamente dopo alcuni minuti nello stato `STOPPED`. Per i dettagli, consulta [Ciclo di vita della composizione](ssc-overview.md#ssc-composition-endpoint) in *Composizione lato server*.

## Esempio di registrazione composita: StartComposition con una destinazione di bucket S3
<a name="comp-rec-example"></a>

L'esempio seguente mostra una chiamata tipica all'operazione [StartComposition](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_StartComposition.html), che specifica S3 come unica destinazione per la composizione. Una volta che la composizione passa a uno stato `ACTIVE`, i segmenti video e i metadati inizieranno a essere scritti nel bucket S3 specificato dall'oggetto `storageConfiguration`. Per creare composizioni con layout diversi, consulta "Layout" in [Composizione lato server](ssc-overview.md#ssc-api-layouts) e la [Documentazione di riferimento delle API dello streaming in tempo reale IVS](https://docs.aws.amazon.com//ivs/latest/RealTimeAPIReference/API_LayoutConfiguration.html).

### Richiesta
<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"
}
```

### Risposta
<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": {}
    }
}
```

Il campo `recordingPrefix`, presente nella risposta di StartComposition, può essere utilizzato per determinare dove verranno archiviati i contenuti della registrazione. 

## Contenuto della registrazione
<a name="comp-rec-contents"></a>

Quando la composizione passa a uno stato `ACTIVE`, i segmenti video, i file di metadati e le miniature (se configurate) HLS verranno scritti nel bucket S3 fornito durante la chiamata StartComposition. Questo contenuto è disponibile per la post-elaborazione o la riproduzione come video on demand.

Tieni presente che dopo che una composizione diventa attiva, viene emesso un evento "Cambia stato della composizione IVS" ed è possibile che passi del tempo prima che i file manifesto, i segmenti video e le anteprime vengano scritti. Consigliamo di riprodurre o elaborare flussi registrati solo dopo che è stato ricevuto l'evento "Modifica dello stato di composizione dell'IVS (Fine sessione)". Per maggiori dettagli, consulta [Utilizzo di EventBridge con lo streaming in tempo reale IVS](eventbridge.md).

Di seguito è riportato un esempio di contenuti e della struttura di directory di una registrazione di una sessione IVS live:

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

La cartella `events` contiene i file di metadati corrispondenti all'evento di registrazione. I file di metadati JSON vengono generati quando la registrazione inizia, termina correttamente o termina con errori:
+ `events/recording-started.json`
+ `events/recording-ended.json`
+ `events/recording-failed.json`

Una determinata cartella `events` conterrà `recording-started.json` e `recording-ended.json` o `recording-failed.json`.

Questi contengono metadati relativi alla sessione registrata e ai relativi formati di output. I dettagli JSON sono riportati di seguito.

La cartella `media` contiene i contenuti multimediali supportati. La sottocartella `hls` contiene tutti i file multimediali e i file manifesto generati durante la sessione della composizione ed è riproducibile con il lettore IVS. Il manifesto HLS si trova nella cartella `multivariant.m3u8`. Se configurate, le sottocartelle `thumbnails` e `latest_thumbnail` contengono file multimediali in miniatura JPEG generati durante la sessione di composizione.

## Policy del bucket per StorageConfiguration
<a name="comp-rec-bucket-policy"></a>

Quando viene creato un oggetto StorageConfiguration, IVS avrà accesso alla scrittura di contenuti nel bucket S3 specificato. Questo accesso viene concesso apportando modifiche alla policy del bucket S3. *Se la policy per il bucket viene modificata in modo da rimuovere l'accesso di IVS, le registrazioni in corso e quelle nuove avranno esito negativo.*

L'esempio seguente mostra una policy di bucket S3 che consente a IVS di scrivere nel bucket 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"
                }
            }
        }
    ]
}
```

------

## File di metadati JSON
<a name="comp-rec-json"></a>

Questi metadati sono in formato JSON. Tale controllo contiene le seguenti informazioni: 


| Campo | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
| `stage_arn` | stringa | Sì | ARN della fase utilizzato come origine della composizione. | 
| `media` | oggetto | Sì | L'oggetto che contiene gli oggetti enumerati del contenuto multimediale disponibile per la registrazione. Valori validi: `"hls"`.  | 
| [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html) | oggetto | Sì | Il campo enumerato che descrive l'output in formato Apple HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | intero | Condizionale | La durata del contenuto HLS registrato, in millisecondi. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. Se prima di una registrazione si è verificato un errore, allora sarà uguale a 0. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì |  Il nome del file della playlist principale HLS.  | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | oggetto | Sì | L'array di rendering (variante HLS) di oggetti di metadati. È presente sempre almeno un rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS per questo rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il nome del file della playlist multimediale per questo rendering. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Condizionale | L'altezza della risoluzione in pixel del video codificato. Questa opzione è disponibile solo quando il rendering contiene una traccia video. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Condizionale | La larghezza della risoluzione in pixel del video codificato. Questa opzione è disponibile solo quando il rendering contiene una traccia video. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo `storage` della configurazione della miniatura include `SEQUENTIAL` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto delle miniature sequenziale. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | oggetto | Sì | L'array di risoluzioni (variante miniatura) degli oggetti di metadati. È presente sempre almeno una risoluzione. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto della miniatura per questa risoluzione. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Sì | Altezza in pixel della risoluzione delle miniature. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Sì | Larghezza in pixel della risoluzione delle miniature. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando il campo `storage` della configurazione della miniatura include `LATEST` | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato `latest_thumbnail`. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | oggetto | Sì | L'array di risoluzioni (variante miniatura) degli oggetti di metadati. È presente sempre almeno una risoluzione. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzata l’ultima miniatura per questa risoluzione. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Sì | Altezza in pixel della risoluzione dell'ultima miniatura. | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/ivs/latest/RealTimeUserGuide/rt-composite-recording.html)  | int | Sì | Larghezza in pixel della risoluzione dell'ultima miniatura. | 
| `recording_ended_at` | stringa | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione termina. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. `recording_started_at` e `recording_ended_at` sono timestamp quando questi eventi vengono generati e potrebbero non corrispondere esattamente ai timestamp del segmento video HLS. Per determinare con precisione la durata di una registrazione, utilizzare il campo `duration_ms`.  | 
| `recording_started_at` | stringa | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione inizia. Questo non è disponibile quando `recording_status` è `RECORDING_START_FAILED`. Consultare la nota sopra per `recording_ended_at`.  | 
| `recording_status` | stringa | Sì | Lo stato della registrazione. Valori validi: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"RECORDING_START_FAILED"`, `"RECORDING_ENDED_WITH_FAILURE"`. | 
| `recording_status_message` | stringa | Condizionale | Le informazioni descrittive sullo stato. Questo valore è disponibile solo quando `recording_status` è `"RECORDING_ENDED"` o`"RECORDING_ENDED_WITH_FAILURE"`. | 
| `version` | stringa | Sì | La versione dello schema dei metadati. | 

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

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

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

## Riproduzione di contenuti registrati da bucket privati
<a name="comp-rec-playback"></a>

Per impostazione predefinita, il contenuto registrato è privato, pertanto questi oggetti sono inaccessibili per la riproduzione direttamente tramite l'URL S3. Se provi ad aprire la playlist multivariata HLS (file m3u8) per la riproduzione utilizzando il lettore IVS o un altro lettore, riceverai un errore (ad esempio, "Non disponi dell'autorizzazione per accedere alla risorsa richiesta"). Pertanto, è possibile riprodurre questi file con Amazon CloudFront CDN (Content Delivery Network).

Le distribuzioni CloudFront possono essere configurate in modo da distribuire i contenuti da bucket privati. Generalmente, è preferibile disporre di bucket accessibili in modo aperto in cui le letture ignorano i controlli offerti da CloudFront. La tua distribuzione può essere configurata in modo da funzionare da un bucket privato creando un controllo degli accessi all'origine (OAC), ovvero un utente CloudFront speciale che dispone delle autorizzazioni di lettura sul bucket di origine privato. Puoi creare l'OAC dopo aver creato la distribuzione tramite la console CloudFront o l'API. Consulta [Creazione di un nuovo controllo di accesso di origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#create-oac-overview-s3) nella *Guida per gli sviluppatori di Amazon CloudFront*.

### Configurazione della riproduzione tramite CloudFront con CORS abilitato
<a name="comp-rec-playback-setup"></a>

Questo esempio illustra come uno sviluppatore può configurare una distribuzione CloudFront con CORS abilitato, consentendo la riproduzione delle proprie registrazioni da qualsiasi dominio. Ciò è particolarmente utile durante la fase di sviluppo, ma è possibile modificare l'esempio seguente per adattarlo alle proprie esigenze di produzione.

#### Fase 1: creazione di un bucket S3
<a name="comp-rec-playback-setup-step1"></a>

Crea un bucket S3 che verrà utilizzato per archiviare le registrazioni. Tieni presente che il bucket dovrà trovarsi nella stessa Regione utilizzata per il flusso di lavoro IVS.

Aggiungi una policy CORS di autorizzazione al bucket:

1. Nella console AWS, passa alla scheda **Autorizzazioni del bucket S3**.

1. Copia la policy CORS riportata di seguito e incollala in **Cross-Origin Resource Sharing (CORS**). Ciò consentirà l'accesso CORS al bucket S3.

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

#### Passaggio 2: Creare una distribuzione CloudFront
<a name="comp-rec-playback-setup-step2"></a>

Consulta [Creazione di una distribuzione CloudFront](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html) nella *Guida per gli sviluppatori di CloudFront*.

Dalla console AWS, immetti le seguenti informazioni aziendali:


| Per questo campo… | Scegli questo... | 
| --- | --- | 
| Dominio origine | Il bucket S3 creato nella fase precedente | 
| Accesso all'origine | Impostazioni di controllo dell'accesso all'origine (consigliato), utilizzando parametri predefiniti | 
| Comportamento predefinito della cache: policy del protocollo per i visualizzatori | Reindirizza HTTP a HTTPS | 
| Comportamento predefinito della cache: Metodi HTTP consentiti | GET, HEAD e OPTIONS | 
| Comportamento predefinito della cache: chiavi di cache e richieste di origine | Policy CachingDisabled | 
| Comportamento predefinito della cache: policy di richiesta dell'origine | CORS-S3Origin | 
| Comportamento predefinito della cache: policy delle intestazioni di risposta | SimpleCORS | 
| Web Application Firewall | Abilitazione delle protezioni di sicurezza | 

Quindi salva la distribuzione CloudFront.

#### Fase 3: Configurazione della policy del bucket S3
<a name="comp-rec-playback-setup-step3"></a>

1. Elimina qualsiasi configurazione di archiviazione che hai configurato per il bucket S3. Ciò rimuoverà tutte le policy del bucket che sono state aggiunte automaticamente durante la creazione della policy per quel bucket.

1. Passa alla distribuzione CloudFront, assicurati che tutti i campi della distribuzione si trovino negli stati definiti nel passaggio precedente e **copia la policy del bucket** (usa il pulsante **Copia**). 

1. Passa al bucket S3. Nella scheda **Autorizzazioni**, seleziona **Modifica la policy del bucket** e incolla la policy del bucket copiata nel passaggio precedente. Dopo questo passaggio, la policy del bucket dovrebbe avere esclusivamente la policy di CloudFront. 

1. Crea un StorageConfiguration, specificando il bucket S3.

Dopo aver creato StorageConfiguration, nella policy del bucket S3 verranno visualizzati due elementi, uno che consente a CloudFront di leggere i contenuti e l'altro che consente a IVS di scrivere contenuti. Un esempio di policy del bucket finale, con accesso a CloudFront e IVS, è riportato in [Esempio: Policy del bucket S3 con accesso a CloudFront e IVS](#comp-rec-playback-example).

#### Fase 4: Riproduzione delle registrazioni
<a name="comp-rec-playback-setup-step4"></a>

Dopo aver configurato correttamente la distribuzione CloudFront e aggiornato la policy del bucket, dovresti essere in grado di riprodurre le registrazioni utilizzando il lettore IVS:

1. Avvia correttamente una composizione e assicurati di avere una registrazione memorizzata nel bucket S3.

1. Dopo aver seguito i passaggi da 1 a 3 in questo esempio, i file video dovrebbero essere disponibili per l'utilizzo tramite l'URL di CloudFront. L'URL di CloudFront è presente in **Nome del dominio della distribuzione** nella scheda **Dettagli** della console Amazon CloudFront. Dovrebbe essere simile a quanto segue: 

   `a1b23cdef4ghij.cloudfront.net`

1. Per riprodurre il video registrato tramite la distribuzione CloudFront, individua la chiave oggetto per il file `multivariant.m3u8` nel bucket s3. Dovrebbe essere simile a quanto segue:

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

1. Aggiungere la chiave oggetto alla fine dell'URL di CloudFront. Il proprio URL finale sarà simile a quanto segue:

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

1. Ora puoi aggiungere l'URL finale all'attributo di origine di un lettore IVS per guardare la registrazione completa. Per guardare il video registrato, puoi utilizzare la demo in [Guida introduttiva](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/web-getting-started.html) nell'*SDK del lettore IVS: Guida per il Web*.

### Esempio: Policy del bucket S3 con accesso a CloudFront e IVS
<a name="comp-rec-playback-example"></a>

Il frammento di codice riportato di seguito illustra una policy del bucket S3 che consente a CloudFront di leggere i contenuti nel bucket privato e a IVS di scrivere contenuti nel bucket. **Nota: non copiare e incollare il frammento di codice riportato di seguito nel tuo bucket. La policy deve contenere gli ID pertinenti alla distribuzione CloudFront e a StorageConfiguration.**

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

------

## Risoluzione dei problemi
<a name="comp-rec-troubleshooting"></a>
+ **La composizione non viene scritta nel bucket S3:** assicurati che il bucket S3 e gli oggetti StorageConfiguration siano stati creati e si trovino nella stessa regione. Assicurati inoltre che IVS abbia accesso al bucket controllando la tua policy del bucket; consulta [Policy del bucket per StorageConfiguration](#comp-rec-bucket-policy).
+ **Non riesco a trovare una composizione quando eseguo *ListCompositions*:** le composizioni sono risorse temporanee. Una volta passate allo stato finale, vengono eliminate automaticamente dopo alcuni minuti.
+ **La mia composizione si interrompe automaticamente:** una composizione si interrompe automaticamente se non c'è nessun publisher nella fase per più di 60 secondi.

## Problema noto
<a name="comp-rec-issues"></a>

La playlist multimediale scritta mediante registrazione composita ha il tag `#EXT-X-PLAYLIST-TYPE:EVENT` mentre la composizione è in corso. Al termine della composizione, il tag viene aggiornato a `#EXT-X-PLAYLIST-TYPE:VOD`. Per un'esperienza di riproduzione fluida, ti consigliamo di utilizzare questa playlist solo dopo che la composizione è stata completata con successo.