如何通过 wifi 修复断断续续的 ffmpeg RTP 流?

How can I fix choppy ffmpeg RTP streaming over wifi?

我有一个 Raspberry Pi,连接了 USB 麦克风和 WiFi 加密狗。

我正在尝试仅从 Pi 流式传输音频,目的是通过 wifi 将流式传输到使用 VLCKit 的自定义 iOS 移动应用程序。我在 Pi 上使用 ffmpeg,因为我需要这个项目的延迟相当低(<2s),并且使用 Icecast/Darkice 给出了大约 15s 的延迟。

Pi上执行的代码是:

ffmpeg -f alsa -i plughw:1,0 -acodec libmp3lame -ab 128k -ac 1 -ar 44100  -f rtp rtp://234.5.5.5:1234

在 Pi 端,我有一个设备不断地向 USB 麦克风播放(圣诞节!)音乐以进行测试。 Pi 仅通过 WiFi 连接,而非以太网。

为了测试接收流,我正在使用 VLC(在 Macbook/iPhone 上)。

当 Mac 通过以太网连接时,流工作正常,如您在此处所见:

https://goo.gl/photos/HZgNh7z4HgaqHBaP7

但是,当 Mac 通过 WiFi 连接时,数据流不稳定,如您在此处所见:

https://goo.gl/photos/qjAVH6djqS9Jbvmh6

您还可以看到从 Mac 到 Pi 的 ping 跟踪,以及 VLC 统计数据。如您所见,这些与波动之间似乎没有关联。

我试过 VLC iOS 应用程序,断断续续与 WiFi 上的 Mac 相同。

我怎样才能 decrease/remove 这种斩波,即使这样做会稍微增加延迟?

RTP 多播是一种基于 UDP 的协议。特别是 UDP 的多播模式通常受到 WiFi 路由器的限制(关于带宽、数据包数量等),因此简单的多播发现协议(如 Bonjour、UPnP、SAP 等)通常使用 WiFi 可以正常工作,但编码多媒体内容的数据传输是如此(它适用于我的家庭路由器,但在工作中失败等)。 因此,我建议您不要使用组播 UDP 协议在 WiFi 上进行流式传输,而是使用单播 UDP 或基于 TCP 的方法。