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

时间:2019-02-19 08:08:13

标签: javascript html webrtc web-audio

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

这件作品:

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

这不是:

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

奇怪的是,当MY_STREAM是我的micriphone 时,它对Web Audio API的播放效果很好(我听到了我的麦克风的反馈)。

因此,这表明麦克风MediaStream与我从WebRTC连接获得的麦克风有所不同,但是为什么它要为简单的HTML audio标签播放?

1 个答案:

答案 0 :(得分:1)

demonstrated by @jib一样,这是一个Chrome错误。
我打开了一个new issue,让他们知道。

我以为我找到了一种解决方法,只需将该MediaStream分配给虚拟HTMLAudioElement的srcObject

new Audio().srcObject = mediaStream;

但是以某种方式,在我的本地主机上进行测试时,它没有及时持续,而在this fiddle中进行了测试。

在玩耍时,我还遇到了许多其他奇怪的行为,例如在其他选项卡上出现了其他事件,诸如此类。

再加上使我想到误报和全面问题的other non-fixed bugs,我担心没有适当的解决方案,只能等他们解决这个问题...