

# Registrazione automatica di IVS su Amazon S3 \| Streaming a bassa latenza
<a name="record-to-s3"></a>

In questa sezione vengono fornite informazioni sulla funzione Registrazione automatica su S3 disponibile nello streaming a bassa latenza di Amazon IVS. Esaminiamo l'archiviazione dati per i flussi Amazon IVS registrati. Spieghiamo i contenuti dell'archiviazione e lo schema dei file di metadati. Inoltre, illustriamo la riproduzione dei contenuti registrati.


| Per informazioni dettagliate su… | Consultare… | 
| --- | --- | 
| Impostazione e interruzione della registrazione video |  [Creazione di un canale con registrazione opzionale](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/getting-started-create-channel.html) in *Nozioni di base su Amazon IVS* | 
| L'API  | [IVS API Reference (Documentazione di riferimento delle API di IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html) | 
| Costi |  [Costi di Amazon IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyUserGuide/costs.html) | 

## Prefisso S3
<a name="r2s3-prefix"></a>

Il prefisso S3 è una struttura di directory univoca per ogni live streaming registrato. Tutti i file multimediali e metadati per il live streaming sono scritti all'interno di questa directory. Per i canali con la registrazione abilitata, il prefisso S3 viene generato all'avvio di una sessione live e verrà fornito nell'evento CloudWatch all'inizio e alla fine di una registrazione.

Il prefisso S3 ha il seguente formato:

```
/ivs/v1/<aws_account_id>/<channel_id>/<year>/<month>/<day>/<hours>/<minutes>/<recording_id>
```

Dove:
+ `aws_account_id` è l'ID dell'account AWS (generato alla creazione di un account AWS), da cui viene creato il canale.
+ `channel_id` è la parte dell'ID risorsa dell'ARN del canale (l'ultima parte dell'Amazon Resource Name). Consultare la sezione relativa agli ARN nella [Glossario](ivs-glossary.md).
+ `<year>/<month>/<day>/<hours>/<minutes>` è un timestamp UTC all'avvio della registrazione.
+ `recording_id` è un ID univoco generato per ogni sessione di registrazione.

Ad esempio:

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs
```

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

All'avvio della registrazione, i segmenti video e i file di metadati vengono scritti nel bucket S3 configurato per il canale. Questi contenuti sono disponibili per la post-elaborazione o la riproduzione come video on demand.

Tenere presente che dopo l'avvio di un live streaming e l'emissione dell'evento EventBridge di avvio registrazione, prima che vengano scritti i file manifest e i segmenti video è possibile che passi del tempo. Consigliamo di riprodurre o elaborare flussi registrati solo dopo l'invio dell'evento di fine registrazione. Consultare [Utilizzo di Amazon EventBridge con IVS](eventbridge.md).

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

```
ivs/v1/123456789012/AsXego4U6tnj/2020/6/23/20/12/j8Z9O91ndcVs/
   events
      recording-started.json
      recording-ended.json
   media
      hls
      thumbnails
