本文实际需要实现功能:通过Gstreamer调用TX2板载摄像头并使用rtsp推流到上位机使用VLC验证。
本文内容:记录过程中已验证问题与现实中需要主要的事项。
媒介:gst-rtsp-server。需要该库作为服务器进行rtsp推流。
- 试错
在调试刚开始主要是依据Nidia官方手册NVIDIA Jetson Linux Driver Package Software Features进行调试。
在手册Video Streaming with GStreamer-1.0部分中,提供了两种通过 gst-launch-1.0创建pipeline的方式。
•Streaming and video rendering:
•Transmitting (from target) : CSI camera capture + video encode + RTP streaming using network sink:
gst-launch-1.0 nvarguscamerasrc ! 'video/x-raw(memory:NVMM), \
format=NV12, width=1920, height=1080' ! \
nvv4l2h264enc insert-sps-pps=true ! h264parse ! \
rtph264pay pt=96 ! udpsink host=127.0.0.1 port=8001 sync=false -e
•Receiving (on target) : Network Source + video decode + video render:
gst-launch-1.0 udpsrc address=127.0.0.1 port=8001 \
caps='application/x-rtp, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! queue ! h264parse ! nvv4l2decoder ! nv3dsink -e
•Streaming and file dump:
•Transmitting (from target) : CSI camera capture + video encode + RTP streaming using network sink:
gst-launch-1.0 nvarguscamerasrc ! \
'video/x-raw(memory:NVMM), format=NV12, width=1920, height=1080' ! \
nvv4l2h264enc insert-sps-pps=true ! h264parse ! \
rtph264pay pt=96 ! udpsink host=127.0.0.1 port=8001 sync=false -e
•Receiving (on target) : Network Source + video decode + file dump:
gst-launch-1.0 udpsrc address=127.0.0.1 port=8001 \
caps='application/x-rtp, encoding-name=(string)H264, payload=(int)96' ! \
rtph264depay ! queue ! h264parse ! nvv4l2decoder ! nvvidconv ! \
'video/x-raw, format=(string)I420' ! filesink location=test.yuv -e
这两种方式在本地自环都没有问题,但是在上位机使用VLC时无法访问该地址。
VLC端输入RTP地址后,提示Cannot assign requested address.
有明白的大佬还请指点一下。
- gst-rtsp-server下载编译
通过官方论坛了解到有gst-rtsp-server这个库。
https://forums.developer.nvidia.com/t/jetson-tx2-video-streaming/68215
github上有gst-rtsp-server开源库。但是这个库没办法像其他博主写的直接通过autogen.sh文件进行编译。
https://blog.csdn.net/weixin_42780708/article/details/106013966
参考上博文,找到gst-rtsp-server镜像源下载地址。其中1.18及以后的版本也是没办法直接编译的。本文安装的是gst-rtsp-server1.0_1.14.4.orig.tar.xz这个包的内容。
下载解压后在文件夹中找到autogen.sh文件。
在Terminal中输入
./autogen.sh
按照提示输入make进行编译。
我在第一次时出现提示缺少gtk-doc,需要运行
sudo apt-get install gtk-doc-tools
下载gtk-doc工具,完成后再进入到autogen.sh中重新make一次就可以了。
- rtsp服务器建立与板载摄像头推流
这一部分主要参考博文:
https://blog.csdn.net/zhngyue123/article/details/126362312
首先在examples文件夹中打开Termial,运行指令
gcc test-launch.c -o test $(pkg-config --cflags --libs gstreamer-rtsp-server-1.0 gstreamer-1.0)
完成后,运行./test,将板载摄像头信号推流
./test --gst-debug-level=3 "( nvarguscamerasrc ! video/x-raw(memory:NVMM),format=NV12, width=1920, height=1080 ! queue ! nvv4l2h264enc ! h264parse ! rtph264pay name=pay0 pt=96 )"
例程中推流到的地址是//127.0.0.1:8554/test。博主才疏学浅,还没有搞清楚怎么修改这个地址和端口号。有大佬请补充。
完成推流以后在本地自环测试。
gst-launch-1.0 playbin uri=rtsp://127.0.0.1:8554/test
确认没问题,再用主机进行拉流。
使用VLC选择打开网络串流:
地址rtsp://XXXXX:8554/test,其中XXX字段为TX2端的IPV4地址。
其他参考博文:
http://blog.chinaunix.net/uid-21501855-id-5846723.html
本人对Gstreamer和推流这些内容不太了解,如有谬误,还请指正。