Ich verwende den folgenden Befehl, um das Video auf den Wowza-Server zu übertragen, da wir H.264-Rohvideos übertragen, das RTP-Paket keinen Zeitstempel hat und wir beim Abspielen von Videos mit VLC Media Player ein Problem mit der Audio-Video-Synchronisierung beobachten konnten. Beim Ausführen des FFmpeg-Befehls wird eine Warnung als angezeigt
[rtsp @ 0xb754bda0] Zeitstempel werden in einem Paket für Stream 0 nicht gesetzt. Dies ist veraltet und wird in Zukunft nicht mehr funktionieren. Korrigieren Sie Ihren Code, um die Zeitstempel richtig einzustellen
IST in FFmpeg eine Option verfügbar, um einen Zeitstempel in das RTP-Paket einzufügen und Video und Audio zu übertragen?
$ffmpeg -f h264 -i /tmp/enc_sd_stream.h264 -f aac -i /tmp/aud_rec_stream -acodec copy -vcodec copy -r 23 -f rtsp
rtsp://shafi:shafi@192.168.1.135:1935/live/myStream
Input #0, h264, from '/tmp/enc_sd_stream.h264':
Duration: N/A, bitrate: N/A
Stream #0:0: Video: h264 (Baseline), yuv420p, 720x576, 25 fps, 25 tbr, 1200k tbn, 50 tbc
Input #1, aac, from '/tmp/aud_rec_stream':
Duration: N/A, bitrate: 57 kb/s
Stream #1:0: Audio: aac (LC), 32000 Hz, mono, fltp, 57 kb/s
[udp @ 0xb7553290] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 0xb7553320] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 0xb754c520] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
[udp @ 0xb758d670] 'circular_buffer_size' option was set but it is not supported on this build (pthread support is required)
Output #0, rtsp, to 'rtsp://shafi:shafi@192.168.1.135:1935/live/myStream':
Metadata:
encoder : Lavf57.25.100
Stream #0:0: Video: h264, yuv420p, 720x576, q=2-31, 25 fps, 25 tbr, 90k tbn, 15 tbc
Stream #0:1: Audio: aac (LC), 32000 Hz, mono, 57 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[h264 @ 0xb752e2b0] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
[rtsp @ 0xb754bda0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[aac @ 0xb75f7880] Thread message queue blocking; consider raising the thread_queue_size option (current value: 8)
frame=10213 fps= 14 q=-1.0 Lsize=N/A time=00:06:48.80 bitrate=N/A speed=0.574x
Die übliche Lösung für diese Situation:-fflags +genpts
Es sollte die Warnung beseitigen, aber es gibt keine Garantie dafür, dass Ihre Synchronisierungsprobleme gelöst werden.
das hat bei mir als Option zu ffmpeg funktioniert:-use_wallclock_as_timestamps 1
-re
vor der Video- und Audioeingabe hinzu, um dies zu vermeiden.Auch dieser Fehler kann in einigen Situationen (VFR-Quelldateien mit ungewöhnlichen Zeitbasen) durch die Verwendung von behoben werden-vsync 0 -enc_time_base -1
Als Eingabeoption -r
ignorieren Sie alle Zeitstempel [...] und erzeugen stattdessen Zeitstempel unter der Annahme einer konstanten Bildrate fps .
ffmpeg -r 25 -i "udp://...
Quelle: ffmpeg Dokumentation: Videooptionen: -r
Dies war die einzige Option, die für mich funktioniert hat.
Andreas Beal
-use_wallclock_as_timestamps 1
wenn Sie zwei AVI-Dateien zusammenmischen würden. Die resultierende Datei wurde perfekt mit den Untertiteldateien (.sub
&.idx
) synchronisiert, die ich hatte.