Я использую ffmpeg для кодирования прямых трансляций для использования на сервере tvheadend.Разрывы ffmpeg и hls не работают, но я установил, что используя streamlink для чтения потока hls, затем направить его в ffmpeg.
Иногда звук имеет пропуски в прямом потоке, и с этого момента звук не синхронизируетсяМне удалось это исправить, используя aresample = async = 1.ffmpeg вставляет тишину для промежутков, и аудио остается синхронизированным.
Tvheadend не любит разрывы dts, и поток будет зависать при каждом обнаружении.Я также исправил это с помощью dts_delta_threshold 1. С этой опцией поток воспроизводится без каких-либо зависаний
Здесь моя проблема возникает, когда при использовании dts_delta_threshold 1 команда aresample больше не работает, я предполагаю, что больше нетпромежутки, чтобы он не мог вставить тишину.Я пробовал различные комбинации и упорядочение опций.
Есть ли способ применить команду aresample = async = 1, а также команду dts_delta_threshold 1 после.
Это моя текущая команда
streamlink -l warning --ringbuffer-size 64M --hls-timeout 100000000 --hls-live-restart hls://192.168.10.1/play/$1.$2.m3u8 best -O | \
ffmpeg -loglevel fatal -err_detect ignore_err \
-f mpegts -i - \
-filter_complex "eq=contrast=${3:-1.0}" \
-c:v libx264 -crf 18 -preset superfast -tune zerolatency -pix_fmt yuv420p -force_key_frames "expr:gte(t,n_forced*2)" \
-c:a aac -b:a 256k -ac 2 -af aresample=async=1 \
-metadata service_provider=$1 -metadata service_name="$1.$2" -f mpegts pipe:1
Я попытался установить порог dts_delta_threshold до и после ввода, то же самое аудио не синхронизируется, если в аудио есть промежуток.Я пытался поставить асинхронный 1 перед вводом, но это не работает либо