
Я пытаюсь настроить радионяню с Raspberry Pi Zero и веб-камерой Logitech C920. Она работает с VLC (cvlc), но слишком сильно тормозит и со временем становится хуже.
Итак, я играюсь с ffmpeg и получаю некоторые лучшие результаты. Вот что я сделал на данный момент.
Сначала я настроил веб-камеру на вывод h264 1080p в исходном виде (Pi Zero W не может себе позволить выполнять транскодирование).
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
Теперь, если я транслирую аудио только с помощью
ffmpeg \
-f alsa \
-i hw:1,0 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > audio.sdp
Работает отлично, задержка составляет около 1 секунды (вполне приемлемо).
Если я транслирую видео только с помощью
ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-an \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 > video.sdp
Тот же результат, очень небольшая задержка (по какой-то причине первый -vcodec необходим, чтобы заставить веб-камеру выводить h264).
Однако, когда я транслирую оба с
ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-f alsa \
-i hw:1,0 \
-an \
-preset ultrafast \
-tune zerolatency \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > both.sdp
Задержка увеличивается до ~10 секунд, а аудио и видео рассинхронизированы. Кто-нибудь знает почему?
Я пробовал UDP и TCP вместо RTP, но тогда задержка увеличивается.всегдавысокий, даже при использовании только аудио/видео.
Любые предложения будут высоко оценены.
PS На стороне клиента (MacOS) я получаю с помощью
ffplay -protocol_whitelist file,rtp,udp -i file.sdp