```

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 tutti i contenuti multimediali supportati in due sottocartelle:
+ `hls` contiene tutti i file multimediali e i file manifest generati durante la sessione live ed è riproducibile con il lettore Amazon IVS. Esistono due tipi di manifesti HLS in questa cartella: il manifesto principale standard `master.m3u8` e il manifesto abilitato per intervalli di byte `byte-range-multivariant.m3u8`. Pertanto, ogni cartella di rendering contiene sia un file `playlist.m3u8` sia un file `byte-range-variant.m3u8`. Consulta la sezione sulle [Playlist con intervalli di byte](#r2s3-byte-range-playlists) di seguito.
+ `thumbnails` contiene immagini in miniatura generate durante la sessione live. Le miniature vengono generate e scritte nel bucket ogni minuto. (Per modificare questo comportamento, sovrascrivere la proprietà `thumbnailConfiguration` su una configurazione di registrazione.)

**Importante**: i contenuti all'interno della cartella `media` vengono generati dinamicamente e sono determinati dalle caratteristiche dei primi segmenti video ricevuti; il contenuto della cartella potrebbe non rappresentare le caratteristiche finali (ad esempio, la qualità del rendering). *Non fare ipotesi sul percorso statico.* Per scoprire i rendering HLS disponibili e il relativo percorso, utilizza i file di metadati JSON descritti di seguito.

## Playlist con intervalli di byte
<a name="r2s3-byte-range-playlists"></a>

La funzione di registrazione automatica su S3 supporta la generazione di [playlist con intervalli di byte](https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.2.2), oltre alle playlist HLS standard. Le playlist con intervalli di byte sono conformi alla versione 4 della specifica HLS. Ciò consente di ritagliare i contenuti in modo più granulare: in una playlist con intervalli di byte, ogni segmento di un file di indice di rendering fa riferimento a un sottointervallo di byte di un blocco video, fornendo una maggiore granularità rispetto alla dimensione standard di un file multimediale, pari a 10 secondi. Con una playlist con intervallo di byte, la durata del segmento è la stessa dell'intervallo di fotogrammi chiave configurato per lo streaming.

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

La proprietà `thumbnailConfiguration` in una configurazione di registrazione consente di abilitare o disabilitare la registrazione delle anteprime per una sessione live e modificare l'intervallo in cui vengono generate le anteprime per la sessione live. Gli intervalli delle miniature possono variare da 1 secondo a 60 secondi; per impostazione predefinita, la registrazione delle miniature è abilitata a un intervallo di 60 secondi. Per ulteriori informazioni, consulta la [Documentazione di riferimento delle API di Streaming a bassa latenza di Amazon IVS](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/Welcome.html).

La configurazione delle miniature può includere anche il campo `storage` (`SEQUENTIAL` e/o `LATEST`) e una risoluzione (`LOWEST_RESOLUTION`, `SD`, `HD` oppure `FULL_HD`). Di seguito sono elencate le risoluzioni per ciascuna opzione: 

160 <= `LOWEST_RESOLUTION` <= 360

360 < `SD` <= 480

480 < `HD` <= 720

720 < `FULL_HD` <= 1.080

Se `resolution` non è impostato per un flusso che utilizza un input video multitraccia, vengono registrate le anteprime di tutti i rendering. Per informazioni sul multitraccia, consulta la sezione [Video multitraccia](multitrack-video.md).

## Merge Fragmented Streams (Unione flussi frammentati)
<a name="r2s3-merge-fragmented-streams"></a>

La proprietà `recordingReconnectWindowSeconds` su una configurazione di registrazione consente di specificare un intervallo di tempo (in secondi) durante il quale, se il flusso si interrompe e se ne avvia un altro, Amazon IVS tenta di registrare con lo stesso prefisso S3 del flusso precedente. In altre parole, se una trasmissione si disconnette e riconnette entro l'intervallo specificato, i flussi multipli vengono considerati un'unica trasmissione e uniti.

**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 Amazon IVS attende per assicurarsi che non venga avviato un nuovo flusso.

Per istruzioni sull'impostazione della funzionalità di unione dei flusso, consultare [Fase 4: Creazione di un canale con registrazione facoltativa](getting-started-create-channel.md) in *Nozioni di base su Amazon IVS*.

### Idoneità
<a name="r2s3-merge-fragmented-streams-eligibility"></a>

Affinché più flussi siano registrati sullo stesso prefisso S3, devono essere soddisfatte alcune condizioni per tutti i flussi: 
+ La larghezza e l'altezza del video devono essere le stesse.
+ La frequenza dei fotogrammi deve essere la stessa.
+ La differenza di bitrate dei flussi successivi deve essere inferiore o uguale al 50% del bitrate del flusso originale.
+ I codec video e audio devono essere gli stessi.

**Note:**
+ È possibile unire al massimo 20 flussi, dopodiché viene creato un nuovo prefisso S3.
+ Dopo 48 ore viene creato un nuovo prefisso S3. Ad esempio, se la prima trasmissione dura 48 ore e un'altra trasmissione viene avviata entro l'intervallo dei `recordingReconnectWindowSeconds`, la trasmissione successiva *non* viene unita nel primo prefisso S3.
+ Le riconnessioni rapide possono far sì che una nuova trasmissione inizi prima che la trasmissione precedente abbia terminato la scrittura su S3. In questo caso la nuova trasmissione *non viene* unita al prefisso S3 precedente. (Di solito, la scrittura su S3 viene completata entro 10 secondi dalla fine della trasmissione.) Le riconnessioni rapide possono verificarsi in diversi scenari, tra cui: 1) transizioni rapide tra sfondo e primo piano delle app mobili, 2) quando l'acquisizione dello streaming non è possibile utilizzando la funzionalità di riconnessione automatica degli SDK di trasmissione mobile IVS e 3) quando la chiamata a [StopStream](https://docs.aws.amazon.com//ivs/latest/LowLatencyAPIReference/API_StopStream.html) attiva una riconnessione automatica dal software client di streaming.

### Problema noto
<a name="r2s3-merge-fragmented-streams-known-issue"></a>

Se `recordingReconnectWindowSeconds` è abilitato e si utilizza l'SDK di trasmissione Web, la registrazione con lo stesso prefisso S3 potrebbe non funzionare, poiché l'SDK di trasmissione Web modifica dinamicamente bitrate e qualità.

## File di metadati JSON
<a name="r2s3-json-metadata"></a>

Quando si verifica un evento di modifica dello stato di registrazione, viene generato un parametro Amazon CloudWatch corrispondente e un file di metadati viene scritto all'interno del prefisso S3. (Consulta [Monitoraggio dello streaming a bassa latenza di Amazon IVS](stream-health.md).)

Questi metadati sono in formato JSON. Essi contengono le seguenti informazioni:


| Campo | Tipo | Campo obbligatorio | Descrizione | 
| --- | --- | --- | --- | 
| `channel_arn` | stringa | Sì | L'ARN del canale che trasmette il live streaming. | 
| `media` | oggetto | Sì | L'oggetto che contiene gli oggetti enumerati del contenuto multimediale disponibile per la registrazione. Valori validi: `"hls"`, `"thumbnails"`. | 
| [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | stringa | Sì | Il nome della playlist multivariante con intervallo di byte HLS. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | stringa | Sì | Il nome della playlist con intervalli di byte per questo rendering. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.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/LowLatencyUserGuide/record-to-s3.html)  | oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando la configurazione `recordingMode` della anteprima è `INTERVAL`. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | stringa | Condizionale | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto delle miniature. Questa opzione è disponibile solo quando la configurazione `recordingMode` della anteprima è `INTERVAL`. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Sì | L'altezza della miniatura. Impostazione predefinita: risoluzione del rendering dell'origine. Questo valore è influenzato dall'input dell'utente nella relativa configurazione di registrazione; in particolare, il valore `thumbnailConfiguration.resolution `. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Sì | La larghezza della miniatura. Impostazione predefinita: risoluzione del rendering dell'origine. Questo valore è influenzato dall'input dell'utente nella relativa configurazione di registrazione; in particolare, il valore `thumbnailConfiguration.resolution`. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | oggetto | Sì | Il campo enumerato che descrive l'output dell'ultima miniatura. Questa opzione è disponibile solo quando `storage` della configurazione della miniatura include `LATEST`. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Sì | L'altezza della miniatura. L'impostazione predefinita sarà la risoluzione del rendering dell'origine. Questo valore è influenzato dall'input dell'utente nella relativa configurazione di registrazione; in particolare, il valore `thumbnailConfiguration.resolution`. | 
|  [See the AWS documentation website for more details](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/record-to-s3.html)  | int | Sì | La larghezza della miniatura. L'impostazione predefinita sarà la risoluzione del rendering dell'origine. Questo valore è influenzato dall'input dell'utente nella relativa configurazione di registrazione; in particolare, il valore `thumbnailConfiguration.resolution`. | 
| `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"`.<br />`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 | Sì | Il timestamp UTC di RFC 3339 quando la registrazione inizia.<br />Consultare la nota sopra per `recording_ended_at`. | 
| `recording_status` | stringa | Sì | Lo stato della registrazione. Valori validi: `"RECORDING_STARTED"`, `"RECORDING_ENDED"`, `"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="r2s3-json-metadata-recording-started"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status : "RECORDING_STARTED",
   "media": {
      "hls": {
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Esempio: recording\_ended.json
<a name="r2s3-json-metadata-recording-ended"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "byte_range_playlist": "byte-range-multivariant.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "360p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 360,
               "resolution_width": 640
            },
            {
               "path": "160p30",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 160,
               "resolution_width": 284
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "byte_range_playlist": "byte-range-variant.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

### Esempio: recording\_failed.json
<a name="r2s3-json-metadata-recording-failed"></a>

```
{
   "version": "v1",
   "channel_arn": "arn:aws:ivs:us-west-2:123456789012:channel/AsXego4U6tnj",
   "recording_ended_at": "2020-06-14T12:53:20Z",
   "recording_started_at": "2020-06-12T12:53:26Z",
   "recording_status": "RECORDING_ENDED_WITH_FAILURE",
   "recording_status_message": "InternalServerException",
   "media": {
      "hls": {
         "duration_ms": 172794489,
         "path": "media/hls",
         "playlist": "master.m3u8",
         "renditions": [
            {
               "path": "480p30",
               "playlist": "playlist.m3u8",
               "resolution_height": 480,
               "resolution_width": 852
            },
            {
               "path": "720p60",
               "playlist": "playlist.m3u8",
               "resolution_height": 720,
               "resolution_width": 1280
            }
         ]
      },
      "thumbnails": {
         "path": "media/thumbnails",
         "resolution_height": 480,
         "resolution_width": 852
      },
      "latest_thumbnail": {
         "path": "media/latest_thumbnail/thumb.jpg",
         "resolution_height": 480,
         "resolution_width": 852
      }
   }
}
```

## Individuazione dei rendering di una registrazione
<a name="r2s3-recording-renditions"></a>

Quando si esegue lo streaming di contenuti su un canale Amazon IVS, la registrazione automatica su S3 utilizza il video sorgente per generare più rendering. Grazie all'[ABR (Adaptive Bitrate Streaming)](player.md), il lettore Amazon IVS cambia automaticamente il rendering (bitrate) in base alle necessità in modo da ottimizzare la riproduzione per le condizioni di rete variabili.

Ogni rendering generato durante il live streaming viene registrato in un percorso univoco all'interno del prefisso di registrazione S3. I dettagli della risoluzione, il percorso e i nomi dei file delle playlist vengono memorizzati in un [file di metadati JSON](#r2s3-json-metadata) durante l'inizio e l'arresto della registrazione. Se il valore `renditionSelection` della configurazione di registrazione è `ALL`, tutti i rendering vengono selezionati per la registrazione. Se `renditionSelection` è `CUSTOM`, l'utente deve selezionare una o più delle seguenti opzioni: `LOWEST_RESOLUTION`, `SD`, `HD` e FULL\_HD. Di seguito sono elencate le risoluzioni per ciascuna opzione:

160 <= `LOWEST_RESOLUTION` <= 360

360 < `SD` <= 480

480 < `HD` <= 720

720 < `FULL_HD` <= 1.080

**Importante:** *non* fare alcuna ipotesi sul percorso del rendering statico o sull'elenco di rendering generati, poiché questi sono soggetti a modifiche. *Non* assumere che un rendering specifico sarà sempre disponibile per una registrazione Amazon IVS. Per determinare i rendering, le risoluzioni e i percorsi disponibili, fare riferimento ai file di metadati.

Il file `event/recording_started.json` o `event/recording_ended.json` all'interno del prefisso di registrazione contiene i percorsi e i nomi dei file multimediali nel prefisso di registrazione. Tutti gli elementi `path` sono relativi al percorso precedente nella gerarchia. Gli elementi in `media > hls` descrivono le risorse HLS, con il nome della playlist principale e il percorso definiti a questo livello.

Di seguito è riportato un frammento di codice Python che mostra come generare un percorso per la playlist principale utilizzando il prefisso di registrazione S3 e il file di metadati:

```
def get_master_playlist(metadata_json, s3_recording_prefix):
   return s3_recording_prefix + '/' + metadata_json['media']['hls']['path'] + '/' + metadata_json['media']['hls']['playlist']
