ffmpeg лагает при потоковой передаче видео+аудио с RPi Zero W с Logitech C920

ffmpeg лагает при потоковой передаче видео+аудио с RPi Zero W с Logitech C920

Я пытаюсь настроить радионяню с 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

Связанный контент