我一直在使用Web Audio API和Node.js开发音频会议应用程序。一个人会说话,其他有联系的客户应该听到他的意见。
在客户端,我使用libopus编码PCM样本,然后再将它们发送到服务器。
在服务器端,我只是将这些编码的数据包发送回连接的用户,最后在每个客户端上,我将这些数据包解码回可以使用Web Audio API播放的样本。
当我在本地环境中测试应用程序时,一切正常。在生产环境中,当客户端可以从外部本地空间连接时,会出现主要问题。
有些客户的音频会有延迟,而这似乎在增加。 例如,如果流已持续1分钟,则某些客户端的延迟可能大至10秒,并且在几分钟之后,某些客户端的延迟甚至更长30-50秒。
有些客户没有问题。
特别是遇到延迟的客户,声音非常低音。对于没有延迟音频的客户来说也会发生这种情况。
答案 0 :(得分:1)
这是因为你可以使用不同的声卡获得不同的采样率。因此,在这种情况下,音频是高音和滞后的(从PC1-> PC2),并且随着时间的推移低音调和延迟(从PC2-> PC1)。在这种情况下,PC1的采样率低于PC2。
你必须写一个重新采样器来解决这个问题。 检查不同PC上的采样率:
var audioCtx = new AudioContext();
var mySampleRate = audioCtx.sampleRate;
查看我关于没有WebRTC解决方案的帖子:Can I stream microphone audio from client to client using nodejs?
你可以给我你用过的Opus Lib的链接吗?也许我会在我的项目中迭代这个。