Я использую 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 без исправления ошибок. Что мне здесь не хватает? Используемые видео h264 или mpeg кодируются .mpg
файлы.
Я использую gstreamer-java для программирования пользовательских элементов UdpSink и UdpSrc, но не могу использовать gstreamer в консоли для тестирования со склада udpsink плагин сломан. Я попробовал простой конвейер в виртуальной машине Linux и получил такую же кучу пакетов, как VLC:
gst-launch-0.10 -v videotestsrc ! mpeg2enc ! mpegtsmux ! udpsink host=192.168.2.100 port=1234