如何解决Raspberry Pi 4B 上的 GStreamer RTSP 服务器管道
我正在尝试为我的 RaspBerry Pi 4B 上的相机设置 RTSP 服务器。我安装了 GStreamer 和 libgstrtspserver-1.0-dev(版本 1.14.4),并使用了 test-launch.c 脚本,用 gcc test-launch.c -o test-launch $(pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0)
然后我尝试使用管道
./test-launch "v4l2src ! 'video/x-raw,width=1280,height=400,framerate=20/1,format=GRAY8' \
! videoconvert ! 'video/x-raw,format=I420' ! v4l2h264enc ! 'video/x-h264,stream-format=byte-stream,\
alignment=au' ! h264parse ! rtph264pay name=pay0 pt=96"
但是当我尝试从我的另一台计算机(通过 VLC 或 OpenCV)连接到它时,我在 Raspi 上收到了 GStreamer-CRITICAL 消息(我设置了 GST_DEBUG=4
):
j@JRaspi:~/server $ ./test-launch "v4l2src device='/dev/video0' ! 'video/x-raw,format=GRAY8,framerate=20/1' ! videoconvert ! 'video/x-raw,alignment=au' ! h264parse ! rtph264pay name=pay0 pt=96"
stream ready at rtsp://127.0.0.1:8554/test
(test-launch:8246): GStreamer-CRITICAL **: 14:56:54.865: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:8246): GStreamer-CRITICAL **: 14:56:54.865: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:8246): GStreamer-CRITICAL **: 14:56:54.865: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
并且连接失败。
我可以确认
gst-launch-1.0 v4l2src ! 'video/x-raw,format=I420' ! autovideosink
对我有用(可以很好地显示相机馈送),所以我想知道我的管道背面有什么问题,或者测试启动脚本是否由于某种原因在 RaspBerry Pi 上不起作用?
我的 Jetson Nano 上有一个类似的管道,运行良好:
./test-launch "v4l2src ! video/x-raw,format=GRAY8 \
! nvvidconv ! video/x-raw(memory:NVMM),format=(string)I420 ! omxh264enc ! video/x-h264,\
stream-format=byte-stream,alignment=au ! h264parse ! rtph264pay name=pay0 pt=96"
编辑: 我做了一些进一步的测试,这条迂回的路线对我有用:
gst-launch-1.0 v4l2src ! 'video/x-raw,\
format=GRAY8' ! videoconvert ! 'video/x-raw,format=I420'\
! v4l2h264enc ! 'video/x-h264,alignment=au' \
! h264parse ! rtph264pay name=pay0 pt=96 ! rtph264depay ! h264parse \
! decodebin ! videoconvert ! autovideosink
所以我想知道测试启动和树莓派是否有问题?
编辑2:
所以我跑了G_DEBUG=fatal-criticals gdb -ex run --args test-launch "v4l2src ! 'video/x-raw,format=GRAY8' ! videoconvert ! 'video/x-raw,alignment=au' ! h264parse ! rtph264pay name=pay0 pt=96"
打印出来的:
Reading symbols from test-launch...(no debugging symbols found)...done.
Starting program: /home/joel/Arducam-Stereo-RPI/server/test-launch v4l2src\ \!\ \'video/x-raw,\ width=1280,\ height=400,\ format=GRAY8\'\ \!\ videoconvert\ \!\ \'video/x-raw,\ format=I420\'\ \!\ v4l2h264enc\ \!\ \'video/x-h264,\ stream-format=byte-stream,\ alignment=au\'\ \!\ h264parse\ \!\ rtph264pay\ name=pay0\ pt=96
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
stream ready at rtsp://127.0.0.1:8554/test
[New Thread 0xb657b3a0 (LWP 2529)]
(test-launch:2524): GStreamer-CRITICAL **: 16:46:07.769: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:2524): GStreamer-CRITICAL **: 16:46:07.787: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:2524): GStreamer-CRITICAL **: 16:46:07.788: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
[New Thread 0xb57743a0 (LWP 2530)]
(test-launch:2524): GStreamer-CRITICAL **: 16:46:27.960: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:2524): GStreamer-CRITICAL **: 16:46:27.960: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
(test-launch:2524): GStreamer-CRITICAL **: 16:46:27.960: gst_element_make_from_uri: assertion 'gst_uri_is_valid (uri)' Failed
[Thread 0xb57743a0 (LWP 2530) exited]
[Thread 0xb657b3a0 (LWP 2529) exited]
^C
Thread 1 "test-launch" received signal SIGINT,Interrupt.
__GI___poll (timeout=-1,nfds=2,fds=0x2e7e0)
--Type <RET> for more,q to quit,c to continue without paging--
at ../sysdeps/unix/sysv/linux/poll.c:29
29 ../sysdeps/unix/sysv/linux/poll.c: No such file or directory.
(gdb) bt
#0 0xb6b4dcd0 in __GI___poll (timeout=-1,fds=0x2e7e0)
at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0xb6b4dcd0 in __GI___poll (fds=0x2e7e0,timeout=-1)
at ../sysdeps/unix/sysv/linux/poll.c:26
#2 0xb6c45eb4 in () at /usr/lib/arm-linux-gnueabihf/libglib-2.0.so.0
(gdb)
所以我尝试了 sudo apt-get install --reinstall libglib2.0-0
但它没有改变任何东西
解决方法
管道中多余的单引号导致了问题。 所以一个工作管道是:
./test-launch "v4l2src ! video/x-raw,width=1280,height=400,format=GRAY8 \
! videoconvert ! video/x-raw,format=I420 ! v4l2h264enc ! video/x-h264,\
stream-format=byte-stream,alignment=au ! h264parse ! rtph264pay name=pay0 pt=96"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。