我目前正在研发一个遥控机器人,它将两个摄像头流从Jetson发送到PC/Android手机/VR耳机。
我已经能够使用运行这条管道的gst-rtsp服务器在机器人和PC之间创建一个稳定的链接:
./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‘s,所以我想在Android上运行同样的东西不会有问题。通过使用这里的gstreamer预构建二进制文件和这里的修改使其能够使用rtspsrc,我成功地接收了rtsp流。但这一次,视频“慢下来”(可能是一些缓冲问题,或者HW加速?)
通过使用latency=150 drop-on-latency=true的rtspsrc参数来解决这个问题,它只保持那些帧具有较低的延迟,但正如预期的那样,输出编码的图像是垃圾。
所以我的问题是:为什么手机和接收数据流的个人电脑有这么大的区别?
gst-rtsp-stream似乎默认通过tcp发送,而我试图使用gst_rtsp_media_factory_set_protocols(factory, GST_RTSP_LOWER_TRANS_UDP_MCAST)进行配置,但这样做,即使在具有相同管道的PC上,也无法接收流。
有没有办法强迫gst-rtsp-server通过udp发送。还是有一种方法可以优化手机的编码性能,以达到PC机运行的速度?(我有一个GalaxyS10+,所以我想它应该能够处理这个问题)
我的目标是在Android/VR耳机上制作一个清晰的视频,延迟最小(最好与PC相同~120 as )。
发布于 2022-02-16 20:31:49
rtsp服务器使用TCP,因为您的客户端查询使用的是rtspt,其中最后一次t查询请求TCP传输。仅仅使用rstp就应该使用UDP。有关更多细节,您可以查看rtspsrc的rtspsrc属性。
完整的故事在这里的评论中,并继续在这里解决:Gstreamer HW加速H.264编码
https://stackoverflow.com/questions/71067973
复制相似问题