使用 UDP 组播流式传输到多个设备未按预期工作

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

我通过专用 WiFi 网络将原始音频流式传输到多个设备(基于 ESP32)。我正在通过以太网将音频从笔记本电脑发送到多播地址到专用 wifi 路由器。我希望所有设备同时通过 wifi 接收音频流。

我正在尝试使用 Gstreamer 来实现此目的。例如,如果我将音频流式传输到 3 个设备,一切都很好,但是如果在启动音频流后我断开一个或 2 个设备的连接,则其余设备上的音频会变得不稳定。我不知道为什么?路由器是否正在寻找以前连接的设备并耗尽带宽?通过多播,我认为流将不间断地继续,如果有设备在那里监听,它会跳转到流上。我认为将流保留在一台设备上不会影响流向其他设备的另一流。显然我对多播流工作原理的理解是有缺陷的。我的路由器上是否有需要更改的设置?我需要一个更高级的路由器吗? 这是我目前使用的路由器。有更好的解决方案吗?我希望所有设备同时接收音频,这样我就不能使用 Icecast 之类的东西。我将不胜感激任何建议。我正在使用的 Gstreamer 管道复制如下。

gst-launch-1.0 -v jackaudiosrc connect=0 ! audioconvert ! audioresample ! audio/x-raw, rate=16000, channels=1, format=S16LE ! udpsink host=232.10.11.12 port=8000
    
wifi gstreamer esp32 audio-streaming multicast
1个回答
0
投票
音频流出现断断续续的原因是多播依赖于所有设备保持一致的连接以实现流畅的传输。当设备断开连接时,它会中断多播流,导致其余设备上的音频断断续续。为了缓解这种情况,请确保所有设备的稳定连接或考虑使用不同的流媒体方法。或者,您可以调整路由器设置来优化多播处理,但可能无法完全解决问题。

为了提高组播流的稳定性,您可以尝试调整路由器上的TTL(生存时间)值。降低 TTL 值可以防止数据包转发到无法访问的设备,从而减少网络拥塞和多播流中潜在的中断。使用以下命令将 TTL 值设置为较小的数字(例如 1):

sudo sysctl -w net.ipv4.ip_default_ttl=1
    
© www.soinside.com 2019 - 2024. All rights reserved.