【发布时间】: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