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

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

Antworten (4)

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.

Dies funktionierte besser, als -use_wallclock_as_timestamps 1wenn Sie zwei AVI-Dateien zusammenmischen würden. Die resultierende Datei wurde perfekt mit den Untertiteldateien ( .sub& .idx) synchronisiert, die ich hatte.

das hat bei mir als Option zu ffmpeg funktioniert:-use_wallclock_as_timestamps 1

Wenn Ihre Lesegeschwindigkeit von der Framerate des Streams abweicht, ist die Ausgabewiedergabegeschwindigkeit (und die Audiosynchronisierung) falsch. Fügen Sie -revor 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.