Stream mit HLS als Quelle schlägt fehl

Also mein Problem ist folgendes:

Ich habe einen Hauptprozess, der als Quelle bmdcapture verwendet, dieser Prozess erstellt einen Satz von 4 verschiedenen Streams mit HLS, also sieht der Befehl so aus (zeigt nur einen zur Vereinfachung):

ffmpeg -i /data/pipe0 hls_time 10 /data/input0/out.m3u8

Das funktioniert super! Überhaupt kein Problem. Wenn ich jetzt diese Ausgabe als Eingabe für einen anderen Stream sehe, funktioniert es in Ordnung. Also, wenn ich das mache:

ffmpeg -i /data/input0/out.m3u8 hls_time 10 /data/input1/out.m3u8

Es funktioniert ok, überhaupt kein Problem. Ich kann es spielen und es funktioniert ok.

Das Problem ist jedoch, wenn ich dieses erste HLS für RTMP-Streaming verwenden möchte ... das Video wird beschädigt, es springt, manchmal wird es überhaupt nicht abgespielt ... usw. Erwähnenswert ist, dass ich Akamai verwende um das Paket zu versenden, aber wenn ich wowza verwende, passiert dasselbe.

Aber ich habe die Lösung. Verwenden Sie 2-Sekunden-Segmente wie folgt:

ffmpeg -i /data/input0/out.m3u8 hls_time 2 rtmp://akamai.end.point/file

Und nur durch diese Änderung funktioniert der Stream einwandfrei und ohne Probleme. Der Hauptprozess, den ich habe ( ffmpeg -i /data/pipe0 hls_time 10 /data/input0/out.m3u8) Ich brauche jedoch 10 Sekunden statt 2, also kann ich ihn nicht ändern ... eine Lösung könnte darin bestehen, etwas anderes in der Mitte zu erstellen, aber das erhöht die Komplexität, besonders weil dieses System 24 läuft /7, das ist also keine Option ...

Die Frage ist: Warum kann ich nicht mit 10s-Segmenten als Quelle streamen?

Antworten (1)

Der Grund dafür ist, dass HLS als Quelle eigentlich nur eine statische Datei ist (ein Bündel von .TS-Paketen). Dazu müssen Sie den neuen ffmpeg-Prozess (in Ihrem Fall RTMP) mit x1-Geschwindigkeit oder in Echtzeit füttern. -reDies können Sie mit dem Flag vor der Eingabe tun .