Использование FFMPEG libs для UDP-потока mpeg2 ts задержки видео/проблем с начальным подключением

В настоящее время используется библиотека от FFPMEG для потоковой передачи некоторого видео MPEG2 TS (с кодировкой h264). Потоковая передача осуществляется через многоадресную рассылку UDP.

Проблема, с которой я сталкиваюсь в настоящее время, состоит в двух основных вещах. Существует долгое начальное время подключения/отображения видео (поток также содержит метаданные, и этот поток немедленно обнаруживается моим медиа-инструментом).

Как только видео начинает работать, все в порядке, но оно всегда задерживается из-за этого начального времени подключения.

Я стараюсь максимально приблизиться к LIVE-трансляциям.

В настоящее время используются параметры av_dict_set(&dict, "tune", "zerolatency", 0) и "profile" -> "baseline".

размер GOP = 12;

Сначала я подумал, что проблема связана с i-frame, но первоначальная задержка возникает, если gopsize равен 12 или 250 по умолчанию. хорошо с этого момента.

Согласно документации, опция с нулевой задержкой должна отправлять много i кадров, чтобы ограничить первоначальные задержки синхронизации.

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


person ccoral    schedule 16.03.2015    source источник


Ответы (1)


Поэтому, хотя я не совсем понимаю, что было не так, я, по крайней мере, решил проблему, с которой столкнулся.

Проблема возникла из-за использования av_write_interleaved_frame() по сравнению с обычным av_write_frame() (этот работает для прямой трансляции) при записи видеокадров. Мне нужно немного больше покопаться в различиях, чтобы полностью понять это, но иногда забавно, как вы выясняете проблему, с которой столкнулись, по полной прихоти после того, как несколько дней били себя по лицу.

Я могу получить довольно хорошее потоковое видео в прямом эфире с установленной опцией мелодии «zerolatency».

person ccoral    schedule 16.03.2015
comment
Что ж, чередующаяся запись пытается организовать пакеты внутри, чтобы синхронизировать их. Задержка могла быть вызвана внутренней буферизацией и переупорядочением, которые делает FFMPEG. С другой стороны, не могли бы вы обновить свой вопрос, чтобы уточнить, как вы выполняли потоковую передачу с помощью FFMPEG? Я заинтересован в том, чтобы сделать это с FFMPEG, но у меня очень-очень минимальный опыт работы с FFMPEG. - person Darksaint2014; 04.09.2015