```

Gli elementi in `media > hls > renditions` descrivono l'elenco di rendering registrati. Le proprietà `resolution_height` e `resolution_width` possono essere utilizzate per identificare la risoluzione video. Gli elementi `path` e `playlist` possono essere utilizzati per derivare il percorso della playlist di rendering. Usare questi campi per determinare quale rendering utilizzare per qualsiasi post-elaborazione.

Per scoprire la playlist di rendering più alta disponibile per una registrazione, è possibile registrarsi agli eventi EventBridge "Modifica dello stato di registrazione IVS". Consultare [Utilizzo di Amazon EventBridge con IVS](eventbridge.md). Di seguito è riportato uno script Python di esempio che illustra l'utilizzo di una funzione lambda registrata a tali eventi.

```
import json
import boto3
s3 = boto3.resource('s3')

def get_highest_rendition_playlist(bucket_name, prefix_name):
   object_path = "{}/events/recording-started.json".format(prefix_name)
   object = s3.Object(bucket_name, object_path)
   body = str(object.get()['Body'].read().decode('utf-8'))
   metadata = json.loads(body)
   media_path = metadata["media"]["hls"]["path"]
   renditions = metadata["media"]["hls"]["renditions"]

   highest_rendition = None
   highest_rendition_size = 0

   for rendition in renditions:
       current_rendition_size = rendition["resolution_height"]
       if (current_rendition_size > highest_rendition_size):
           highest_rendition_size = current_rendition_size
           highest_rendition = rendition

   highest_rendition_playlist = media_path + '/' + highest_rendition['path'] + '/' + highest_rendition['playlist']
   return highest_rendition_playlist


