TLDR:当流可能不可靠时,如何混合网络流?
我正在开展一个项目,该项目将允许音乐家通过互联网以低延迟一起练习/表演。(想想 JackTrip,但对用户更友好)。
我通过网络上的 UDP 接收原始 PCM 音频数据。当这些进来时,我确定发送者是谁,并将该流传输到该特定人的缓冲区中。我对每个参与的人都有一个单独的缓冲区。
然后我定期从每个缓冲区中一次取一个“块”,将它们混合在一起并输出到设备的扬声器。
我遇到的问题是知道什么时候拿那个“块”。一些客户端离线并且他们的缓冲区空了。我不能只是等待他们的缓冲区重新填充,因为这会减慢其他客户端的速度。
我的想法是查看特定时间点的所有缓冲区,并且仅在填充了至少一半的缓冲区时才处理一个块。
有任何想法吗?
其他详情:
- 我的缓冲区有 128 个样本。
- 我正在使用 44100 的采样率
- 我正在使用 16 位有符号整数 pcm
- 流是单声道
- 我正在使用PortAudio和 C++。
- 我正在使用 ASIO 音频驱动程序。