it-swarm.com.de

Wie erstelle ich eine m3u8-Wiedergabeliste im Byte-Bereich für HLS?

Apple gibt ein Beispiel für die Unterstützung von Byte-Range-Segmenten in M3U8-Dateien für HLS

#EXTM3U
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-VERSION:4
#EXTINF:10.0,
#EXT-X-BYTERANGE:[email protected]
media.ts
#EXTINF:10.0,
#EXT-X-BYTERANGE:[email protected]
media.ts 
#EXTINF:10.0, 
#EXT-X-BYTERANGE:69864
media.ts

Aber ich kann nicht herausfinden, wie man eine solche Wiedergabeliste für eine gegebene .ts-Datei erstellt. Gibt es irgendwelche Werkzeuge dafür?

11
biomancer

Sieht aus wie

ffprobe -show_frames media.ts -print_format json

enthält genügend Informationen zu Frames, um eine solche Wiedergabeliste zu erstellen. Zum Erstellen sind jedoch einige Skripts erforderlich.

Ich werde diese Antwort mit Skript aktualisieren, wenn ich mit diesem Ansatz Erfolg habe.

Update:

Hier sind einige nützliche Links, die ich bis jetzt gefunden habe:

Bash-Skripte zum Generieren von Iframe-Wiedergabelisten - müssen optimiert werden, da ffprobe mehrmals aufgerufen wird

Iframe-Wiedergabelisten-Generator - Projekt auf Python, das verwendet werden kann, um Iframe-Wiedergabelisten aus üblichen zu generieren

Es ist nicht genau das, wonach ich anfangs gesucht habe, aber I-Frame-Wiedergabelisten ähneln denen im Byte-Bereich und passen noch besser zu meiner Aufgabe. Daher werde ich diese beiden Projekte als Referenz/Ausgangspunkt verwenden, um etwas zu erstellen etwas passender für mich.

Die Projekte verwenden unterschiedliche Methoden, um die Größe des I-Frames zu ermitteln - das Bash-Skript verwendet nur das, was ffprobe in pkt_size anzeigt, und das Python-Projekt fügt ein bisschen Voodoo hinzu, indem die Größe als Unterschied der Positionen von Paketen berechnet und 188 hinzugefügt wird, um Beispiel-Wiedergabelisten zu entsprechen von Apple. 188 bytes ist die größe von mpeg-ts paket, wahrscheinlich hängt das irgendwie zusammen, ich habe es aber nicht geschafft zu verstehen wie. Dieser Unterschied in der Größenberechnung führt dazu, dass unterschiedliche Wiedergabelisten erstellt werden, von denen wahrscheinlich eine in irgendeiner Weise falsch ist. Tatsächlich spielt VLC beide ohne Probleme ab. Daher halte ich mich an eine einfachere Methode, bis sich herausstellt, dass sie falsch ist.

Update 2:

Ich habe ein Ruby-Modul erstellt das I-Frame-Informationen einer bestimmten .ts-Datei mit ffprobe extrahieren und basierend auf diesen Informationen sowohl eine I-Frame- als auch eine übliche m3u8-Wiedergabeliste (wie in Frage gestellt) erstellen kann.

Ich habe die einfache Methode zum Erstellen einer I-Frame-Wiedergabeliste, die ich zuvor erwähnt habe, als inkorrekt befunden. Daher habe ich die Methode aus dem Iframe-Wiedergabelisten-Generator verwendet. Die Ausgabe ähnelt fast der von mediafilesegmenter -output-single-file -file-base output-dir/ input.ts erstellten I-Frame-Wiedergabeliste, die von Duvrai erwähnt wird. Manchmal gibt es jedoch Fehler in der Größe von 188 Byte für zufällige Frames. Ich konnte das Muster nicht verstehen, daher wird es derzeit ignoriert.

5
biomancer

Es gibt -hls_flags als ffmpeg-Option. ( https://www.ffmpeg.org/ffmpeg-formats.html )

Der folgende Befehl generiert eine einzelne ts-Datei, die in der m3u8-Indexdatei nach Bytebereichsfeature (ab HLS-Version 4 unterstützt) segmentiert ist.

$ ffmpeg -i sample.mp3 -hls_time 20 -hls_flags single_file out.m3u8
7
sangwonl

Sie können einen Standardsegmentierer wie die mediafilesegmenter von Apple verwenden, die Länge der Dateien überprüfen und sie dann (mit dem Programm cat) zu einer einzigen Datei verketten. Aus den Dateigrößen haben Sie alle Informationen, die Sie benötigen, um die Bytebereiche in einer Wiedergabelistendatei anzugeben.

Nicht so schön wie das Herunterladen eines Tools aus dem Internet, aber es ist kein sehr komplizierter Algorithmus.

1
vipw

Unified Streaming bietet auch ein Tool, das dies für Sie tun kann:

mp4split --package-hls output-single-file -o prog_index.m3u8 input.mp4

Dies ist Teil ihres kommerziellen Streaming-Pakets (sie bieten auf Anfrage eine kostenlose Testversion an). Sie bieten auch eine Amazon AWS-Instanz mit stündlichen Gebühren.

0
Duvrai