ffmpeg dts_delta_threshold и aresample = async = 1 - PullRequest
0 голосов
/ 15 февраля 2019

Я использую 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 перед вводом, но это не работает либо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...