使用 AudioContext.createMediaStreamSource 与 HTMLAudioElement.srcObject 播放 MediaStream

Ada*_*myd 6 html javascript webrtc web-audio-api

我正在尝试使用 Web Audio API 从远程对等点 (WebRTC) 播放 MediaStream。当我使用它将流附加到audio元素audio.srcObject = stream时,它播放正常,但是当我尝试使用 AudioContext 时,它根本不播放任何声音(我需要避免audio/videoHTML 标签)。

这件作品的作品:

<audio controls>
<script>
   const audioEl = document.getElementsByTagName('audio')[0];
   audioEl.srcObject = MY_STREAM;
   audioEl.play();
</script>
Run Code Online (Sandbox Code Playgroud)

这一个不:

const audioContext = new AudioContext();
const sourceNode = audioContext.createMediaStreamSource(MY_STREAM);
sourceNode.connect(audioContext.destination);
// Trying even 'audioContext.resume()' after user gesture with no luck
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当我的麦克风MY_STREAM出现时,它就可以很好地支持 Web Audio API(我听到我的麦克风的反馈)。

因此,这表明麦克风 MediaStream 和我从 WebRTC 连接获得的 MediaStream 之间存在一些不同,但为什么它会播放简单的 HTMLaudio标签?

Kai*_*ido 5

正如@jib 所证明的,这是一个 Chrome 错误。
我开了一个新问题让他们知道。

我想我找到了一个解决方法,只需将此 MediaStream 分配给srcObject虚拟 HTMLAudioElement,

new Audio().srcObject = mediaStream;
Run Code Online (Sandbox Code Playgroud)

但不知何故,在我的本地主机上进行测试时,它没有及时持续存在,而在这个小提琴中它却持续存在。

我在玩游戏时还遇到了很多其他奇怪的行为,例如不同的选项卡与其他选项卡发生关联之类的事情。

再加上该领域其他未修复的错误,这些错误让我想到了误报,总之,我担心除了等待他们修复它之外,没有其他正确的解决方案......