2017-02-22 6 views
0

Ich versuche, Video von einer 5MP USB-Kamera mit ffmpeg 3.2.2 unter Windows zu erfassen und streamen. Hier ist die Befehlszeile, die ich verwende:ffmpeg Video Stream Verzögerung bei der Wiedergabe?

ffmpeg -f dshow -video_size 320x240 -framerate 30 -i video="HD USB Camera" -vcodec libx264 -preset ultrafast -tune zerolatency -g 60 -f mpegts udp://192.168.1.100:10000 

Das Ziel für mein Strom (ein Ubuntu-Box auf dem gleichen Subnetz) läuft ffplay über:

ffplay -i udp://127.0.0.1:10000 

Dies funktioniert aber der Videostrom scheint als ob es um 8 - 10 Sekunden verspätet ist. Es ist mein Verständnis, dass das Ziel den Stream nicht anzeigen kann, bis es einen I-Frame empfängt, also habe ich versucht, einen GOP-Wert von 60 anzugeben, der alle 2 Sekunden ein I-Frame einfügen würde (@ 30 FPS).

Die Windows-Maschine, die die Transcodierung ausführt, läuft mit einem i7-3840QM @ 2,80 GHz und hat 32 GB RAM. FFmpeg scheint sehr wenig CPU zu benutzen (wie 2%), also scheint es nicht so, als wäre es CPU-gebunden. Nur als Test habe ich versucht, eine MP4-Datei aufzunehmen und keine Transcodierung durchzuführen (ffmpeg -re -i localFile.mp4 -c copy -f mpegts udp://192.168.1.100:10000), aber es dauert immer noch einige Sekunden, bis der Stream auf dem Ubuntu-System angezeigt wird.

Zu einer verwandten Anmerkung bewerte ich auch eine Testversion des Wowza Streaming Engine Servers und wenn ich meinen ffmpeg Strom zu Wowza leite, bekomme ich die gleiche 8 - 10 Sekunden Verzögerung, bevor der Wowza Testspieler anfängt, es zu spielen zurück. Wenn der Stream beginnt zu spielen, scheint es gut zu laufen (abgesehen von der Tatsache, dass alles um einige Sekunden "hinterher" ist).

Ich bin neu im Video-Streaming, so dass ich hier etwas offensichtliches verpasst habe, aber kann mir jemand sagen, was diese Verzögerung verursachen könnte oder wie ich das Problem weiter behandeln könnte? Vielen Dank!

Antwort

2

Versuchen Sie, diese Werte setzen:

analyzeduration integer (input)

angeben, wie viele Mikrosekunden werden analysiert, um die Eingabe zu sondieren. Ein höherer Wert von ermöglicht es, genauere Informationen zu erkennen, erhöht jedoch die Latenzzeit um . Es beträgt standardmäßig 5.000.000 Mikrosekunden = 5 Sekunden.

probe integer (input)

Set Sondieren Größe in Bytes, das heißt, die Größe der Daten zu analysieren Stream-Informationen zu erhalten. Ein höherer Wert ermöglicht es, mehr Informationen zu erfassen, falls sie in den Stream verteilt sind, aber die Latenz wird sich erhöhen. Muss eine Ganzzahl nicht kleiner als 32 sein. Es ist 5000000 von Standard.

FFmpeg docs

Verwandte Themen