View a markdown version of this page

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

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

Sie können HLS zur 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 (z. B. Google Shaka Player) verwenden, um den Videostream anzuzeigen, indem Sie die URL der HLS-Streamingsitzung entweder programmgesteuert Video.js oder manuell angeben. Sie können Videos auch wiedergeben, indem Sie die URL der HLS-Streamingsitzung in die Adressleiste der Browser Apple Safari oder Microsoft Edge eingeben. https://www.microsoft.com/en-us/edge

Um einen Kinesis-Videostream mit HLS anzusehen, erstellen Sie zunächst eine Streaming-Sitzung mit. GetHLSStreamingSessionURL Diese Aktion gibt eine URL (mit einem Sitzungs-Token) für den Zugriff auf die HLS-Sitzung zurück. Anschließend können Sie die URL in einen Media Player oder einer eigenständigen Anwendung zum Anzeigen des Streams verwenden.

Wichtig

Nicht alle an Kinesis Video Streams gesendeten Medien können über HLS wiedergegeben werden. Informationen zu GetHLSStreamingSessionURL den spezifischen Anforderungen für das Hochladen finden Sie unter.

Benutze das AWS CLI um eine URL für eine HLS-Streaming-Sitzung abzurufen

Das folgende Verfahren zeigt, wie Sie die AWS CLI verwenden, um eine HLS-Streaming-Sitzungs-URL für einen Kinesis-Videostream zu generieren.

Anweisungen zur Installation finden Sie im AWS Command Line Interface Benutzerhandbuch. Nach der Installation konfigurieren Sie das AWS CLI mit Anmeldeinformationen und 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 URL-Anfrage für die HLS-Streaming-Sitzung an diesen zurückgegebenen Endpunkt.

    Live

    Für die 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 ein Scrubber-Steuerelement zur Auswahl der anzuzeigenden Position im Wiedergabefenster vorhanden ist.

    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 an einer bestimmten Startzeit. Die HLS-Medien-Playlist wird ebenfalls kontinuierlich 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 der Erkennung eines Ereignisses zu starten und das Livestreamen von Medien fortzusetzen, die zum Zeitpunkt der Sitzungserstellung noch nicht aufgenommen wurden.

    Ermitteln Sie einen Startzeitstempel.

    Für dieses Beispiel verwenden wir die Unix-Epoch-Zeit im Sekundenformat. Weitere Informationen zur Formatierung von Zeitstempeln finden Sie im Abschnitt Zeitstempel im AWS Command Line Interface Benutzerhandbuch.

    Ein UnixTime.org Konvertierungstool finden Sie unter.

    • 1708471800 entspricht dem 20. Februar 2024 um 15:30 Uhr GMT-08:00

    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 die GetHLSStreamingSessionURL API mit dem angegebenen LIVE_REPLAY Wiedergabemodus und einem angegebenen HLS-Fragment-Selector 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 Wiedergabe auf Abruf enthält die HLS-Medien-Playlist die vom HLS-Fragmentselektor angegebenen Medien. Wenn diese Art von Sitzung in einem Media Player abgespielt wird, zeigt die Benutzeroberfläche in der Regel ein Scrubber-Steuerelement an, mit dem Sie die Position im Wiedergabefenster auswählen können, die angezeigt werden soll.

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

    Für dieses Beispiel verwenden wir die Unix-Epoch-Zeit im Sekundenformat. Weitere Informationen zur Formatierung von Zeitstempeln finden Sie im Abschnitt Zeitstempel im AWS Command Line Interface Benutzerhandbuch.

    Ein UnixTime.org Konvertierungstool finden Sie unter.

    • 1708471800 entspricht dem 20. Februar 2024 um 15:30 Uhr GMT-08:00

    • 1708471860 entspricht 20. Februar 2024, 15:31 Uhr GMT-08:00

    Rufen Sie die GetHLSStreamingSessionURL API mit dem angegebenen ON_DEMAND Wiedergabemodus und einem angegebenen HLS-Fragment-Selector auf. 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}"
    Anmerkung

    Die Zeitstempel müssen innerhalb von 24 Stunden voneinander entfernt sein, wie in der Dokumentation angegeben. 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 Orten, an denen eine nicht autorisierte Entität darauf zugreifen könnte. Das Token bietet Zugriff auf den Inhalt des Streams. Schützen Sie das Token mit den gleichen Maßnahmen, die Sie für Ihre AWS Anmeldeinformationen verwenden würden.

    Sie können diese URL und jeden HLS-Player verwenden, um den HLS-Stream anzusehen.

    Verwenden Sie beispielsweise den VLC Media Player.

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

Beispiel: Verwenden Sie HLS in HTML und JavaScript

Das folgende Beispiel zeigt, wie das AWS SDK für JavaScript Version 2 verwendet wird, um eine HLS-Streaming-Sitzung für einen Kinesis-Videostream abzurufen und auf einer Webseite wiederzugeben. Das Beispiel veranschaulicht die Wiedergabe von Videos in den folgenden Playern:

