Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Registrazione automatica su Amazon S3 (streaming a bassa latenza)
Questa sezione fornisce informazioni sulla funzionalità auto-record-to -S3 dello 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 in Nozioni di base su Amazon IVS |
L'API |
IVS API Reference (Documentazione di riferimento delle API di IVS) |
Costi | Costi di Amazon IVS |
Prefisso S3
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 registrazione abilitata, il prefisso S3 viene generato all'inizio di una sessione live e verrà fornito all'inizio e alla fine di CloudWatch 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. -
<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
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.
Nota che dopo l'avvio di un live streaming e l'emissione dell' EventBridge evento Recording Start, occorre un po' di tempo prima che i file manifest e i segmenti video vengano scritti. Consigliamo di riprodurre o elaborare flussi registrati solo dopo l'invio dell'evento di fine registrazione. Consultare Usare Amazon EventBridge con IVS.
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 standardmaster.m3u8
e il manifesto abilitato per intervalli di bytebyte-range-multivariant.m3u8
. Pertanto, ogni cartella di rendering contiene sia un fileplaylist.m3u8
sia un filebyte-range-variant.m3u8
. Consulta la sezione sulle Playlist con intervalli di byte 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
La funzione auto-record-to -S3 supporta la generazione di playlist con intervallo di byte, oltre alle playlist
Anteprime
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 informazioni dettagliate, consultare l'Amazon IVS API Reference (Documentazione di riferimento delle API di Amazon IVS).
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
Merge Fragmented Streams (Unione flussi frammentati)
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 registrazione e i file di metadati JSON con termine di registrazione vengono ritardati almeno di, recordingReconnectWindowSeconds
poiché Amazon IVS attende per assicurarsi che non venga avviato un nuovo stream.
Per istruzioni sull'impostazione della funzionalità di unione dei flusso, consultare Fase 4: Creazione di un canale con registrazione facoltativa in Nozioni di base su Amazon IVS.
Idoneità
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. Ogni stream deve iniziare 10 o più secondi dopo lo stream precedente.
Problema noto
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
Quando si verifica un evento di modifica dello stato di registrazione, viene generata una CloudWatch metrica Amazon corrispondente e viene scritto un file di metadati all'interno del prefisso S3. (Consulta Monitoraggio dello streaming a bassa latenza di Amazon IVS.)
Questi metadati sono in formato JSON. Essi contengono le seguenti informazioni:
Campo | Tipo | Campo obbligatorio | Descrizione |
---|---|---|---|
|
stringa | Sì | L'ARN del canale che trasmette il live streaming. |
|
oggetto | Sì | L'oggetto che contiene gli oggetti enumerati del contenuto multimediale disponibile per la registrazione. Valori validi: |
|
oggetto | Sì | Il campo enumerato che descrive l'output in formato Apple HLS. |
|
intero | Condizionale | La durata del contenuto HLS registrato, in millisecondi. Questo valore è disponibile solo quando |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS. |
|
stringa | Sì |
Il nome del file della playlist principale HLS. |
|
string | Sì | Il nome della playlist multivariante con intervallo di byte HLS. |
|
oggetto | Sì | L'array di rendering (variante HLS) di oggetti di metadati. È presente sempre almeno un rendering. |
|
stringa | Sì | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto HLS per questo rendering. |
|
stringa | Sì | Il nome del file della playlist multimediale per questo rendering. |
|
string | Sì | Il nome della playlist con intervalli di byte per questo rendering. |
|
int | Condizionale | L'altezza della risoluzione in pixel del video codificato. Questa opzione è disponibile solo quando il rendering contiene una traccia video. |
|
int | Condizionale | La larghezza della risoluzione in pixel del video codificato. Questa opzione è disponibile solo quando il rendering contiene una traccia video. |
|
oggetto | Condizionale | Il campo enumerato che descrive l'output delle miniature. Questa opzione è disponibile solo quando la configurazione |
|
string | Condizionale | Il percorso relativo dal prefisso S3 in cui è memorizzato il contenuto delle miniature. Questa opzione è disponibile solo quando la configurazione |
|
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 |
|
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 |
|
oggetto | Sì | Il campo enumerato che descrive l'output dell'ultima miniatura. Questa opzione è disponibile solo quando |
|
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 |
|
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 |
|
string | Condizionale | Il timestamp UTC di RFC 3339 quando la registrazione termina. Questo valore è disponibile solo quando
|
|
string | Sì | Il timestamp UTC di RFC 3339 quando la registrazione inizia. Consultare la nota sopra per |
|
string | Sì | Lo stato della registrazione. Valori validi: |
|
string | Condizionale | Le informazioni descrittive sullo stato. Questo valore è disponibile solo quando |
|
string | Sì | La versione dello schema dei metadati. |
Esempio: recording_started.json
{ "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
{ "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
{ "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 } } }
Individuazione dei rendering di una registrazione
Quando trasmetti contenuti in streaming su un canale Amazon IVS, auto-record-to-s 3 utilizza il video sorgente per generare più rappresentazioni. Grazie all'ABR (Adaptive Bitrate Streaming), 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 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 con la massima resa disponibile per una registrazione, puoi iscriverti agli eventi «IVS Recording State Change». EventBridge Consultare Usare Amazon EventBridge con IVS. 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
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"). Puoi invece riprodurre questi file con Amazon CloudFront CDN (Content Delivery Network).
CloudFront Distribuzione Amazon
CloudFront Le distribuzioni possono essere configurate per fornire contenuti provenienti da bucket privati. In genere è preferibile disporre di bucket apertamente accessibili in cui le letture aggirano i controlli offerti da. CloudFront La distribuzione può essere configurata per il servizio da un bucket privato creando un Origin Access Control (OAC), ovvero un CloudFront utente speciale con autorizzazioni di lettura sul bucket di origine privato. Puoi creare l'OAC dopo aver creato la tua distribuzione, tramite la console o l'API. CloudFront Consulta Creazione di un nuovo controllo degli accessi all'origine.
Riproduzione da Amazon CloudFront
Dopo aver configurato la distribuzione utilizzando un OAC per accedere al tuo bucket privato, i tuoi file video dovrebbero essere disponibili per l'utilizzo tramite l'URL. CloudFront CloudFront L'URL è il nome del dominio di distribuzione nella scheda Dettagli della CloudFront console AWS. 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
Aggiungi la chiave dell'oggetto alla fine dell' CloudFront URL. 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 la riproduzione da un browser Web, assicurati di configurare CORS sia nel bucket S3 che nel bucket CloudFront S3. Per la CloudFront configurazione, seguite le istruzioni in Creazione delle politiche di richiesta di origine per allegare una politica di richiesta CORS-S3 Origin e una politica di intestazione di risposta SimpleCORS alla distribuzione. CloudFront Consulta la pagina della console di configurazione di esempio qui sotto:
Per la configurazione S3 CORS, consulta Configurazione CORS 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.