网络电台缓冲问题

物联网 ESP32 声音的
2021-06-16 14:29:38

(希望我正在向适当的社区发表讲话)

我正在构建一个 KaRadio32 网络电台变体。

我的收音机时不时会遇到一些烦人的打嗝(可能是由于我的互联网连接不稳定):我正在实时查看我的收音机的队列状态,看看它是如何在打嗝之前清空自己的。

一些流表现很好,将队列填满了一定的百分比,然后它们就无限期地播放了。一些流表现不佳,过多地填充队列,然后停止填充它一段时间,而它完全清空并导致打嗝。

虽然这个问题确实可能是我的互联网连接或流媒体端的问题,但现在对其进行故障排除让我想知道 -如果有的话,互联网无线电如何处理与源的同步?

如果这是一个基本问题(或者我看错了),我很抱歉,但我似乎无法在任何地方找到任何正确的答案。但...

让我们考虑每秒 44100 个样本的音频流,它起源于地球另一端某人的计算机,并通过互联网到达我的收音机。原始计算机有自己的主时钟,并从中导出 44100Hz 以驱动其声卡 ADC(并反过来获取样本)。

但是,本地无线电的主时钟虽然频率接近源的主时钟,但不可能等于源的主时钟,因此,无法获得以完全相同的速度再现流所需的完全相同的 44100Hz。由于两个时钟都是自由运行的(我假设),这最终会根据频率差异导致本地队列溢出和丢失数据位,或者下溢,从而导致打嗝。

为了不发生这种情况,应该有某种机制可以根据一些平均流速度稍微调整本地播放速度/主时钟。或者,也许,执行轻微的重采样,或删除/复制样本。

我查看了 KaRadio32 源代码,目前我没有看到任何我们普通的东西 - 有一个 FIFO,它由流数据写入器线程填充(当数据到达时),并被一个软件读取解码器或 VS1053b 编解码器线程。到目前为止,我只看到对这种情况没有特殊处理,向我暗示这要么不在接收端的某个地方处理,要么根本没有处理。

1个回答

你好,我也做了个不同的版本,但我找不到收音的电台,手机或电脑可以连上ESP的AP,并打开网页,但没有电台列表,看到能否给出几个能用的电台地址?先谢谢了