Videowiedergabe mit HLS - Amazon Kinesis Video Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Videowiedergabe mit HLS

HTTPLive Streaming (HLS) ist ein auf Industriestandard HTTP basierendes Kommunikationsprotokoll für Medienstreaming. Sie können HLS es verwenden, um einen Kinesis-Videostream anzusehen, entweder für die Live-Wiedergabe oder um archivierte Videos anzusehen.

Sie können es HLS für die Live-Wiedergabe verwenden. Die Latenz liegt in der Regel zwischen 3 und 5 Sekunden, kann aber je nach Anwendungsfall, Player und Netzwerkbedingungen auch zwischen 1 und 10 Sekunden liegen. Sie können einen Player eines Drittanbieters (wie Video.js oder Google Shaka Player) verwenden, um den Videostream anzuzeigen, indem Sie die HLS Streaming-Sitzung entweder programmgesteuert oder URL manuell bereitstellen. Sie können Videos auch abspielen, indem Sie die HLS Streaming-Sitzung URL in der Adressleiste der Apple Safari - oder Microsoft Edge-Browser aufrufen.

Um einen Kinesis-Videostream mit G Session anzusehenHLS, erstellen Sie zunächst eine etHLSStreaming Streaming-Sitzung URL. Diese Aktion gibt ein URL (das ein Sitzungstoken enthält) für den Zugriff auf die HLS Sitzung zurück. Sie können das dann URL in einem Media Player oder einer eigenständigen Anwendung verwenden, um den Stream anzuzeigen.

Wichtig

Nicht alle an Kinesis Video Streams gesendeten Medien können wiedergegeben werden. HLS Spezifische GetHLSStreamingSessionURL Upload-Anforderungen finden Sie unter.

Verwenden Sie den AWS CLI , um eine HLS Streaming-Sitzung abzurufen URL

Gehen Sie wie folgt vor, um mit dem AWS CLI eine HLS Streaming-Sitzung URL für einen Kinesis-Videostream zu generieren.

Installationsanweisungen finden Sie im AWS Command Line Interface Benutzerhandbuch. Nach der Installation konfigurieren Sie das AWS CLI mit den Anmeldeinformationen und der Region.

Öffnen Sie alternativ das AWS CloudShell Terminal, auf dem das AWS CLI installiert und konfiguriert ist. Weitere Informationen finden Sie im AWS CloudShell -Benutzerhandbuch.

