View a markdown version of this page

Riproduzione video con HLS - Amazon Kinesis Video Streams

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

Riproduzione video con HLS

HTTP Live Streaming (HLS) è un protocollo di comunicazione per lo streaming HTTP-based multimediale standard del settore. È possibile utilizzare HLS per visualizzare uno streaming video Kinesis, per la riproduzione dal vivo o per visualizzare i video archiviati.

È possibile usare HLS per la riproduzione in tempo reale. La latenza è in genere compresa tra 3 e 5 secondi, ma può essere compresa tra 1 e 10 secondi, a seconda del caso d'uso, del lettore e delle condizioni della rete. Puoi utilizzare un player di terze parti (ad esempio Google Shaka Player) per visualizzare lo streaming video fornendo l'URL della sessione di streaming HLS, programmaticamente Video.js o manualmente. Puoi anche riprodurre il video inserendo l'URL della sessione di streaming HLS nella barra degli indirizzi dei browser Apple Safari o Microsoft Edge. https://www.microsoft.com/en-us/edge

Per visualizzare uno streaming video Kinesis utilizzando HLS, create innanzitutto una sessione di streaming utilizzando. GetHLSStreamingSessionURL Questa operazione restituisce un URL (contenente un token di sessione) per l'accesso alla sessione HLS. Puoi quindi usare l'URL in un lettore multimediale o in un'applicazione autonoma per visualizzare il flusso.

Importante

Non tutti i file multimediali inviati a Kinesis Video Streams possono essere riprodotti tramite HLS. Consulta i GetHLSStreamingSessionURL requisiti di caricamento specifici.

Usa il AWS CLI per recuperare l'URL di una sessione di streaming HLS

La procedura seguente illustra come utilizzare l'URL di una sessione AWS CLI di streaming HLS per uno streaming video Kinesis.

Per le istruzioni di installazione, consulta la Guida per l'utente. AWS Command Line Interface Dopo l'installazione, configura le AWS CLI credenziali e l'area geografica.

In alternativa, apri il AWS CloudShell terminale, che ha AWS CLI installato e configurato. Per ulteriori informazioni, consultare la Guida per l'AWS CloudShell utente.

