Ich versuche zu leben Stream H.264 Inhalt zu HTML5 mit der Media-Source-Erweiterungen API.Live-Streaming-Dash-Inhalt mit mp4box
Die folgende Methode funktioniert recht gut:
ffmpeg -i rtsp://10.50.1.29/media/video1 -vcodec copy -f mp4 -reset_timestamps 1 -movflags frag_keyframe+empty_moov -loglevel quiet out.mp4
und dann: mp4box -dash 1000 -frag 1000 -frag-rap out.mp4
Ich kann nehmen Sie die MP4Box Ausgang (out_dashinit.mp4
) und es durch Web Sockets, Chunk Chunk senden an einen JavaScript-Client, der sie an die Medienquellen-API übermittelt.
Dies ist jedoch keine gute Methode für Live-Inhalte.
Was ich jetzt versuche, ist, eine einzige Pipeline zu erstellen, um es in Echtzeit und mit der minimal möglichen Latenz zu tun. Mit FFmpeg ist es möglich, die Ausgabe auf stdout
statt out.mp4
umzuleiten und den Inhalt zu greifen. Ich konnte nicht herausfinden, ob es möglich ist, MP4Box in die Pipeline zu kombinieren.
- Kann MP4Box die Eingabedaten von einer Quelle nehmen, die keine Datei ist?
- Kann MP4Box solch einen Inhalt progressiv aufnehmen (entweder von einer Datei oder einer anderen Quelle), während es in Echtzeit ankommt? d.h., warte ein wenig, wenn der Strom für 1 Sekunde stoppt und automatisch wieder aufgenommen wird.
- Gleiche Frage, aber für die Ausgabe: kann es auf etwas ausgeben, das keine Datei ist (wie
stdout
) und kann es so progressiv tun, dass, wenn Ausgabedaten bereit sind, ich es nehmen und es übertragen kann der Webclient, der im Wesentlichen ein nie endendes gestricheltes MP4 erzeugt.
fantastisch. Es klappt! Haben Sie auch einen Vorschlag zur Reduzierung der Latenz? Ich habe derzeit etwa 3-4 Sekunden Latenz – galbarm
Sie müssen mit den Parametern für x264 arbeiten.Der erste, den ich prüfen werde, ist die '-tune-Zero-latency', und arbeite mich von dort aus. –
Aber ich transcodiere das Video nicht. Wie Sie sehen können, benutze ich -vcodec copy und ich weiß mit Sicherheit, dass das Video fast ohne Latenz ankommt. – galbarm