google-chrome - Chrome 在达到 50 个音频输出流后不产生音频
问题描述
在我的测试过程中,我发现在单个选项卡上达到 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]
}
解决方案
太多的音频上下文交互是否会导致问题?
太多的 AudioContext 实例肯定会。事实上,在某些系统上,您只能使用单个 AudioContext。
我不确定您的具体用例是什么,但您可能只需要一个 AudioContext。您的所有 MediaStreamSourceNode 都可以存在于相同的上下文中。
推荐阅读
- reactjs - 在 React 中解析 json 字段
- html - 如何阻止我的表单在提交时重新加载?
- python - 我可以自动调整 pygame 中的文本大小以适应屏幕分辨率吗?
- c# - DataGridView 行选择器(记录选择器)实际上不选择
- javascript - 以 PDF 格式下载文件
- swift - SwiftUI AngularGradient 平滑过渡
- python - FileNotFoundError: [Errno 2] 没有这样的文件或目录。是的,路径存在,是的,我使用的是绝对路径
- mongodb - MongoDB聚合:如何添加一个嵌套字段,它是一个双重嵌套字段的总和?
- bash - 从多管道输出创建变量?
- python - 如何从索引中创建列?