Recupera l'endpoint URL HLS per il tuo streaming video Kinesis.
  1. Digitate quanto segue nel terminale:

    aws kinesisvideo get-data-endpoint \ --api-name GET_HLS_STREAMING_SESSION_URL \ --stream-name YourStreamName

    Riceverai una risposta simile alla seguente:

    { "DataEndpoint": "https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com" }
  2. Effettua la richiesta dell'URL della sessione di streaming HLS all'endpoint restituito.

    Live

    Per la riproduzione dal vivo, la playlist multimediale HLS viene continuamente aggiornata con i contenuti multimediali più recenti non appena disponibili. Quando si riproduce questo tipo di sessione in un lettore multimediale, l'interfaccia utente in genere visualizza una notifica "live", senza alcun controllo di scorrimento per scegliere la posizione nella finestra di riproduzione da visualizzare.

    Assicurati di caricare contenuti multimediali su questo stream quando esegui questo comando.

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode LIVE
    Live replay

    Per la riproduzione dal vivo, la riproduzione inizia da un orario di inizio specificato. La playlist multimediale HLS viene inoltre continuamente aggiornata con i contenuti multimediali più recenti non appena disponibili. La sessione continuerà a includere i file multimediali appena inseriti fino alla scadenza della sessione o fino all'ora di fine specificata, a seconda dell'evento che si verifica per primo. Questa modalità è utile per poter avviare la riproduzione dal momento in cui viene rilevato un evento e continuare lo streaming live di contenuti multimediali che non sono ancora stati inseriti al momento della creazione della sessione.

    Determina un timestamp di inizio.

    Per questo esempio, utilizziamo il formato Unix Epoch time in secondi. Fai riferimento alla sezione Timestamp nella Guida per l' AWS Command Line Interface utente per ulteriori informazioni sulla formattazione dei timestamp.

    Vedi per UnixTime.org uno strumento di conversione.

    • 1708471800 è uguale al 20 febbraio 2024 15:30:00 GMT-08:00

    In questo esempio, non specifichiamo un timestamp di fine, il che significa che la sessione continuerà a includere i contenuti multimediali appena inseriti fino alla scadenza della sessione.

    Richiama l'GetHLSStreamingSessionURLAPI con la modalità di LIVE_REPLAY riproduzione e un selettore di frammenti HLS specificato. https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetHLSStreamingSessionURL.html#KinesisVideo-reader_GetHLSStreamingSessionURL-request-HLSFragmentSelector

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode LIVE_REPLAY \ --hls-fragment-selector \ "FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=1708471800}"
    On-demand

    Per la riproduzione su richiesta, la playlist multimediale HLS contiene i file multimediali specificati dal selettore di frammenti HLS. Quando questo tipo di sessione viene riprodotto in un lettore multimediale, l'interfaccia utente in genere visualizza un comando di scorrimento per scegliere la posizione nella finestra di riproduzione da visualizzare.

    Per creare un URL per una determinata sezione dello stream, stabilisci innanzitutto i timestamp di inizio e fine.

    Per questo esempio, utilizziamo il formato Unix Epoch time in secondi. Fai riferimento alla sezione Timestamp nella Guida per l' AWS Command Line Interface utente per ulteriori informazioni sulla formattazione dei timestamp.

    Vedi per UnixTime.org uno strumento di conversione.

    • 1708471800 è uguale al 20 febbraio 2024 15:30:00 GMT-08:00

    • 1708471860 è uguale a 20 febbraio 2024 15:31:00 GMT-08:00

    Richiama l'GetHLSStreamingSessionURLAPI con la modalità di ON_DEMAND riproduzione e un selettore di frammenti HLS specificato. https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_reader_GetHLSStreamingSessionURL.html#KinesisVideo-reader_GetHLSStreamingSessionURL-request-HLSFragmentSelector

    aws kinesis-video-archived-media get-hls-streaming-session-url \ --endpoint-url https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com \ --stream-name YourStreamName \ --playback-mode ON_DEMAND \ --hls-fragment-selector \ "FragmentSelectorType=SERVER_TIMESTAMP,TimestampRange={StartTimestamp=1708471800,EndTimestamp=1708471860}"
    Nota

    I timestamp devono trovarsi entro 24 ore l'uno dall'altro, come indicato nella documentazione. HLSTimestampRange

    Riceverai una risposta simile alla seguente:

    { "HLSStreamingSessionURL": "https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com/hls/v1/getHLSMasterPlaylist.m3u8?SessionToken=CiAz...DkRE6M~" }
    Importante

    Non condividere o archiviare questo token dove un'entità non autorizzata potrebbe accedervi. Il token fornisce l'accesso al contenuto dello stream. Proteggi il token con le stesse misure che useresti con le tue AWS credenziali.

    Puoi utilizzare questo URL e qualsiasi player HLS per visualizzare lo stream HLS.

    Ad esempio, usa il lettore multimediale VLC.

    Puoi anche riprodurre HLS Stream inserendo l'URL della sessione di streaming HLS nella barra degli indirizzi dei browser Apple Safari o Microsoft Edge.

Esempio: usa HLS in HTML e JavaScript

L'esempio seguente mostra come utilizzare l' AWS SDK for JavaScript v2 per recuperare una sessione di streaming HLS per uno streaming video Kinesis e riprodurla in una pagina web. L'esempio mostra come riprodurre video con i lettori seguenti:

Visualizza il codice di esempio completo e la pagina web ospitata in. GitHub Questa pagina web statica semplifica i test e la sperimentazione con HLS e l' MPEG-DASH output dello streaming video di Amazon Kinesis. La pagina di esempio fornisce campi di input per i seguenti parametri:

  • Regione AWS: la regione in cui si trova il tuo streaming video Kinesis

  • Nome dello stream: il nome del tuo stream video Kinesis

  • Modalità di riproduzione: la modalità di riproduzione HLS (LIVE, LIVE_REPLAY o ON_DEMAND)

  • Tipo di selettore di frammenti: il metodo utilizzato per selezionare i frammenti (SERVER_TIMESTAMP o PRODUCER_TIMESTAMP)

  • Numero del frammento: il numero del frammento iniziale (se applicabile)

  • Formato del contenitore: il formato del contenitore multimediale (FRAGMENTED_MP4 o MPEG_TS)

L'applicazione recupera questi valori dalle caselle di input sulla pagina HTML e li utilizza per creare la richiesta di una sessione di streaming HLS che viene visualizzata sulla pagina.

Importa il AWS SDK JavaScript per browser

Nella pagina web, includi il seguente tag di script per importare l' AWS SDK per JavaScript v2 nel progetto.

<script src="https://cdnjs.cloudflare.com/ajax/libs/aws-sdk/2.490.0/aws-sdk.min.js"></script>

Per ulteriori informazioni, consulta l'AWS SDK per la documentazione. JavaScript

Configura il client Kinesis Video Streams

Per accedere allo streaming video con HLS, create e configurate innanzitutto il client Kinesis Video Streams. Per altri metodi di autenticazione, consulta Impostazione delle credenziali in un browser Web.

