我正在尝试使用linux工具模拟UDP流中的延迟- netem。我的想法是模拟网络延迟,数据包丢失等,因为该应用程序将通过WiFi使用。
我使用以下命令来引起1000ms
的延迟(在iMX6服务器端):
tc qdisc add dev eth0 root netem delay 1000ms
现在,当我在通过LAN连接的2台设备之间ping时,观察到此延迟 电缆。我的设备是iMX6(服务器)和Ubuntu PC(客户端)
我正在将视频数据包从iMX6传输到已配置的PC
iMX6的eth0端口的1000ms
延迟。
gst-launch-1.0 -v imxv4l2videosrc device=/dev/video1 ! imxvpuenc_h264
bitrate=500 ! h264parse ! rtph264pay ! udpsink host=192.168.1.11 port=xxxx
在Ubuntu PC上:
我为udp源配置了10ms
的超时时间:
udpsrc port = xxxx timeout=10000000 ! rtph264depay ! h264parse ! avdec_h264
! autovideosink
我在总线上为元素udpsrc
安装了消息回调,该消息回调在检测到超时消息时驱动回调。伪代码(Python-GStreamer)如下:
bus = self.pipeline.get_bus()
bus.connect('message::element',self.on_timeout)
def on_timeout(self,bus,msg)
strct = msg.get_structure()
if strct.has_name("GstUDPSrcTimeout"):
print("udp source timeout detected")
当我通过UDP从iMX6向PC传输视频数据时,在PC渲染的视频中观察到1000ms
的延迟,并且渲染的视频是连续的。当我完全停止从iMX6发送数据包时,可以看到发生了超时并调用了回调。
因此,在根本没有数据包的情况下,而不是在接收数据包有延迟的情况下,称为超时。
我期望延迟接收数据包时每个100ms
都会收到通知,即imx6板仅每个1000ms
发送视频数据包,正如上面命令中使用netem
配置的那样
我知道现在UDP上有连续的数据包流,因此超时功能可能无法正常工作。 有没有一种方法可以使UDP源工作,而不是每100毫秒接收一次数据包?
总结观察结果:
当iMX6完全停止发送udp数据包时,即当我在imx6一侧使用ctrl + c退出管道时,将调用超时。
当iMX6发送延迟的udp数据包时,不会调用超时。
我的进一步测试将包括数据包丢失,延迟,抖动等,在这种情况下,每隔100ms
或某些X ms
都没有接收到数据包,我希望调用回调函数。
有人在这个问题上有什么建议吗?