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!