Rufen Sie den HLS URL Endpunkt für Ihren Kinesis-Videostream ab.
  1. Geben Sie Folgendes in das Terminal ein:

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

    Sie erhalten eine Antwort, die wie folgt aussieht:

    { "DataEndpoint": "https://b-1234abcd.kinesisvideo.aws-region.amazonaws.com" }
  2. Stellen Sie die HLS URL Streaming-Sitzungsanfrage an den zurückgegebenen Endpunkt.

    Live

    Bei der Live-Wiedergabe wird die HLS Medien-Playlist kontinuierlich mit den neuesten Medien aktualisiert, sobald diese verfügbar sind. Wenn Sie diese Art von Sitzung in einem Media Player abspielen, zeigt die Benutzeroberfläche in der Regel eine Live-Benachrichtigung an, ohne dass Sie die anzuzeigende Position im Wiedergabefenster auswählen können.

    Stellen Sie sicher, dass Sie Medien in diesen Stream hochladen, wenn Sie diesen Befehl ausführen.

    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

    Bei der Live-Wiedergabe beginnt die Wiedergabe ab einer bestimmten Startzeit. Die HLS Medien-Playlist wird außerdem ständig mit den neuesten Medien aktualisiert, sobald diese verfügbar sind. Die Sitzung enthält weiterhin neu aufgenommene Medien, bis die Sitzung abläuft oder bis zur angegebenen Endzeit, je nachdem, was zuerst eintritt. Dieser Modus ist nützlich, um die Wiedergabe ab dem Zeitpunkt starten zu können, an dem ein Ereignis erkannt wird, und das Live-Streaming von Medien fortsetzen zu können, die zum Zeitpunkt der Sitzungserstellung noch nicht aufgenommen wurden.

    Ermitteln Sie einen Startzeitstempel.

    In diesem Beispiel verwenden wir das Format Unix Epoch Time in Sekunden. Weitere Informationen zur Formatierung von Zeitstempeln finden Sie im Abschnitt Zeitstempel im AWS Command Line Interface Benutzerhandbuch.

    Auf UnixTime.org finden Sie ein Konvertierungstool.

    • 1708471800 entspricht 20. Februar 2024, 15:30:00 — 08:00 GMT

    In diesem Beispiel geben wir keinen Endzeitstempel an, was bedeutet, dass die Sitzung weiterhin neu aufgenommene Medien enthält, bis die Sitzung abläuft.

    Rufen Sie den GetHLSStreamingSessionURL API mit dem angegebenen LIVE_REPLAY Wiedergabemodus und einem angegebenen HLSFragment-Selektor auf.

    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

    Für die On-Demand-Wiedergabe enthält die HLS Medien-Playlist die durch die HLS Fragmentauswahl angegebenen Medien. Wenn diese Art von Sitzung in einem Media Player abgespielt wird, zeigt die Benutzeroberfläche in der Regel ein Steuerelement an, mit dem Sie die anzuzeigende Position im Wiedergabefenster auswählen können.

    Um einen Stream URL für einen bestimmten Abschnitt zu erstellen, legen Sie zunächst die Start- und Endzeitstempel fest.

    In diesem Beispiel verwenden wir das Format Unix Epoch Time in Sekunden. Weitere Informationen zur Formatierung von Zeitstempeln finden Sie im Abschnitt Zeitstempel im AWS Command Line Interface Benutzerhandbuch.

    Auf UnixTime.org finden Sie ein Konvertierungstool.

    • 1708471800 entspricht 20. Februar 2024, 15:30:00 — 08:00 GMT

    • 1708471860 entspricht 20. Februar 2024 15:31:00 — 08:00 GMT

    Ruft den GetHLSStreamingSessionURL API mit dem angegebenen ON_DEMAND Wiedergabemodus und einem angegebenen Fragment-Selektor auf. 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}"
    Anmerkung

    Die Zeitstempel müssen nicht weiter als 24 Stunden voneinander entfernt sein, wie in der Dokumentation beschrieben. HLSTimestampRange

    Sie erhalten eine Antwort, die wie folgt aussieht:

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

    Teilen oder speichern Sie dieses Token nicht an einem Ort, an dem eine nicht autorisierte Entität darauf zugreifen könnte. Das Token ermöglicht den Zugriff auf den Inhalt des Streams. Schützen Sie das Token mit denselben Maßnahmen, die Sie für Ihre AWS Anmeldeinformationen verwenden würden.

    Du kannst diesen URL und jeden anderen HLS Spieler verwenden, um den HLS Stream anzusehen.

    Verwenden Sie beispielsweise den VLC Media Player.

    Sie können den HLS Stream auch abspielen, indem Sie die HLS Streaming-Sitzung URL in der Adressleiste der Apple Safari- oder Microsoft Edge-Browser aufrufen.

Beispiel: Verwendung HLS in HTML und JavaScript

Das folgende Beispiel zeigt, wie Sie mit AWS SDK for JavaScript v2 eine HLS Streaming-Sitzung für einen Kinesis-Videostream abrufen und auf einer Webseite wiedergeben können. Das Beispiel veranschaulicht die Wiedergabe von Videos in den folgenden Playern:

Den vollständigen Beispielcode und die gehostete Webseite finden Sie unter GitHub.

Importieren Sie das AWS SDK JavaScript für Browser

Fügen Sie auf der Webseite das folgende Skript-Tag ein, um das AWS SDK für JavaScript v2 in das Projekt zu importieren.

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

Weitere Informationen finden Sie in der AWS SDK JavaScriptDokumentation.

Den Kinesis Video Streams Streams-Client einrichten

Um auf Streaming-Video zuzugreifenHLS, müssen Sie zunächst den Kinesis Video Streams Streams-Client erstellen und konfigurieren. Weitere Authentifizierungsmethoden finden Sie unter Anmeldeinformationen in einem Webbrowser einrichten.

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

Die Anwendung ruft die erforderlichen Werte aus den Eingabefeldern auf der HTML Seite ab.

Ruft den Endpunkt für HLS die Wiedergabe ab

Rufen Sie den Kinesis Video Streams Streams-Client auf, GetDataEndpoint API um den Endpunkt abzurufen.

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

Dieser Code speichert den Endpunkt in der hlsDataEndpoint Variablen.

