使用 gst-rtsp-server 发送和接收流
Sending and receiving stream using gst-rtsp-server
我目前正在开发一个遥控机器人,它可以将两个摄像头流从 Jetson Nano 发送到 PC/Android Phone/VR 耳机。
我已经能够使用 gst-rtsp-server 在机器人和 PC 之间创建一个稳定的 link 运行 此管道:
./test-launch nvarguscamerasrc sensor-id=1 ! video/x-raw(memory:NVMM) width=1920 height=1080 framerate=30/1 format=NV12 ! nvvidconv flip-method=2 ! omxh264enc iframeinterval=15 ! h264parse ! rtph264pay name=pay0 pt=96
并在 PC 上接收它使用:
gst-launch-1.0 -v rtspsrc location=rtspt://192.168.1.239:8554/test ! application/x-rtp, payload=96 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
在 PC 上,大约有大约 120 毫秒的极佳延迟,所以我认为 运行在 Android 上使用同样的东西不会有问题。使用来自 here and a modification from here 的 gstreamer 预构建二进制文件能够使用 rtspsrc
我已经成功地接收到 rtsp 流。但是这次视频“变慢了”(可能是缓冲问题,或者硬件加速?)
通过使用 rtspsrc
的 latency=150 drop-on-latency=true
参数解决了这个问题,它只保留那些具有较低延迟的帧,但正如预期的那样,输出编码图像是垃圾。
所以我的问题是:为什么 phone 和接收流的 PC 之间存在这样的差异。
似乎 gst-rtsp-stream
默认通过 tcp
发送,我试图用 gst_rtsp_media_factory_set_protocols(factory, GST_RTSP_LOWER_TRANS_UDP_MCAST)
配置但这样做我无法再接收流,即使在 PC 上相同的管道。
有没有办法强制 gst-rtsp-server
通过 udp
发送。或者有没有办法像 PC 一样快地将 phone 编码性能优化到 运行? (我有一个 Galaxy S10+,所以我想它应该可以处理)
我的目标是在 Android/VR 耳机上以最小的延迟播放清晰的视频(最好与在 PC 上一样约 120 毫秒)
rtsp 服务器使用 TCP,因为您的客户端查询要求使用 rtspt
,其中最后 t
查询 TCP 传输。仅使用 rstp
应该使用 UDP。您可以查看 rtspsrc
的 protocols
属性 了解更多详情。
完整故事在此处的评论中,并在此处继续解决方案:
我目前正在开发一个遥控机器人,它可以将两个摄像头流从 Jetson Nano 发送到 PC/Android Phone/VR 耳机。
我已经能够使用 gst-rtsp-server 在机器人和 PC 之间创建一个稳定的 link 运行 此管道:
./test-launch nvarguscamerasrc sensor-id=1 ! video/x-raw(memory:NVMM) width=1920 height=1080 framerate=30/1 format=NV12 ! nvvidconv flip-method=2 ! omxh264enc iframeinterval=15 ! h264parse ! rtph264pay name=pay0 pt=96
并在 PC 上接收它使用:
gst-launch-1.0 -v rtspsrc location=rtspt://192.168.1.239:8554/test ! application/x-rtp, payload=96 ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
在 PC 上,大约有大约 120 毫秒的极佳延迟,所以我认为 运行在 Android 上使用同样的东西不会有问题。使用来自 here and a modification from here 的 gstreamer 预构建二进制文件能够使用 rtspsrc
我已经成功地接收到 rtsp 流。但是这次视频“变慢了”(可能是缓冲问题,或者硬件加速?)
通过使用 rtspsrc
的 latency=150 drop-on-latency=true
参数解决了这个问题,它只保留那些具有较低延迟的帧,但正如预期的那样,输出编码图像是垃圾。
所以我的问题是:为什么 phone 和接收流的 PC 之间存在这样的差异。
似乎 gst-rtsp-stream
默认通过 tcp
发送,我试图用 gst_rtsp_media_factory_set_protocols(factory, GST_RTSP_LOWER_TRANS_UDP_MCAST)
配置但这样做我无法再接收流,即使在 PC 上相同的管道。
有没有办法强制 gst-rtsp-server
通过 udp
发送。或者有没有办法像 PC 一样快地将 phone 编码性能优化到 运行? (我有一个 Galaxy S10+,所以我想它应该可以处理)
我的目标是在 Android/VR 耳机上以最小的延迟播放清晰的视频(最好与在 PC 上一样约 120 毫秒)
rtsp 服务器使用 TCP,因为您的客户端查询要求使用 rtspt
,其中最后 t
查询 TCP 传输。仅使用 rstp
应该使用 UDP。您可以查看 rtspsrc
的 protocols
属性 了解更多详情。
完整故事在此处的评论中,并在此处继续解决方案: