#ffmpeg #streaming #live-streaming #low-latency #mpv
#ffmpeg #потоковая передача #прямая трансляция #низкая задержка #mpv
Вопрос:
Я использую ffmpeg и mpv для потоковой передачи аудио / видео между двумя хостами. Один из хостов отправляет поток с помощью ffmpeg:
ffmpeg -f pulse
-thread_queue_size 0
-i audioInput
-f video4linux2
-thread_queue_size 0
-standard PAL
-i videoInput
-vcodec mpeg4
-r 10
-s 176x144
-maxrate 256K
-acodec pcm_s16le
-ar 8000
-b:a 32k
-af aresample=async=1000
-f rtsp
-rtsp_transport tcp
url
и второй хост получает mpv:
mpv url --rtsp-transport=tcp
--profile=low-latency
--demuxer-lavf-o=rtsp_flags=listen
--no-cache
--autosync=30
--no-demuxer-thread
--demuxer-lavf-analyzeduration=0
--demuxer-lavf-probesize=32
Я перепробовал множество опций и комбинаций, чтобы максимально уменьшить задержку. Вышеуказанные команды работают хорошо, задержка при запуске составляет < 1 с. К сожалению, иногда задержка появляется во время потоковой передачи, и она может даже увеличиваться со временем. Моя цель — обеспечить, чтобы задержка была более или менее постоянной (близкой к 1 с), и если появится некоторая задержка, задержанные кадры будут отброшены (даже если это повлияет на качество аудио или видео).
Как заставить ffmpeg / mpv отбрасывать кадры, которые задерживаются, например, более 1 секунды?
Комментарии:
1. Я абсолютно не эксперт в этом, но я просто не уверен, что вы используете протокол tcp. Afaik переключение на udp может очень помочь, поскольку задержки вполне могут исходить от отправителя, ожидающего пакетов подтверждения, которые являются частью протокола tcp и которые информируют отправителя о сообщении, что оно прибыло. udp не ожидает этих подтверждений.
2. @olidem спасибо, вы правы, это был один из вариантов, которые я уже тестировал. К сожалению, при использовании udp потери пакетов слишком высоки, а качество видео и звука неприемлемо.