Вопрос или проблема
Я передаю RAW-видео с помощью gstreamer следующим образом:
gst-launch-1.0 -v videotestsrc ! rtpvrawpay ! udpsink host="127.0.0.1" port="5000"
Это выводит следующие заголовки:
caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)BT601-5, payload=(int)96, ssrc=(uint)1103043224, timestamp-offset=(uint)1948293153, seqnum-offset=(uint)27904
Я могу просматривать этот поток с помощью gstreamer, используя:
gst-launch-1.0 udpsrc port="5000" caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)320, height=(string)240, colorimetry=(string)BT601-5, payload=(int)96, ssrc=(uint)1103043224, timestamp-offset=(uint)1948293153, seqnum-offset=(uint)27904" ! rtpvrawdepay ! videoconvert ! queue ! xvimagesink sync=false
Используя VLC, я создал файл SDL:
v=0
c=IN IP4 127.0.0.1
m=video 5000 RTP/AVP 96
a=rtpmap:96 RAW/90000
a=fmtp:96 media=video; clock-rate=90000; encoding-name=RAW
Но VLC выдает ошибку:
core input error: no suitable demux module for `file/any:///home/.../settings.sdp'
Как я могу заставить VLC принимать RAW поток?
Очевидно, VLC не поддерживает сырое видео через RTP, смотрите https://forum.videolan.org/viewtopic.php?t=145855 (довольно недавно) и https://forum.videolan.org/viewtopic.php?t=45 (старше).
Ответ или решение
Проблема с потоковой передачей RAW видео и VLC
Вас интересует, как правильно настроить VLC для приема потока RAW видео, передаваемого через GStreamer. Вы уже провели несколько экспериментов с использованием GStreamer и создали файл SDL для VLC, но столкнулись с ошибкой. Давайте разберемся в возникшей проблеме и предложим возможные пути решения.
Понимание ошибки
Ошибка core input error: no suitable demux module for 'file/any:///home/.../settings.sdp'
указывает на то, что VLC не может найти подходящий модуль демультиплексора для обработки файла SDP. В этом случае проблема заключается не только в самом файле, но также в том, что VLC не поддерживает передачу нативного формата RAW видео через RTP.
Дополнительные ссылки на форумы, которые вы предоставили, подтверждают, что в последние годы поддержка RAW видео в VLC по RTP является весьма ограниченной.
Как решить проблему
1. Использование сжатия видео:
Поскольку VLC имеет ограничения в поддержке RAW видео по RTP, лучшим решением будет использование сжатого формата видео. Вы можете использовать кодеки, такие как H.264 или H.265, которые поддерживаются VLC и могут передавать видеоэффективно по сети. Пример реализации сжимаемого видео в GStreamer:
gst-launch-1.0 -v videotestsrc ! x264enc ! video/x-h264,profile=baseline,width=320,height=240 ! h264parse ! rtph264pay ! udpsink host="127.0.0.1" port="5000"
2. Обновление конфигурации SDL:
Если вы все же хотите использовать RAW видео, возможно, вам потребуется обновить конфигурацию вашего файла SDL, чтобы он соответствовал спецификациям и настройкам, поддерживаемым VLC. Однако важно понимать, что даже после этого вы все равно можете столкнуться с проблемами из-за отсутствия поддержки в VLC.
3. Использование другого проигрывателя:
Как альтернатива VLC, вы можете рассмотреть использование других видеопроигрывателей, поддерживающих RAW видео по RTP. Например, FFplay (часть пакета FFmpeg) может предоставить решение для вашей задачи. Для тестирования вы можете использовать:
ffplay -protocol_whitelist file,udp,rtp -i settings.sdp
Заключение
Хотя проблема с поддержкой RAW видео в VLC является значительным ограничением, замена формата на более широко поддерживаемый кодек или использование альтернативного программного обеспечения для воспроизведения может помочь вам добиться желаемых результатов. Если ваши задачи требуют потоковой передачи RAW видео, возможно, стоит рассмотреть возможность работы с GStreamer для последующего анализа или использования других инструментов, поддерживающих данный формат.