Gstreamer / RTSP - 创建管道以减少由于 rtpjitterbuffer 导致的延迟

skr*_*obo 3 pipeline rtp rtsp gstreamer h.264

我正在访问RTSPVIRB 360 摄像机的视频流。我可以使用以下gstreamer命令播放流:

gst-launch-1.0 -v playbin uri=rtsp://192.168.0.1/livePreviewStream?maxResolutionVertical=720\&liveStreamActive=1
Run Code Online (Sandbox Code Playgroud)

但是,流式传输存在3 秒的延迟,需要消除该延迟。上述命令的输出(由于-v)已上传至此处我还按照此问题/答案.svg中描述的方法为管道创建了一些文件。这些文件已上传至此处。我相信并代表完整的管道(多个文件是由单个管道生成的,这就是多个文件的原因)。在文件中,可以看到下面有一个.mypipeline4.svgmypipeline5.svgdot.svg.svglatency=2000rtpjitterbuffer

计划是通过手动添加组件而不是使用 来构建相同的管道playbin,然后设置 的延迟属性rtpjitterbuffer。我尝试过以下命令:

1)gst-launch-1.0 rtspsrc location=rtsp://192.168.0.1/livePreviewStream?maxResolutionVertical=720\&liveStreamActive=1 ! udpsrc ! rtpsession ! rtpssrcdemux ! rtpjitterbuffer ! rtpptdemux ! queue ! udpsink ! queue ! rtph264depay ! h264parse ! omxh264dec ! playsink

2)gst-launch-1.0 rtspsrc location=rtsp://192.168.0.1/livePreviewStream?maxResolutionVertical=720\&liveStreamActive=1 ! udpsrc ! rtpsession ! rtpssrcdemux ! rtpjitterbuffer ! rtpptdemux ! queue ! udpsink ! queue ! rtph264depay ! h264parse ! omxh264dec ! nvoverlaysink

但是,在这两种情况下,我都收到错误:WARNING: erroneous pipeline: could not link udpsink0 to queue1.如何解决此问题?另外,根据我的实验,我非常确定管道的其余部分也有错误。我该如何优化这条管道?

小智 5

首先,您不应该将任何东西连接到 GStreamer 中的接收器。接收器是线路的末端,应该只接收数据。特别是udpsink是向网络发送UDP数据包的。请参阅文档了解更多信息:

https://gstreamer.freedesktop.org/documentation/udp/udpsink.html?gi-language=c

我也在努力减少延迟,到目前为止我得到的最好的结果是:

gst-launch-1.0 rtspsrc location=rtsp://10.20.0.188:554 latency=0 buffer-mode=auto ! decodebin ! vaapisink sync=false

我有 400 毫秒的延迟,而在相机应用程序中我有 150 毫秒的延迟,我想减少它。

我希望这可以帮助你 ;)