使用队列修复低延迟 rtp 流中的数据包大小

问题描述 投票:0回答:1

我正在尝试流式传输编码为 h265 的 v4l2src 源,并打开低延迟模式。 以下是我使用的 gstreamer 命令。

 gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=60/1 ! omxh265enc target-bitrate=2000 control-rate=low-latency num-slices=15 periodicity-idr=10 skip-frame=false ! h265parse ! queue min-threshold-bytes=200 ! rtph265pay mtu=200 ! udpsink host=192.168.1.16 port=5004 sync=false buffer-size=200 blocksize=200

我正在尝试按照here的建议实现一个队列来传输固定长度的数据包。但是,我仍然可以在 Wireshark 中看到不同大小的数据包。 rtph265pay mtu=200 设置流的上限,但数据包的大小各不相同。我愿意牺牲一点延迟来实现恒定的数据包大小。

为了在流中获得恒定的数据包大小,应该修改什么?

我尝试更改管道中的队列位置。还尝试使用 rtph265pay 的属性 min-ptime 来实现恒定的数据包大小。

rtp xilinx gstreamer-1.0
1个回答
0
投票

min-ptime的定义https://gstreamer.freedesktop.org/documentation/rtplib/gstrtpbasepayload.html?gi-language=c#:~:text=Minimum%20duration%20of%20the%20packet%20data%20in%20ns %20(可以%27t%20go%20以上%20MTU)

要在流中实现恒定的数据包大小,您可以调整“rtph265pay”元素的“min-ptime”属性。

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=60/1 ! omxh265enc target-bitrate=2000 control-rate=low-latency num-slices=15 periodicity-idr=10 skip-frame=false ! h265parse ! queue min-threshold-bytes=200 ! rtph265pay mtu=200 min-ptime=20 ! udpsink host=192.168.1.16 port=5004 sync=false buffer-size=200 blocksize=200

您可以调整“min-ptime”的值(以毫秒为单位)来控制分包时间,并有可能在流中实现更一致的数据包大小。

© www.soinside.com 2019 - 2024. All rights reserved.