2017-02-22 56 views
0

Я пытаюсь захватить и транслировать видео с 5-мегапиксельной USB-камеры, используя ffmpeg 3.2.2 в Windows. Вот командная строка, что я использую:Задержка видеопотока ffmpeg при воспроизведении?

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 

Адресат для моего потока (коробку Ubuntu на одной и той же подсети) работает ffplay через:

ffplay -i udp://127.0.0.1:10000 

Это работает, но видеопоток кажется как это задерживается на 8 - 10 секунд. Я понимаю, что пункт назначения не может начать показ потока до тех пор, пока он не получит I-кадр, поэтому я попытался указать значение GOP 60, полагая, что это приведет к тому, что I-кадр будет вставлен каждые 2 секунды (@ 30 FPS).

Windows-машина, которая выполняет транскодирование, работает на i7-3840QM @ 2,80 ГГц и имеет 32 ГБ оперативной памяти. Похоже, что FFmpeg использует очень небольшой процессор (например, 2%), поэтому он не выглядит так, как будто он связан с процессором. Так же, как тест, я попытался проглотить файл MP4 и не выполнять транскодирование (ffmpeg -re -i localFile.mp4 -c copy -f mpegts udp://192.168.1.100:10000), но все еще занимает несколько секунд, прежде чем поток будет отображаться в системе Ubuntu.

В соответствующей заметке я также оцениваю пробную версию сервера Wowza Streaming Engine, и когда я направляю поток ffmpeg в Wowza, я получаю ту же самую задержка в 8-10 секунд, прежде чем начнет играть Wowza test player назад. Для чего это стоит, как только поток начинает играть, кажется, что он работает нормально (кроме того, что все «отстает» на несколько секунд).

Я новичок в потоковой передаче видео, поэтому мне может быть не что-то очевидное здесь, но может ли кто-нибудь сказать мне, что может вызвать эту задержку, или предложить, как я могу продолжить устранение проблемы? Спасибо!

ответ

2

Попробуйте установить эти значения:

analyzeduration целое число (вход)

Указать, сколько микросекунд анализируются, чтобы исследовать входные данные. A более высокое значение позволит обнаружить более точную информацию, но будет увеличить задержку. По умолчанию оно составляет 5 000 000 микросекунд = 5 секунд.

probesize целое число (вход)

Набор зондирующего размер в байтах, то есть размер данных для анализа, чтобы получить информацию потока. Более высокое значение позволит обнаруживать больше информации в случае ее рассеивания в поток, но будет увеличиваться задержка . Должно быть целое число не менее 32. Это 5000000 на по умолчанию.

FFmpeg docs