javascript - WebRTC 通过 Web Audio API 在 google Chrome 上保持静音

标签 javascript google-chrome webrtc web-audio-api

我正在从 WebRTC 获取 mediaStream 并进行一些音频处理和监控。它适用于 FireFox,但在 Chrome 上是无声的。

这里以单个gainNode为例进行简化。

    const AudioContext = window.AudioContext || window.webkitAudioContext;
    let myAudioCtx = new AudioContext();
    let mySource = myAudioCtx.createMediaStreamSource(stream);
    let gainNode = myAudioCtx.createGain();
    gainNode.gain.value = 2;
    mySource.connect(gainNode);
    gainNode.connect(myAudioCtx.destination);

而如果我改为直接将流分配给 srcObject,我就会听到声音。

createMediaStreamSource() 似乎没有返回任何音频,因为我的监控显示静音。但是,如果我将来自 WebRTC 的流分配给 srcObect 并通过我的监控运行,则监控会检测到声音。

myAudioCtx.state 表示“正在运行”

想不出还有什么地方可以检查。任何帮助将不胜感激

最佳答案

在睡个好觉并再次查看 MDN 文档后找到了解决方案。

您必须将流分配给音频元素

audio.srcObject = stream;

但是你必须将输出静音,这样它就不会直接进入扬声器

audio.muted = true;

这不会阻止您的网络音频正常工作

const AudioContext = window.AudioContext || window.webkitAudioContext;
let myAudioCtx = new AudioContext();
let mySource = myAudioCtx.createMediaStreamSource(stream);
let gainNode = myAudioCtx.createGain();
gainNode.gain.value = 2;
mySource.connect(gainNode);
gainNode.connect(myAudioCtx.destination);

这适用于 Chrome、Safari 和 Firefox。

关于javascript - WebRTC 通过 Web Audio API 在 google Chrome 上保持静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54514273/

相关文章:

javascript - 将长 Jade 数组变量拆分为多行

javascript - 当我们点击为复选框分配的标签时,Chrome 和 IE 不会按时触发更改事件

javascript - Google Chrome 扩展程序 - 下载、移动和删除文件

javascript - import 不能在 chrome 61 中使用?

javascript - 使用 Javascript 和 HTML 5 从数据 URL 生成下载内容

html - 逐 block 下载文件客户端

stream - webrtc 上的网络音频分析器用于远程流

javascript - 如何在redux中修改对象属性?

javascript - gem Assets 内的配置不起作用

javascript - 无法将 [autofocus ="autofocus"] 与 :input 结合起来