使用 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 流。但是这次视频“变慢了”(可能是缓冲问题,或者硬件加速?)

通过使用 rtspsrclatency=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。您可以查看 rtspsrcprotocols 属性 了解更多详情。

完整故事在此处的评论中,并在此处继续解决方案: