【问题标题】:Chrome produces no audio after reaching 50 audio output streamsChrome 在达到 50 个音频输出流后不产生音频
【发布时间】:2021-01-13 10:15:24
【问题描述】:

在我的测试过程中,我发现在单个选项卡上达到 50 个音频输出流(如 chrome://media-internals/ 音频选项卡中所示)会导致音频输出消失。 Chrome 是否设置了每个显示的标签允许的音频输出流的最大限制?如果是这样,是否有一些解决方法?我使用的 Chrome 版本是 87.0.4280.141。

每当我们静音/取消静音(下面的第二个函数)和调整麦克风音量(下面的第一个函数)时,我们都会创建一个新的音频上下文。是否有太多的音频上下文实例导致了该问题?

private setLocalStreamVolume(stream: MediaStream | undefined) {
    const context = new AudioContext()
    const destination = context.createMediaStreamDestination()
    const gainNode = context.createGain()
    if (stream) {
        for(const track of stream.getTracks()){
            const sourceStream = context.createMediaStreamSource(new MediaStream([track]));    
            sourceStream.connect(gainNode)
            gainNode.connect(destination)
            gainNode.gain.value = this._micVolume            
        }        
    }
    return destination.stream
  }


export function mixStreams(streams: Iterable<(MediaStream | undefined)>) {
    const context = new AudioContext()
    const mixedOutput = context.createMediaStreamDestination()
    for(const stream of streams)
        if(stream)
            for(const track of stream.getTracks()){
                const sourceStream = context.createMediaStreamSource(new MediaStream([track]));
                sourceStream.connect(mixedOutput);
            }
    return mixedOutput.stream.getTracks()[0]
}

【问题讨论】:

  • 您使用的是 50 PeerConnections 吗?如果是这样,则有 50 个作品编码正在进行。检查你的 CPU。
  • 在音频消失时只有 2 个 peerConnections(基于来自 chrome://webrtc-internals 的转储)。我们达到 50 个音频输出流的原因是因为每次我们调整麦克风音量或静音时,我们都会创建一个新的音频上下文,如下所示:创建太多音频上下文是否会导致问题?谢谢。

标签: google-chrome audio webrtc


【解决方案1】:

过多的音频上下文交互是否会导致该问题?

太多的 AudioContext 实例肯定会。事实上,在某些系统上,您只能使用单个 AudioContext。

我不确定您的具体用例是什么,但您可能只需要一个 AudioContext。您的所有 MediaStreamSourceNode 都可以存在于相同的上下文中。

【讨论】:

  • 感谢您的意见!
  • 使用单一音频上下文确实解决了这个问题!感谢您的帮助!
  • @JoyceA 没问题!如果您愿意,可以单击旁边的复选标记来接受此答案。
  • 再次感谢布拉德。所以我只有一个后续问题。切换到单个音频上下文后,在更改增益节点值后,我的麦克风输入的音频质量现在很差。任何想法为什么会发生?谢谢!
  • @JoyceA 发布一个新问题,以及重现该问题的方法。我猜你在剪辑。您可能需要使用压缩器节点并降低级别。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2015-08-27
  • 2021-05-13
  • 1970-01-01
  • 2016-01-26
  • 2019-10-29
相关资源
最近更新 更多