【问题标题】:Autoplay incoming WebRTC stream on chrome on android在 android 上的 chrome 上自动播放传入的 WebRTC 流
【发布时间】: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


【解决方案1】:

查看:https://www.chromium.org/audio-video/autoplay

var promise = document.querySelector('video').play();

if (promise !== undefined) {

  promise.then(_ => {

    // Autoplay started!

  }).catch(error => {

    // Autoplay was prevented.

    // Show a "Play" button so that user can start playback.

  });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多