def lambda_handler(event, context):
   prefix_name = event["detail"]["recording_s3_key_prefix"]
   bucket_name = event["detail"]["recording_s3_bucket_name"]
   rendition_playlist = get_highest_rendition_playlist(bucket_name, prefix_name)
   print("Highest rendition playlist: {}/{}".format(prefix_name, rendition_playlist))

   return {
       'statusCode': 200,
       'body': rendition_playlist
   }
```

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

Gli oggetti registrati con la funzione di registrazione automatica su Amazon S3 sono privati per impostazione predefinita; pertanto, questi oggetti sono inaccessibili per la riproduzione utilizzando direttamente l'URL S3. Aprendo il manifesto principale HLS (file m3u8) per la riproduzione utilizzando il lettore Amazon IVS o un altro lettore, si riceverà 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).

### Distribuzione tramite Amazon CloudFront
<a name="r2s3-cdn-oai"></a>

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 degli accessi all'origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html#create-oac-overview-s3).

### Riproduzione da Amazon CloudFront
<a name="r2s3-cdn-playback"></a>

Dopo aver configurato la distribuzione utilizzando un OAC per accedere al bucket privato, i file video dovrebbero essere disponibili per l'utilizzo tramite l'URL di CloudFront. L'URL di CloudFront è **Nome del dominio della distribuzione** nella scheda **Dettagli** della console AWS CloudFront. Dovrebbe essere simile a quanto segue:

a1b23cdef4ghij.cloudfront.net.

Per riprodurre in streaming il video registrato attraverso la distribuzione, trovare la chiave oggetto per il file `master.m3u8`. Dovrebbe essere simile a quanto segue:

```
ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

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

