Я использую приведенную ниже команду для передачи видео на сервер Wowza, поскольку мы отправляем необработанное видео H.264, пакет RTP не имеет метки времени, и мы можем наблюдать проблему синхронизации аудио-видео при воспроизведении видео с помощью VLC Media Player. При выполнении команды FFmpeg появляется предупреждение, отображаемое как
[rtsp @ 0xb754bda0] Временные метки не установлены в пакете для потока 0. Это устарело и перестанет работать в будущем. Исправьте свой код, чтобы правильно установить метки времени
Есть ли в FFmpeg какая-либо опция для добавления метки времени в пакет RTP и передачи видео и аудио?
$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
Обычное решение для этой ситуации:-fflags +genpts
Это должно устранить предупреждение, но нет гарантии, что ваши проблемы с синхронизацией будут решены.
это сработало для меня как вариант для ffmpeg:-use_wallclock_as_timestamps 1
-re
перед видео и аудио входом, чтобы избежать этого.Эта ошибка также может быть устранена в некоторых ситуациях (исходные файлы VFR с необычной временной базой) с помощью-vsync 0 -enc_time_base -1
В качестве входной опции -r
игнорируйте [s] любые временные метки [...] и вместо этого генерируйте [s] временные метки, предполагая постоянную частоту кадров fps .
ffmpeg -r 25 -i "udp://...
Источник: ffmpeg Документация: Параметры видео: -r
Это был единственный вариант, который мне подошел.
Эндрю Билз
-use_wallclock_as_timestamps 1
при объединении пары avi-файлов. Полученный файл идеально синхронизировался с файлами субтитров (.sub
&.idx
), которые у меня были.