Chrome 达到 50 个音频输出流后不产生音频

Chrome produces no audio after reaching 50 audio output streams

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

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

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]
}

Does too many audio context interactions caused the issue?

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

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