【问题标题】:Web Audio API and livestream delayWeb Audio API 和直播延迟
【发布时间】:2015-10-10 11:13:49
【问题描述】:

我一直在使用 Web Audio API 和 Node.js 开发音频会议应用程序。一个人会说话,其他有联系的客户应该听到他的声音。

在客户端,我使用 libopus 对 PCM 样本进行编码,然后再将它们发送到服务器。

在服务器端,我只是将这些编码的数据包发送回连接的用户,最后在每个客户端上,我将这些数据包解码回可以使用 Web Audio API 播放的样本。

当我在本地环境中测试应用程序时,一切正常。在生产环境中,当客户端可以从外部空间连接时,会出现几个主要问题。

  1. 一些客户端的音频延迟似乎在增加。 例如,如果流持续了 1 分钟,则某些客户端的延迟可能高达 10 秒,而几分钟后,某些客户端的延迟甚至更大 30-50 秒。

  2. 部分客户端没有问题。

  3. 尤其是遇到延迟的客户端,声音非常低沉。这也可能发生在音频没有延迟的客户身上。

【问题讨论】:

  • 我认为我们需要一些代码来帮助您!

标签: audio websocket web-audio-api


【解决方案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 的链接吗?也许我也会在我的项目中对此进行迭代。

【讨论】:

  • 只是为了澄清,这不是我的项目,我只是从那里拿走了那些库。
  • 我尝试从 OS 更改采样率,但 AudioContext 总是返回 44100。这正常吗?
  • 我从未尝试过,因为您不能指望每个用户都更改此设置。所以我不知道这是否有效。您是否重新启动了浏览器和操作系统?
  • 是的,我确实重新启动了浏览器。我现在尝试检查 audioCtx.sampleRate 在不同计算机上返回的内容,到目前为止,每一个都返回 44100。
猜你喜欢
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 2021-01-10
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多