```
https://a1b23cdef4ghij.cloudfront.net/ivs/v1/012345678912/a0bCDeFGH1IjK/2021/4/20/12/03/aBcdEFghIjkL/media/hls/master.m3u8
```

Per riprodurre da un browser Web, assicurati di configurare CORS sia in CloudFront che nel bucket S3. Per la configurazione di CloudFront, segui le istruzioni riportate in [Creazione di policy di richiesta origine](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/controlling-origin-requests.html#origin-request-create-origin-request-policy) per allegare una policy di richiesta origine **CORS-S3** e una policy di intestazione della risposta **SimpleCORS** alla distribuzione CloudFront. Consulta la pagina della console di configurazione di esempio qui sotto:

![Esempio di pagina della console di configurazione. Si consiglia di utilizzare una policy di cache e una policy di richiesta di origine per controllare la chiave di cache e le richieste di origine.](http://docs.aws.amazon.com/it_it/ivs/latest/LowLatencyUserGuide/images/CORS_Configuration.png)


Per la configurazione S3 CORS, consulta [Configurazione CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html) per creare regole appropriate per il bucket S3.

Ora è possibile riprodurre il video registrato come se venisse riprodotto direttamente da un bucket.

Per ulteriori informazioni, consulta [Limitazione dell'accesso a un'origine Amazon S3](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html).