Dieser Artikel konzentriert sich auf HTTP Live Streaming (HLS), aber die grundlegenden Konzepte sind auch für andere HTTP-basierte Streaming-Protokolle gültig. Ein tieferes Eintauchen in das HLS-Protokoll würde den Rahmen dieses Artikels sprengen, aber eine Fülle von Informationen ist online verfügbar, einschließlich des veröffentlichten Standards: HTTP Live Streaming.
Verkettung und der alte Weg
Inhalte sind gleichbedeutend mit Wert. In der Videowelt besteht eine Möglichkeit, mehr Wert zu schaffen, darin, ein einzelnes Video mit anderen Videos zu mischen, um einen neuen Inhalt zu erstellen. In vielen Fällen geschieht dies durch Verkettung oder die Möglichkeit, mehrere Videos zusammenzufügen, was eine grundlegende Form der Bearbeitung darstellt. Hinzu kommt die Erstellung von Clips durch Bearbeitungslisten, und schon haben Sie zwei der grundlegendsten Funktionen eines nichtlinearen Editors.
So vielversprechend die Verkettung auch erscheint, sie kann auch eine Belastung für die Infrastruktur und den Betrieb darstellen. Stellen Sie sich ein soziales Videoportal vor. Abhängig von den Zielgeräten kann es zwischen einer Handvoll und mehreren Dutzend Ausgabeformaten pro Video geben. Sollten sie sich dazu entschließen, mehrere Videos miteinander zu verknüpfen, um den Wert ihrer Bibliothek zu erhöhen, steigen auch die Speicherkosten und die Komplexität der Verwaltung von Assets massiv an. Jedes Mal, wenn eine neue Kombination von Videos erstellt wird, wird eine Reihe von festen Beständen erzeugt, die gespeichert werden müssen.
HTTP-Live-Streaming und die Manifestdatei
Die Einführung von manifestgesteuerten HTTP-basierten Streaming-Protokollen hat ein völlig neues Paradigma für die Erstellung dynamischer Seherlebnisse geschaffen. Bisher bestand die einzige Möglichkeit, mehrere Kombinationen von Clips aus einem einzigen Inhalt zu liefern, in der Bearbeitung, d. h. in der Erstellung von festen Inhalten. Mit Technologien wie HLS - da das abspielbare Element nicht mehr eine Videodatei, sondern eine einfache Textdatei ist - ist die Bearbeitung eines Videos dasselbe wie die Bearbeitung eines Dokuments in einem Textverarbeitungsprogramm.
Für eine Videoplattform gibt es zwei Möglichkeiten, die HLS m3u8-Manifestdatei zu behandeln. Am einfachsten ist es, die m3u8-Datei als separates, abspielbares Asset zu behandeln. Bei diesem Modell wird die m3u8-Datei auf dem Ursprungsserver zusammen mit den segmentierten TS-Dateien gespeichert und an die Geräte geliefert. Das Ergebnis ist einfach und schnell zu implementieren, aber die m3u8-Datei kann nur durch einen manuellen Prozess geändert werden.
Indem das Manifest als etwas behandelt wird, das dynamisch generiert wird, ist es möglich, den Zuschauern eine praktisch unbegrenzte Kombination von Clips zu liefern. Bei diesem Modell wird die m3u8-Datei "on the fly" generiert, d. h. sie liegt nicht auf dem Server, sondern wird jedes Mal erstellt und bereitgestellt, wenn sie angefordert wird
Dynamische Manifest-Erstellung
Was ist eine Manifestdatei? Im Wesentlichen handelt es sich um eine Kombination aus einigen Metadaten und Links zu Videosegmenten.
- Beispielhaftes Video A
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10,
- Exemplarisch_A_segment-01.ts
- #EXTINF:10,
- Exemplarisches_A_segment-02.ts
Das obige m3u8 hat zwei Videosegmente von je 10 Sekunden, so dass die Gesamtlänge des Videos 20 Sekunden beträgt. Das Beispielvideo A, das übrigens ein wirklich tolles Video ist, ist 20 Sekunden lang. Stellen wir uns nun vor, wir hätten auch eines:
- Beispielhaftes Video B
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10,
- Exemplarisch_B_segment-01.ts
- #EXTINF:10,
- Exemplarisch_B_segment-02.ts
Und nehmen wir an, wir wissen, dass ein bestimmter Betrachter begeistert wäre, wenn er eine Kombination aus beiden Videos sehen würde, wobei Video B zuerst und Video A an zweiter Stelle läuft:
- Hervorragendes Video
- #EXTM3U
- #EXT-X-MEDIA-SEQUENCE:0
- #EXT-X-TARGETDURATION:10
- #EXTINF:10,
- Exemplarisch_B_segment-01.ts
- #EXTINF:10,
- Exemplarisch_B_segment-02.ts
- #EXT-X-DISCONTINUITY
- #EXTINF:10,
- Exemplarisch_A_segment-01.ts
- #EXTINF:10,
- Exemplarisches_A_segment-02.ts
Jetzt haben wir im Handumdrehen ein neues Video für den Benutzer generiert, das mit Video B beginnt, gefolgt von Video A. Als ob das nicht schon cool genug wäre, wird das Video nahtlos abgespielt, als ob es ein einziges Video wäre.
Vielleicht haben Sie eine kleine Ergänzung zum m3u8 bemerkt:
EXT-X-DISCONTINUITY
Durch das Einfügen dieses Tags in den m3u8 wird dem Player mitgeteilt, dass das nächste Videosegment eine andere Auflösung oder ein anderes Audioprofil als das letzte hat. Wenn die Videos alle mit derselben Auflösung, denselben Codecs und Profilen kodiert sind, kann dieses Tag weggelassen werden.
Ausweitung des neuen Modells
Um eine Videoplattform zu schaffen, die in der Lage ist, benutzerdefinierte Wiedergabeerlebnisse "on-the-fly" zu liefern, muss das m3u8-Manifest nicht als festes Asset behandelt werden, sondern als etwas, das bei jeder Anfrage generiert werden muss. Das bedeutet, dass das Backend den Speicherort jedes Videosegments, die Gesamtzahl der Segmente pro Element und die Länge jedes Segments kennen muss.
Es gibt Möglichkeiten, dies einfacher zu gestalten. Wenn die Dateien beispielsweise einheitlich benannt werden, muss nur der Basisdateiname für alle Segmente bekannt sein, und die Iteration der Segmente kann programmatisch gehandhabt werden. Es kann davon ausgegangen werden, dass alle Segmente mit Ausnahme des letzten Segments die gleiche Zieldauer haben, so dass nur die Dauer des letzten Segments gespeichert werden muss. Bei einer einzelnen Videodatei mit vielen Videosegmenten müssen also nur der Basispfad, der Basisdateiname, die Anzahl der Segmente, die durchschnittliche Segmentlänge und die Länge des letzten Segments gespeichert werden.
Wenn man selbst lange Titel als eine Kombination von Szenen betrachtet, oder noch weitergehend, wenn man Szenen als eine Kombination von Aufnahmen betrachtet, gibt es eine unglaubliche Menge an Möglichkeiten, die durch dynamische Manifestgenerierung erschlossen werden können. Bei frühzeitiger Planung und Entwicklung kann die Architektur der Bereitstellungsplattform ein hohes Maß an Flexibilität bieten, ohne dass die Betriebs- oder Infrastrukturkosten steigen.