Den Kinesis Video Streams Streams-Client für archivierte Medien einrichten

Geben Sie in der Client-Konfiguration für den Kinesis Video Streams Streams-Client für archivierte Medien den Endpunkt an, den Sie im vorherigen Schritt abgerufen haben.

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

Rufen Sie die HLS Streaming-Sitzung ab URL

Verwenden Sie den Kinesis Video Streams Streams-Client für archivierte Medien, um den aufzurufen GetHLSStreamingSessionURLAPI, um die Wiedergabe abzurufen. HLS URL

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

Zeigen Sie den HLS Stream auf der Webseite an

Wenn Sie die HLS Streaming-Sitzung habenURL, stellen Sie sie dem Videoplayer zur Verfügung. Die Methode zur Bereitstellung für den URL Videoplayer ist spezifisch für den verwendeten Player.

Video.js

Gehen Sie wie folgt vor, um Video.js und seine CSS Klassen in unser Browserskript zu importieren:

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

Erstellen Sie ein video HTML Element, um das Video anzuzeigen:

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

Stellen Sie das HLS URL als Quelle für das HTML Videoelement ein:

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

Gehen Sie wie folgt vor, um den Google Shaka-Player in unser Browserskript zu importieren:

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

Erstellen Sie ein video HTML Element, um das Video anzuzeigen:

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

Erstellen Sie einen Shaka-Player, der das Videoelement angibt, und rufen Sie die Lademethode auf:

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

Gehen Sie wie folgt vor, um hls.js in unser Browser-Skript zu importieren:

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

Erstellen Sie ein video HTML Element, um das Video anzuzeigen:

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

Erstellen Sie einen hls.js Player, geben Sie ihm den und weisen Sie ihn an HLSURL, dass er abgespielt werden soll:

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

HLSProbleme beheben

In diesem Abschnitt werden Probleme beschrieben, die bei der Verwendung von HTTP Live-Streaming (HLS) mit Kinesis Video Streams auftreten können.

Das Abrufen der HLS Streaming-Sitzung URL ist erfolgreich, aber die Wiedergabe im Videoplayer schlägt fehl

Diese Situation tritt auf, wenn Sie eine HLS Streaming-Sitzung URL mit erfolgreich aufrufen könnenGetHLSStreamingSessionURL, das Video jedoch nicht wiedergegeben werden kann, wenn das für einen Videoplayer bereitgestellt URL wird.

Um das Problem zu beheben, versuchen Sie Folgendes:

  • Stellen Sie fest, ob der Videostream in der Kinesis Video Streams Streams-Konsole wiedergegeben wird. Ziehen Sie alle in der Konsole angezeigten Fehler in Betracht.

  • Wenn die Fragmentdauer weniger als eine Sekunde beträgt, erhöhen Sie sie auf eine Sekunde. Wenn die Fragmentdauer zu kurz ist, drosselt der Dienst möglicherweise den Player, weil er zu häufig Videofragmente anfordert.

  • Stellen Sie sicher, dass jede HLS Streaming-Sitzung URL nur von einem Player verwendet wird. Wenn mehrere Spieler eine einzelne HLS Streaming-Sitzung verwendenURL, erhält der Dienst möglicherweise zu viele Anfragen und drosselt diese.

  • Stellen Sie sicher, dass Ihr Player alle Optionen unterstützt, die Sie für die HLS Streaming-Sitzung angeben. Probieren Sie verschiedene Kombinationen von Werten für die folgenden Parameter aus:

    • ContainerFormat

    • PlaybackMode

    • FragmentSelectorType

    • DiscontinuityMode

    • MaxMediaPlaylistFragmentResults

    Einige Mediaplayer (z. B. HTML5 mobile Player) unterstützen HLS normalerweise nur das MP4 F-Containerformat. Andere Mediaplayer (wie Flash und benutzerdefinierte Player) unterstützen HLS möglicherweise nur das MPEG TS-Containerformat. Wir empfehlen, mit dem ContainerFormat Parameter zu experimentieren, um mit der Problembehandlung zu beginnen.

  • Stellen Sie sicher, dass jedes Fragment über eine konsistente Anzahl von Tracks verfügt. Stellen Sie sicher, dass sich Fragmente im Stream nicht ändern, wenn Sie sowohl eine Audio- und Videospur als auch nur eine Videospur haben. Stellen Sie außerdem sicher, dass sich die Encoder-Einstellungen (Auflösung und Bildrate) nicht zwischen den einzelnen Fragmenten in den einzelnen Spuren ändern.

