Я использую gstreamer для потоковой передачи через пользовательскую AppSink, которая имитирует UdpSink. Мы делаем это таким образом, чтобы включить метаданные для прослушивания других портов. Плюс, сток UdpSink не работает. Как бы то ни было, видео успешно транслировалось, но пакеты UDP, похоже, упакованы неправильно. Мне интересно, если я пропустил какой-то шаг.

Вот мой конвейер отправки:

filesrc (mpeg TS file) ! displayQueue ! streamTee ! tsdemux ! decoder ! videosink

streamTee ! sendQueue ! udpSink (our custom one)

принимающая сторона:

UdpSrc (custom) ! queue ! mpegtsdemux ! queue ! (mpegdecode || h264decode) ! ... ! videosink

Потоковые работы. Но это кажется очень хрупким. Иногда это просто останавливается. Есть много артефактов.

Итак, я попробовал VLC. Я настроил его для потоковой передачи по UDP одноадресной. Работает отлично. Я заметил, что VLC отправляет видео иначе, чем мой конвейер. Я использовал Wireshark для анализа пакетов:

Используемые протоколы: VLC: IP:UDP:MP2T (и пакеты PET , PMT и все другие виды, связанные с TS)

Мой: IP:UDP:Data

Кажется, что конвейер, который я использую, просто отправляет необработанное видео по UDP без какой-либо коррекции ошибок. Что мне не хватает? Используемые видеоролики представляют собой файлы .mpg формате h264 или mpeg.

Я использую gstreamer-java для программирования пользовательских элементов UdpSink и UdpSrc, но не могу использовать gstreamer в консоли для тестирования, поскольку стандартный плагин UdpSink не работает. Я попробовал простой конвейер в виртуальной машине Linux и получил пакет, похожий на VLC:

gst-launch-0.10 -v videotestsrc ! mpeg2enc ! mpegtsmux ! udpsink host=192.168.2.100 port=1234

1 ответ1

1

Это всего лишь мысль, я не очень знаком с gstreamer, поэтому я не знаю, как работает filesrc , но я предполагаю, что он не понимает MPEG-TS. MPEG-TS требует, чтобы пакеты входили на определенных границах (обычно 188 байтов). Я бы попробовал поставить вашу тройку после демукса , а затем добавить mpegtsmux перед вашей udpSink .

Я понимаю, что это проделает больше работы, чем действительно необходимо (demux просто для мультиплексирования), но это обеспечит правильное выравнивание пакетов. Если это работает, и вам нужно устранить накладные расходы, вам, возможно, придется поискать более разумный источник файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .