Riproduzione video con HLS - Flusso di video Amazon Kinesis

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

HTTPLive Streaming (HLS) è un protocollo di comunicazione di streaming multimediale HTTP basato sugli standard del settore. È possibile HLS utilizzarlo per visualizzare un flusso video Kinesis, per la riproduzione dal vivo o per visualizzare video archiviati.

È possibile utilizzarlo HLS per la riproduzione dal vivo. 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 di rete. Puoi utilizzare un lettore di terze parti (come Video.js o Google Shaka Player) per visualizzare lo streaming video fornendo la sessione URL di HLS streaming, programmaticamente o manualmente. Puoi anche riprodurre video accedendo alla sessione di HLS streaming URL nella barra degli indirizzi dei browser Apple Safari o Microsoft Edge.

Per visualizzare uno streaming video Kinesis utilizzandoHLS, crea prima una sessione di streaming utilizzando G etHLSStreaming Session. URL Questa azione restituisce un URL (contenente un token di sessione) per accedere alla HLS sessione. È quindi possibile utilizzarlo URL in un lettore multimediale o in un'applicazione autonoma per visualizzare lo streaming.

Importante

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

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

Segui la procedura riportata di seguito per utilizzare AWS CLI per generare una sessione di HLS streaming URL per uno streaming video Kinesis.

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

In alternativa, apri il AWS CloudShell terminale, su cui è AWS CLI installato e configurato. Per ulteriori informazioni, consulta la Guida per l'AWS CloudShell utente.

Recupera l'HLSURLendpoint per lo streaming video Kinesis.
  1. Digita 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 URL richiesta di sessione di HLS streaming all'endpoint restituito.

    Live

    Per la riproduzione dal vivo, la playlist HLS multimediale viene continuamente aggiornata con i contenuti multimediali più recenti non appena disponibili. Quando riproduci 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 file 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 il replay dal vivo, la riproduzione inizia a partire da un'ora di inizio specificata. Inoltre, la playlist HLS multimediale viene continuamente aggiornata con i contenuti multimediali più recenti non appena disponibili. La sessione continuerà a includere i file multimediali appena acquisiti fino alla scadenza della sessione o fino all'ora di fine specificata, a seconda di quale evento 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 acquisiti al momento della creazione della sessione.

    Determina un timestamp di inizio.

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

    Vedi UnixTime.org per uno strumento di conversione.

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

    In questo esempio, non viene specificato un timestamp di fine, il che significa che la sessione continuerà a includere i file multimediali appena importati fino alla scadenza della sessione.

    Richiama la modalità GetHLSStreamingSessionURL API with LIVE_REPLAY playback e specifica un Fragment Selector. HLS

    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 HLS multimediale contiene i file multimediali specificati dal selettore di frammenti. HLS Quando questo tipo di sessione viene riprodotta in un lettore multimediale, l'interfaccia utente in genere visualizza un controllo a scorrimento per scegliere la posizione da visualizzare nella finestra di riproduzione.

    Per crearne uno URL per una determinata sezione dello stream, stabilite innanzitutto i timestamp di inizio e fine.

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

    Vedi UnixTime.org per uno strumento di conversione.

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

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

    Richiama la modalità with playback e specifica un Fragment GetHLSStreamingSessionURL API Selector. ON_DEMAND HLS

    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 utilizzeresti con AWS le tue credenziali.

    Puoi usare questo URL e qualsiasi altro HLS lettore per visualizzare lo HLS streaming.

    Ad esempio, usa il lettore VLC multimediale.

    Puoi anche riprodurre lo HLS Stream accedendo alla sessione di HLS streaming URL nella barra degli indirizzi dei browser Apple Safari o Microsoft Edge.

Esempio: da utilizzare HLS in HTML e JavaScript

L'esempio seguente mostra come utilizzare AWS SDK for JavaScript v2 per recuperare una sessione di streaming per uno HLS 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

Importa il AWS SDK modulo JavaScript per i browser

Nella pagina web, includi il seguente tag di script per importare AWS SDK for 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 AWS SDKla JavaScript documentazione.

Configurazione del client Kinesis Video Streams

