LINUX.ORG.RU

Gstreamer проигрывание видео и запись из rtsp

 , ,


0

2

Стоит Debian Jessie на VirtualBox

Почти любое видео без проблем играется таким образом:

gst-launch playbin uri=file:///mnt/videos/3.mkv
Камеры тоже почти все:
gst-launch-1.0 playbin uri=rtsp://userMY.ddns.net:554/ch0_0.h264
gst-launch-1.0 playbin uri=rtsp://admin:12345@192.168.2.239/Streaming/Channels/1?transportmode=unicast&profile=Profile_1
Хочу проиграть видео через конвеер gst-launch-1.0 filesrc location, но пока получилось только проиграть только таким образом:
gst-launch-1.0 filesrc location=3.mkv ! decodebin name=dec ! queue ! autovideosink dec. ! queue ! autoaudiosink 
а хотелось бы со всякими непонятными ffmpegcolorspace ! ffenc_h263 ! video/x-h263 - поэтому вопросы:

  • 1. Как узнать, какие кодеки вписывать для определенных видео в данном конвеере?
  • 2. Как выводить в этом конвееере на экран без использования autovideosink, учитывая что всё это на VirtualBoxe?
  • 3. Как мне сохранить запись с видео камер в любой видео формат? например, после таких строк оно ничего не записывает и ругается:
root@Jessie:/mnt/videos# gst-launch-1.0 rtspsrc location=rtsp://admin:12345@192.168.2.239/Streaming/Channels/1?transportmode=unicast&profile=Profile_1 ! rtph264depay ! mpegtsmux ! filesink location=file.mp4
[1] 4969
bash: !: command not found
root@Jessie:/mnt/videos# Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsp://admin:12345@192.168.2.239/Streaming/Channels/1?transportmode=unicast
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
Progress: (request) SETUP stream 0
Progress: (open) Opened Stream
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Progress: (request) Sending PLAY request
Progress: (request) Sending PLAY request
Progress: (request) Sent PLAY request
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2933): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc0:
streaming task paused, reason not-linked (-1)

а вот лог нормально проигрываемого mkv через gst-launch playbin:

root@Jessie:/mnt/videos# gst-launch-1.0 playbin uri=file:///mnt/videos/3.mkv
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns -1
libva error: va_getDriverName() failed with unknown libva error,driver_name=(null)
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns -1
libva error: va_getDriverName() failed with unknown libva error,driver_name=(null)
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/i386-linux-gnu/dri/vboxvideo_drv_video.so
libva info: va_openDriver() returns -1
libva info: VA-API version 0.36.0
libva info: va_getDriverName() returns -1
libva error: va_getDriverName() failed with unknown libva error,driver_name=(null)
Redistribute latency...
Got context from element 'glimagesink0': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayX11\)\ gldisplayx11-0";
libGL error: pci id for fd 17: 80ee:beef, driver (null)
libGL error: core dri or dri2 extension not found
libGL error: failed to load driver: vboxvideo
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstPulseSinkClock



Последнее исправление: Menog (всего исправлений: 1)

1. Как узнать, какие кодеки вписывать для определенных видео в данном конвеере?

Если сильно хочется, то можно узнать, для этого нужно писать приложение, использующее GStreamer API. Я бы не советовал.

Тебе нужен именно decodebin. GStreamer сам выстроит внутри нужный низкоуровневый конвейер, который обеспечит подачу данных в том виде, в котором заданные sink-и его потребят.

Andrey_Utkin ★★
()

Сделай

$ export GST_DEBUG_DUMP_DOT_DIR=/tmp/
и gst-launch будет в указанную директорию графы скидывать в формате Graphviz.

i-rinat ★★★★★
()
Ответ на: комментарий от Max-Payn

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

i-rinat ★★★★★
()

ещё вопрос

хочу тупо вывести в стрим udp снег и получить его

пишу так: Server

route add -net 239.1.0.0 netmask 255.255.0.0 dev eth0
gst-launch-1.0 videotestsrc pattern=snow ! video/x-raw,width=1280,height=720 ! rndbuffersize max=1316 min=1316 ! udpsink port=5554 host=239.1.1.1
Client
route add -net 239.1.0.0 netmask 255.255.0.0 dev eth0
gst-launch-1.0 udpsrc port=5554 host=239.1.1.1 ! decodebin ! autovideosink
на клиенте ничего не происходит

причем на том же сервера запускаю и сервер и клиент, убрав опцию host - тоже самое...

пытался проигрывать через VLC, указав udp://ip:5554 - тоже тишина...

что я делаю не так?))

Menog
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.