ffmpeg libav: Любой способ установить информацию о потоке во входном формате вместо ее поиска? - PullRequest
0 голосов
/ 26 октября 2019

Я пишу проигрыватель для потока RTMP, используя API ffmpeg. Я знаю, что обычный способ получить информацию о потоке во входном формате - avformat_find_stream_info. И это работает. Однако, поскольку это RTMP, ему требуется много времени для сканирования достаточного количества потока, чтобы получить информацию. Я играл с max_analyze_duration и probesize, и это немного лучше, но загрузка все равно занимает 10-15 секунд. Это слишком долго для моего приложения.

Но я тот, кто создает поток на другом конце, поэтому я точно знаю, что в нем. Похоже, для меня было бы более разумно сообщить формат ввода, что такое информация о потоке, а не просить ее искать. Но я не могу найти никаких примеров этого, и мои попытки использовать avformat_new_stream с форматом ввода не работают.

Кто-нибудь знает, возможно ли это? И если да, не могли бы вы указать мне, как?

Спасибо!

1 Ответ

0 голосов
/ 26 октября 2019

Это то, что известно как XY проблема

Да, вы можете подменить заголовок последовательности (при условии h.264 / aac). Но это не достигнет того, что вы хотите. Происходит то, что ваш RTMP-сервер (рефлектор) ест первый GOP . Таким образом, даже если анализ был выполнен быстрее, вы все равно должны сначала дождаться первого ключевого видеокадра.

Вам необходимо настроить сервер RTMP для отправки полной GOP (в nginx + rtmp значение равно wait_key on)

...