Latenz zwischen Produzent und Player zu hoch

Diese Situation tritt auf, wenn die Latenz ab dem Zeitpunkt, an dem das Video erfasst wurde, bis zu dem Zeitpunkt, an dem es im Video-Player abgespielt wird, zu hoch ist.

Das Video wird HLS fragmentweise abgespielt. Daher darf die Latenz nicht kürzer als die Fragmentdauer sein. Die Latenz umfasst auch die für die Pufferung und Übertragung von Daten benötigte Zeit. Wenn Ihre Lösung eine Latenz von weniger als einer Sekunde erfordert, sollten Sie GetMedia API stattdessen die verwenden.

Sie können die folgenden Parameter können so anpassen, dass die Latenz insgesamt verringert wird. Eine Anpassung dieser Parameter kann jedoch zur Folge haben, dass sich die Videoqualität verringert oder die Neupufferungsrate erhöht.

  • Fragmentdauer — Die Fragmentdauer ist die Menge an Video zwischen den Abschnitten im Stream, die durch die Häufigkeit der vom Video-Encoder generierten Keyframes gesteuert wird. Der empfohlene Wert ist eine Sekunde. Eine kürzere Fragmentdauer bedeutet, dass weniger lange auf den Abschluss des Fragments gewartet wird, bevor die Videodaten zum Service übertragen werden. Außerdem kann der Service kürzere Fragmente schneller verarbeiten. Wenn die Fragmentdauer zu kurz ist, nimmt jedoch die Wahrscheinlichkeit zu, dass dem Player die Inhalte ausgehen und er anhalten und Inhalte puffern muss. Wenn die Fragmentdauer weniger als 500 Millisekunden beträgt, erstellt der Produzent möglicherweise zu viele Anforderungen, die dann vom Service gedrosselt werden.

  • Bitrate — Ein Videostream mit einer niedrigeren Bitrate benötigt weniger Zeit zum Lesen, Schreiben und Übertragen. Ein Videostream mit einer niedrigeren Bitrate verfügt in der Regel jedoch über eine geringere Videoqualität.

  • Anzahl der Fragmente in Medien-Playlisten — Ein Player, der latenzempfindlich ist, sollte nur die neuesten Fragmente in eine Medien-Playlist laden. Die meisten Spieler beginnen stattdessen mit dem frühesten Fragment. Indem Sie die Anzahl der Fragmente in der Playlist reduzieren, verringern Sie den Zeitabstand zwischen dem vorherigen und dem neuen Fragment. Bei einer kleineren Playlist kann es sein, dass ein Fragment bei der Wiedergabe übersprungen wird, wenn es zu Verzögerungen beim Hinzufügen neuer Fragmente zur Playlist kommt oder wenn der Player verzögert eine aktualisierte Playlist erhält. Wir empfehlen, 3—5 Fragmente zu verwenden und einen Player zu verwenden, der so konfiguriert ist, dass er nur die neuesten Fragmente aus einer Playlist lädt.

  • Puffergröße des Players — Die meisten Videoplayer haben eine konfigurierbare Mindestpufferdauer, normalerweise mit einer Standardeinstellung von 10 Sekunden. Für die niedrigste Latenz können Sie diesen Wert auf 0 Sekunden setzen. Dies bedeutet jedoch, dass der Player zurückweist, wenn es zu Verzögerungen kommt, wodurch Fragmente entstehen, da der Player dann keinen Puffer hat, um die Verzögerung zu absorbieren.

  • Spieler-Aufholjagd — Videoplayer catch die Wiedergabe normalerweise nicht automatisch bis zum Anfang des Videopuffers auf, wenn der Puffer voll wird, z. B. wenn ein verzögertes Fragment zu einem Rückstau von Fragmenten führt. Um dies zu vermeiden, kann ein benutzerdefinierter Player Frames verwerfen oder die Wiedergabegeschwindigkeit erhöhen (z. B. auf 1,1-fach), um bis zum Anfang des Puffers aufzuholen. Dies führt zu einer abgehackten Wiedergabe oder einer Zunahme der Geschwindigkeit, während der Player aufholt, und die erneute Pufferung kann häufiger erfolgen, da die Puffergröße gering gehalten wird.