const clientConfig = { accessKeyId: 'YourAccessKey', secretAccessKey: 'YourSecretKey', region: 'us-west-2' }; const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);

L'applicazione recupera i valori necessari dalle caselle di input nella pagina HTML.

Recupera l'endpoint per la riproduzione HLS

Utilizzate il client Kinesis Video Streams per richiamare l'API per recuperare l'GetDataEndpointendpoint.

const getDataEndpointOptions = { StreamName: 'YourStreamName', APIName: 'GET_HLS_STREAMING_SESSION_URL' }; const getDataEndpointResponse = await kinesisVideoClient .getDataEndpoint(getDataEndpointOptions) .promise(); const hlsDataEndpoint = getDataEndpointResponse.DataEndpoint;

Questo codice memorizza l'endpoint nella variabile. hlsDataEndpoint

Configura il client multimediale archiviato di Kinesis Video Streams

Nella configurazione del client per il client multimediale archiviato Kinesis Video Streams, specificate l'endpoint ottenuto nel passaggio precedente.

const archivedMediaClientConfig = { accessKeyId: 'YourAccessKey', secretAccessKey: 'YourSecretKey', region: 'us-west-2', endpoint: hlsDataEndpoint }; const kinesisVideoArchivedMediaClient = new AWS.KinesisVideoArchivedMedia(archivedMediaClientConfig);

Recupera l'URL della sessione di streaming HLS

Utilizzate il client multimediale archiviato Kinesis Video Streams per richiamare l'GetHLSStreamingSessionURLAPI per recuperare l'URL di riproduzione HLS.

const getHLSStreamingSessionURLOptions = { StreamName: 'YourStreamName', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient .getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions) .promise(); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;

Visualizza lo stream HLS sulla pagina web

Una volta ottenuto l'URL della sessione di streaming HLS, forniscilo al lettore video. Il metodo per fornire l'URL al lettore video dipende dal lettore usato.

Video.js

Effettuate le seguenti operazioni per importare Video.js e inserire le relative classi CSS nello script del nostro browser:

<link rel="stylesheet" href="https://vjs.zencdn.net/6.6.3/video-js.css"> <script src="https://vjs.zencdn.net/6.6.3/video.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js"></script>

Create un elemento video HTML per visualizzare il video:

<video id="videojs" class="player video-js vjs-default-skin" controls autoplay></video>

Imposta l'URL HLS come sorgente dell'elemento video HTML:

const playerElement = document.getElementById('videojs'); const player = videojs(playerElement); player.src({ src: hlsUrl, type: 'application/x-mpegURL' }); player.play();
Shaka

Per importare il player di Google Shaka nello script del nostro browser, procedi come segue:

<script src="https://cdnjs.cloudflare.com/ajax/libs/shaka-player/2.4.1/shaka-player.compiled.js"></script>

Crea un elemento video HTML per visualizzare il video:

<video id="shaka" class="player" controls autoplay></video>

Create un player Shaka specificando l'elemento video e chiamate il metodo load:

const playerElement = document.getElementById('shaka'); const player = new shaka.Player(playerElement); player.load(hlsUrl);
hls.js

Fate quanto segue per importare hls.js nel nostro script del browser:

<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>

Create un elemento video HTML per visualizzare il video:

<video id="hlsjs" class="player" controls autoplay></video>

Crea un player hls.js, assegnagli l'URL HLS e digli di riprodurlo:

const playerElement = document.getElementById('hlsjs'); const player = new Hls(); player.loadSource(hlsUrl); player.attachMedia(playerElement); player.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); });

Risoluzione dei problemi relativi all'HLS

Questa sezione descrive i problemi che potresti riscontrare quando utilizzi HTTP Live Streaming (HLS) con Kinesis Video Streams.

Il recupero dell'URL della sessione di streaming HLS riesce, ma si verifica un problema di riproduzione nel lettore video

Questa situazione si verifica quando è possibile recuperare correttamente l'URL di una sessione di streaming HLS usando GetHLSStreamingSessionURL, ma non è possibile riprodurre il video fornendo l'URL a un lettore video.

