我正在构建一个通过 udp 在线流式传输实时音频的应用程序,我希望最大限度地减少延迟。音频以其生成的形式发送,这意味着生成一秒钟的音频需要一秒钟,它不能以比音频速率更快的速度发送。
我最初的想法是发送压缩音频的小数据包,以便客户端可以尽快开始播放。使用 Opus 编解码器,我应该能够发送小至 5 毫秒的音频数据包(最小为 2.5 毫秒),这意味着用户可以很快开始播放,比如说在发送了 2 个这样的数据包之后。
然而,当使用如此小的数据包大小时,会有很多带宽开销。假设每个 5ms 的音频包是 35 个字节,ip 和 udp 标头总共占 28 个字节,这是很多额外的数据。
我的问题是,有没有办法发送具有较大数据包大小但延迟低的实时音频?例如,是否可以在我的应用程序正在生成数据时开始发送数据(部分 udp 数据包),还是必须等待整个数据包的有效负载生成?(以字节为单位的长度会提前知道)。
如果是这样,我可以使用更大的数据包,但可以更快地开始传输数据。
还是网络抖动可能太大以至于我必须缓冲超过 5 毫秒?