2016-09-07 6 views
0

Я пытаюсь получить поток H264 в реальном времени с беспроводной камеры с использованием RTSP. IP-адрес камеры 192.168.150.1 и не требует аутентификации.Rtsp h264 отсутствует плагин

Поскольку я разрабатываю под окнами, я установил Gstreamer 1.0 - 1.8.3, полную установку, со всем плагином и всем, что было выбрано в процессе установки.

При попытке трубопровода

gst-launch-1.0 rtspsrc location="rtsp://192.168.150.1" latency=100 ! rtph264depay ! avdec_h264 ! autovideosink 

Я получаю этот выход:

Setting pipeline to PAUSED ... 
Pipeline is live and does not need PREROLL ... 
Progress: (open) Opening Stream 
Progress: (connect) Connecting to rtsp://192.168.150.1 
Progress: (open) Retrieving server options 
Progress: (open) Retrieving media info 
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: No supported stream was found. You might need to allow more transport protocols or may otherwise be missing the right GStreamer RTSP extension plugin. 
Additional debug info: 
gstrtspsrc.c(6421): gst_rtspsrc_setup_streams(): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0 
ERROR: pipeline doesn't want to preroll. 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ... 

Я также попытался следующую команду:

gst-play-1.0 rtsp://192.168.150.1 

получать этот вывод:

Interactive keyboard handling in terminal not available. 
Now playing rtsp://192.168.150.1 
Pipeline is live. 
ERROR Your GStreamer installation is missing a plug-in. for rtsp://192.168.150.1 
ERROR debug information: gsturidecodebin.c(1006): no_more_pads_full(): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0: 
no suitable plugins found: 
gstrtspsrc.c(6421): gst_rtspsrc_setup_streams(): /GstPlayBin:playbin/GstURIDecodeBin:uridecodebin0/GstRTSPSrc:source 
Reached end of play list. 

Когда я пытаюсь использовать тот же URL-адрес (rtsp: //192.168.150.1) в VLC, я вижу поток. Так что я думаю, что я пропускаю «правильный GStreamer RTSP расширение плагин»

Выход inspect-1.0 | grep 264 является:

File STDIN: 
x264: x264enc: x264enc 
videoparsersbad: h264parse: H.264 parser 
typefindfunctions: video/x-h264: h264, x264, 264 
rtp: rtph264depay: RTP H264 depayloader 
rtp: rtph264pay: RTP H264 payloader 
openh264: openh264dec: OpenH264 video decoder 
openh264: openh264enc: OpenH264 video encoder 
libav: avdec_h264: libav H.264/AVC/MPEG-4 AVC/MPEG-4 part 10 decoder 
libav: avmux_ipod: libav iPod H.264 MP4 (MPEG-4 Part 14) muxer 

Я также попытался с помощью FFmpeg, и я могу посмотреть видео, но я предпочитаю использовать Gstreamer, потому что я собираюсь использовать ту же конфигурацию (камера, конвейер, библиотека gstreamer ...) на устройстве Android, и, на мой взгляд, Gstreamer, кажется, лучший выбор.

От FFmpeg я получил эту информацию о потоке

Stream #0:0: Video: h264 (Constrained Baseline), yuv420p, 640x352, 29.92 tbr, 90k tbn, 180k tbc 

Кто-нибудь есть какие-то советы, чтобы разобраться эту вещь? Какой плагин мне не хватает? И как я могу добавить в мою установку?

Edit: Выход gst-launch-1.0.exe -v playbin uri=rtsp://192.168.150.1

Setting pipeline to PAUSED ... 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-size = -1 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-duration = -1 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: use-buffering = false 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: download = false 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: uri = rtsp://192.168.150.1 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: connection-speed = 0 
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: source = "\(GstRTSPSrc\)\ source" 
Pipeline is live and does not need PREROLL ... 
Progress: (open) Opening Stream 
Progress: (connect) Connecting to rtsp://192.168.150.1 
Progress: (open) Retrieving server options 
Progress: (open) Retrieving media info 
ERROR: from element /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: Your GStreamer installation is missing a plug-in. 
Additional debug info: 
gsturidecodebin.c(1006): no_more_pads_full(): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: 
no suitable plugins found: 
gstrtspsrc.c(6421): gst_rtspsrc_setup_streams(): /GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstRTSPSrc:source 
ERROR: pipeline doesn't want to preroll. 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ... 
+0

Вы можете попробовать gst-inspect-1.0 rtspsrc - что это говорит? –

+0

@SamerTufail Он печатает всю «документацию» для _rtspsrc_ – Danidan

+0

, что означает, что у вас есть необходимый плагин rtspsrc, можете ли вы попробовать gst-launch-1.0 -v playbin2 uri = rtsp: //192.168.150.1 - если это не играет роль являются сообщениями, создаваемыми подробным –

ответ

0

Я считаю, что это ограничение GStreamer, что не разделяет VLC и FFmpeg. У меня такая же ситуация, когда у меня есть три разные камеры RTSP, две из которых отлично работают с GStreamer, а другая - нет. Все три отлично работают с VLC и ffmpeg.

Я использовал Wireshark для просмотра необработанного протокола RTSP и обнаружил, что две камеры, которые работают с GStreamer, включают в себя поле параметров параметров sprop-parameter, в то время как тот, который не работает, не имеет этого поля.

Информация, закодированная в наборах параметров sprop (данные SPS и PPS), обычно присутствует в потоке RTP, который поступает с камеры. Видимо, VLC и ffmpeg достаточно умен, чтобы забрать это, но GStreamer - нет.

Я попытался вручную вставить данные набора параметров sprop-параметров, используя параметр командной строки caps, но не был выполнен.

0

У меня была такая же проблема с GStreamer/1.8.3.

И причина в том, что моя камера не предоставила атрибут "Control URL" в своих описаниях сеансов, в то время как GStreamer недостаточно умен, чтобы в этом случае вернуться к базовому URL-адресу (как это делают другие игроки).

Итак, я побежал следующую команду, чтобы получить подробные журналы из GStreamer:

gst-play-1.0 rtsp://camera_ip:port/ --gst-debug-level=9 --gst-debug-no-color &> GSTREAMER_LOGS.txt 

В журналах я нашел эту строку:

DEBUG rtspsrc gstrtspsrc.c:6109:gst_rtspsrc_setup_streams:<source> skipping stream 0x7f01b402c140, no setup 

Затем, глядя в текущий gstrtspsrc.c код из GST Kurento в -plugins-good bundle, я обнаружил, что ошибка «пропуская поток ..., без установки» происходит только тогда, когда stream->conninfo.location == NULL. И это, как я уже сказал, произошло потому, что моя камера не предоставила атрибут «Контрольный URL» в SDP. Добавление следующей строки в моей камере SDP описания сеанса решена проблема для меня:

a=control:* 

Но, как правило, это, вероятно, должно быть исправлено в GStreamer коде.