我正在从 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/