Den vollständigen Beispielcode und die gehostete Webseite finden Sie unter. GitHub Diese statische Webseite vereinfacht das Testen und Experimentieren mit HLS und der MPEG-DASH Ausgabe aus dem Amazon Kinesis-Videostream. Die Beispielseite enthält Eingabefelder für die folgenden Parameter:

  • AWS-Region: Die Region, in der sich Ihr Kinesis-Videostream befindet

  • Stream-Name: Der Name Ihres Kinesis-Videostreams

  • Wiedergabemodus: Der HLS-Wiedergabemodus (LIVE, LIVE_REPLAY oder ON_DEMAND)

  • Fragmentauswahltyp: Die Methode, mit der Fragmente ausgewählt werden (SERVER_TIMESTAMP oder PRODUCER_TIMESTAMP)

  • Fragmentnummer: Die Startnummer des Fragments (falls zutreffend)

  • Containerformat: Das Format des Mediencontainers (FRAGMENTED_MP4 oder MPEG_TS)

Die Anwendung ruft diese Werte aus den Eingabefeldern auf der HTML-Seite ab und verwendet sie, um die Anfrage für eine HLS-Streaming-Sitzung zu erstellen, die auf der Seite angezeigt wird.

Importiere AWS SDK JavaScript für Browser

Fügen Sie auf der Webseite das folgende Skript-Tag ein, um das AWS SDK für JavaScript Version 2 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 JavaScript Dokumentation des AWS SDK.

Richten Sie den Kinesis Video Streams-Client ein

Um mit HLS auf Streaming-Videos zuzugreifen, erstellen und konfigurieren Sie zunächst den Kinesis Video Streams-Client. Weitere Authentifizierungsmethoden finden Sie unter Anmeldeinformationen in einem Webbrowser https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html einrichten.

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

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

Ruft den Endpunkt für die HLS-Wiedergabe ab

Verwenden Sie den Kinesis Video Streams-Client, um die GetDataEndpoint API zum Abrufen des Endpunkts aufzurufen.

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.

Richten Sie den Kinesis Video Streams-Client für archivierte Medien ein

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

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

Rufen Sie die URL der HLS-Streaming-Sitzung ab

Verwenden Sie den Kinesis Video Streams-Client für archivierte Medien, um die GetHLSStreamingSessionURL API zum Abrufen der HLS-Wiedergabe-URL aufzurufen.

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-Sitzungs-URL erhalten haben, stellen Sie sie für den Video-Player bereit. Die Methode, mit der die URL für den Video-Player bereitgestellt wird, ist vom jeweils verwendeten Player abhängig.

Video.js

Gehen Sie wie folgt vor, um die Video.js zugehörigen 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 die 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 Browserskript 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 die HLS-URL und sagen Sie ihm, 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(); });

Behebung von HLS-Problemen

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

Abrufen der HLS-Streaming-Sitzungs-URL erfolgreich, aber Wiedergabe im Video-Player nicht möglich

Diese Situation tritt auf, wenn Sie eine HLS-Streaming-Sitzungs-URL mit GetHLSStreamingSessionURL erfolgreich abrufen können, das Video aber nicht abgespielt wird, wenn die URL einem Video-Player bereitgestellt wird.

Um das Problem zu beheben, versuchen Sie Folgendes:

  • Stellen Sie fest, ob der Videostream in der Kinesis Video 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, da er zu häufig Anfragen nach Videofragmenten stellt.

  • Stellen Sie sicher, dass jede HLS-Streaming-Sitzungs-URL von nur einem Player verwendet wird. Wenn eine einzelne HLS-Streaming-Sitzungs-URL von mehr als einem Player verwendet wird, empfängt der Service möglicherweise zu viele Videoanforderungen und drosselt sie.

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

    • ContainerFormat

    • PlaybackMode

    • FragmentSelectorType

    • DiscontinuityMode

    • MaxMediaPlaylistFragmentResults

    Einige Media Player (z. B. HTML5 und mobile Media Player) unterstützen in der Regel nur HLS mit dem fMP4-Containerformat. Andere Media Player (wie Flash und benutzerdefinierte Player) unterstützen HLS möglicherweise nur mit dem 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 die Fragmente im Stream nicht ändern, weil sie sowohl eine Audio- als auch eine Videospur enthalten und nur eine Videospur haben. Stellen Sie außerdem sicher, dass sich die Encoder-Einstellungen (Auflösung und Bildrate) nicht zwischen den 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 über HLS fragmentweise wiedergegeben. 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 weniger als eine Sekunde Latenz erfordert, empfehlen wir, stattdessen die GetMedia-API zu 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 Senden. 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 auf Latenz reagiert, sollte nur die neuesten Fragmente einer Medien-Playlist laden. Die meisten Player 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-Größe ist es möglich, dass ein Fragment während der Wiedergabe übersprungen wird, wenn es beim Hinzufügen neuer Fragmente zur Playlist zu einer Verzögerung kommt oder wenn der Player eine aktualisierte Playlist verzögert erhält. Wir empfehlen, 3—5 Fragmente zu verwenden und einen Player zu verwenden, der so konfiguriert ist, dass nur die neuesten Fragmente aus einer Playlist geladen werden.

  • Player-Puffergröße — Die meisten Videoplayer haben eine konfigurierbare Mindestpufferdauer, in der Regel 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 bei Verzögerungen einen Rebuffer durchführt und Fragmente erzeugt, da der Player keinen Puffer hat, um die Verzögerung zu absorbieren.

  • „Aufholen“ durch den Player — Videoplayer fangen die Wiedergabe in der Regel nicht automatisch bis zum Anfang des Videopuffers ab, wenn der Puffer voll ist, z. B. wenn ein verzögertes Fragment dazu führt, dass ein Rückstand von Fragmenten abgespielt wird. 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.