Per risolvere questo problema, prova le soluzioni seguenti:

  • Determina se lo streaming video viene riprodotto nella console Kinesis Video Streams. Esamina gli errori visualizzati nella console.

  • Se la durata del frammento è meno di un secondo, aumentala a un secondo. Se la durata del frammento è troppo breve, il servizio potrebbe rallentare il lettore perché richiede frammenti video troppo frequentemente.

  • Verificare che ogni URL di una sessione di streaming HLS venga usato da un solo lettore. Se più di un lettore usa un singolo URL di una sessione di streaming HLS, il servizio potrebbe ricevere troppe richieste e limitarle.

  • Verifica che il tuo lettore supporti tutte le opzioni che stai specificando per la sessione di streaming HLS. Prova combinazioni diverse di valori per i parametri seguenti:

    • ContainerFormat

    • PlaybackMode

    • FragmentSelectorType

    • DiscontinuityMode

    • MaxMediaPlaylistFragmentResults

    Alcuni lettori multimediali (ad esempio HTML5 e lettori mobile) in genere supportano solo HLS con il formato container fMP4. Altri lettori multimediali (come Flash e lettori personalizzati) potrebbero supportare HLS solo con il formato contenitore MPEG TS. Consigliamo di sperimentare con il ContainerFormat parametro per iniziare la risoluzione dei problemi.

  • Verificare che ogni frammento abbia un numero consistente di tracce. Verifica che i frammenti nello stream non cambino tra una traccia audio e video e una sola traccia video. Verifica inoltre che le impostazioni dell'encoder (risoluzione e frequenza dei fotogrammi) non cambino tra i frammenti di ciascuna traccia.

Latenza troppo elevata tra il producer e il lettore

Questa situazione si verifica quando vi è una latenza troppo elevata dal momento dell'acquisizione del video alla sua riproduzione nel lettore.

Il video viene riprodotto tramite HLS frammento per frammento. Pertanto, la latenza non può essere inferiore alla durata dei frammenti. La latenza include anche il tempo necessario per il buffering e il trasferimento dei dati. Se la soluzione richiede una latenza inferiore a un secondo, usa l'API GetMedia.

È possibile modificare i parametri seguenti per ridurre la latenza complessiva, ma la modifica di questi parametri potrebbe comportare anche la riduzione della qualità video o l'aumento della frequenza di ripetizione del buffering.

  • Durata del frammento: la durata del frammento è la quantità di video tra le divisioni dello stream, controllata dalla frequenza dei fotogrammi chiave generati dal codificatore video. Il valore consigliato è di un secondo. Una durata inferiore dei frammenti significa meno tempo di attesa per il completamento del frammento prima della trasmissione dei dati video al servizio. I frammenti più brevi vengono anche elaborati più velocemente dal servizio. Tuttavia, se la durata di frammento è troppo breve, aumentano le probabilità che il lettore esaurisca i contenuti e debba arrestarsi ed eseguire il buffering di altri contenuti. Se la durata del frammento è meno di 500 millisecondi, il producer potrebbe creare troppe richieste, che potrebbero pertanto essere limitate dal servizio.

  • Bitrate: uno streaming video con un bitrate inferiore richiede meno tempo per leggere, scrivere e trasmettere. Tuttavia, un flusso video con una velocità in bit inferiore ha in genere una qualità video inferiore.

  • Numero di frammenti nelle playlist multimediali: un lettore sensibile alla latenza dovrebbe caricare solo i frammenti più recenti in una playlist multimediale. La maggior parte dei giocatori inizia invece dal primo frammento. Riducendo il numero di frammenti nella playlist, riduci la distanza temporale tra i frammenti precedenti e quelli nuovi. Con una playlist di dimensioni inferiori, è possibile che un frammento venga saltato durante la riproduzione se si verifica un ritardo nell'aggiunta di nuovi frammenti alla playlist o se il lettore riceve una playlist aggiornata in ritardo. Ti consigliamo di utilizzare 3-5 frammenti e di utilizzare un lettore configurato per caricare solo i frammenti più recenti da una playlist.

  • Dimensione del buffer del lettore: la maggior parte dei lettori video ha una durata minima del buffer configurabile, in genere con un'impostazione predefinita di 10 secondi. Per ottenere la latenza più bassa, è possibile impostare questo valore su 0 secondi. Tuttavia, ciò significa che il giocatore esegue il rebuffer in caso di ritardo nella produzione di frammenti, poiché il giocatore non avrà alcun buffer per assorbire il ritardo.

  • Il lettore «recupera il ritardo»: i lettori video in genere non recuperano automaticamente la riproduzione fino alla parte anteriore del buffer video se il buffer si riempie, ad esempio quando un frammento ritardato causa un ritardo nella riproduzione di frammenti. Un lettore personalizzato consente di evitare questa situazione, eliminando i fotogrammi o aumentando la velocità di riproduzione (ad esempio a 1,1x) per raggiungere la parte iniziale del buffer. Ciò causa una riproduzione irregolare o un aumento della velocità mentre il lettore recupera e la ripetizione del buffering potrebbe avvenire con maggiore frequenza se le dimensioni del buffer sono contenute.