Per accedere ai video in streaming conHLS, prima crea e configura il client Kinesis Video Streams. Vedi Impostazione delle credenziali in un browser Web per altri metodi di autenticazione.

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 della HTML pagina.

Recupera l'endpoint per la riproduzione HLS

Usa il client Kinesis Video Streams per GetDataEndpoint API richiamare il dispositivo per recuperare l'endpoint.

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

Configurare il client multimediale archiviato Kinesis Video Streams

Nella configurazione del client per il client multimediale archiviato Kinesis Video Streams, specifica 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 la sessione di streaming HLS URL

Usa il client multimediale archiviato Kinesis Video Streams per GetHLSStreamingSessionURL API richiamare il file per recuperare la riproduzione. HLS URL

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

Visualizza lo stream sulla pagina web HLS

Quando hai la sessione di HLS streamingURL, forniscila al lettore video. Il metodo per fornire il URL file al lettore video è specifico del lettore utilizzato.

Video.js

Fai quanto segue per importare Video.js e CSS le sue classi 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 video HTML elemento per visualizzare il video:

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

Imposta HLS URL come sorgente dell'elemento HTML video:

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

Fai quanto segue per importare il lettore Google Shaka nello script del nostro browser:

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

Crea un video HTML elemento 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

Fai quanto segue per importare hls.js nello script del nostro browser:

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

Crea un video HTML elemento per visualizzare il video:

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

Crea un player hls.js, assegnagli e digli di giocare: HLS URL

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 HLS problemi

Questa sezione descrive i problemi che potresti riscontrare durante l'utilizzo di HTTP Live Streaming (HLS) con Kinesis Video Streams.

Il recupero della sessione di HLS streaming riesce, ma la riproduzione non URL riesce nel lettore video

Questa situazione si verifica quando è possibile recuperare correttamente una sessione di HLS streaming URL utilizzandoGetHLSStreamingSessionURL, ma il video non viene riprodotto quando URL viene fornito a un lettore video.

Per risolvere questo problema, prova le soluzioni seguenti:

  • Determina se il flusso 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é effettua richieste di frammenti video troppo frequentemente.

  • Verifica che ogni sessione di HLS streaming URL sia utilizzata da un solo giocatore. Se più di un giocatore utilizza una singola sessione di HLS streamingURL, il servizio potrebbe ricevere troppe richieste e limitarle.

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

    • ContainerFormat

    • PlaybackMode

    • FragmentSelectorType

    • DiscontinuityMode

    • MaxMediaPlaylistFragmentResults

    Alcuni lettori multimediali (come HTML5 i lettori mobili) in genere supportano solo HLS il formato MP4 contenitore f. Altri lettori multimediali (come Flash e lettori personalizzati) potrebbero supportare HLS solo il formato contenitore MPEG TS. Ti consigliamo di provare il ContainerFormat parametro per iniziare la risoluzione dei problemi.

  • Verificare che ogni frammento abbia un numero consistente di tracce. Verifica che i frammenti dello stream non contengano solo una traccia video e audio e non contengano solo una traccia video. Verifica inoltre che le impostazioni del codificatore (risoluzione e frequenza fotogrammi) non cambino tra i frammenti di ogni 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 per HLS 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 tua soluzione richiede una latenza inferiore a un secondo, valuta la possibilità di utilizzare invece la. GetMedia API

È 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 del flusso, 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 la lettura, la scrittura e la trasmissione. 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 di 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 il frammento precedente e quello nuovo. Con una playlist di dimensioni inferiori, è possibile che un frammento venga saltato durante la riproduzione se c'è un ritardo nell'aggiunta di nuovi frammenti alla playlist o se c'è un ritardo nell'ottenere una playlist aggiornata. Ti consigliamo di usare 3-5 frammenti e di utilizzare un player 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, di solito con un valore predefinito di 10 secondi. Per ottenere la latenza più bassa, è possibile impostare questo valore su 0 secondi. Tuttavia, così facendo, il lettore esegue il rebuffer se c'è un ritardo nella produzione di frammenti, perché non disporrà di un buffer per assorbire il ritardo.

  • Player «catch up»: i lettori video in genere non riprendono automaticamente la riproduzione fino alla parte anteriore del buffer video se il buffer si riempie, come quando un frammento ritardato causa la riproduzione di un backlog 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.