【发布时间】:2018-03-04 23:32:12
【问题描述】:
我有一个使用 simple-peer 的多点 WebRTC 流,我正在播放接收到的流,如下所示:
peer.on("stream", data => {
let audio = document.createElement("audio") as HTMLAudioElement;
audio.src = URL.createObjectURL(data);
audio.play();
});
这在桌面上可以正常工作,但对于 android 上的 chrome 则没有声音:
Unhandled Promise rejection: play() can only be initiated by a user gesture.
我找不到任何有关如何正确播放接收到的流的文档。当流准备好时,我真的必须显示一个按钮吗?
我还尝试通过播放来自 getUserMedia 的流来解决此问题,但这仅在我不调用 audioTag.muted = true 时才有效,这也不是解决方案,因为这会产生反馈循环。
let audioTag = document.createElement("audio") as HTMLAudioElement;
audioTag.autoplay = true;
navigator.getUserMedia({video: false, audio: true}, (async stream => {
audioTag.src = window.URL.createObjectURL(stream);
audioTag.muted = true;
// ...
});
http://talky.io 之类的网站似乎已经找到了解决此问题的方法,那么我该怎么办?
【问题讨论】:
-
不确定这是否是问题,但移动设备需要用户按下音频/视频流的播放按钮才能播放。不确定解决方法。
-
我也有同样的问题。 whereby.com 也可以在没有用户交互的情况下播放音频,因此必须以某种方式解决。
标签: javascript google-chrome webrtc