Я пытаюсь захватить и транслировать видео с 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 назад. Для чего это стоит, как только поток начинает играть, кажется, что он работает нормально (кроме того, что все «отстает» на несколько секунд).
Я новичок в потоковой передаче видео, поэтому мне может быть не что-то очевидное здесь, но может ли кто-нибудь сказать мне, что может вызвать эту задержку, или предложить, как я могу продолжить устранение проблемы? Спасибо!