

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