bilibili / flv.js

HTML5 FLV Player
Apache License 2.0
22.93k stars 3.38k forks source link

受到 Chrome autoplay policy 影响导致播放报错 #331

Open featmaker opened 6 years ago

featmaker commented 6 years ago

使用 FlvJs 做视频直播,最近一段时间经常会遇到进入直播间后不能自动播放,查看原因发现是因为 Chrome autoplay policy 的影响。目前的解决办法是默认给 video 标签添加 muted 属性,进入后可以自动播放,但是需要用户手动开启声音,这样的方案对用户体验有很大影响。B 站也是用的 FlvJs 做的直播吧,还有 YouTube 等视频网站,进入之后都是自动播放的,所以想请问下他们的解决方案是如何实现的,或者有没有其他更好的方案。

附上截图: image image

lynxerzhang commented 6 years ago

我现在想的办法是默认静音,然后鼠标移入播放器区域就取消静音,还有个办法不知道可行不可行,就是捕捉play()的报错,然后在播放器上绘制一个播放按钮,让用户去点击播放就行了。你说的B站和YouTube 能播放,可能原因是chrome会计算一个活跃度,这个活跃度达到一定分数,就可以不受限制了,可以查看这个分数“chrome://media-engagement/” 此问题参考

featmaker commented 6 years ago

@lynxerzhang 第一种方式,可能行不通。简单的实现就是对 video 区域添加 mouseover 事件,然后设置 muted=false,这样也是不行的(之前也试过)。第二种方式,是可以的,Autoplay Policy Changes 也有相关的示例。活跃度确实如你所说,policy-change 也有说明,只是被我一直忽略了。。。

keyihen2 commented 5 years ago
flvPlayer.on(flvjs.Events.STATISTICS_INFO,function(){
    if(flvPlayer.muted === true) flvPlayer.muted = false
})
qifanrui commented 4 years ago

这个问题谁解决了,能告诉一下思路吗?谢谢

awen123 commented 4 years ago

这个问题有人解决好啦么,研究啦两三天啦,还没解决,

SuperJolly commented 4 years ago

@awen123 可以试试 @lynxerzhang 提供的第二种方案,是可行的

awen123 commented 4 years ago

@SuperJolly 可以具体描述一下么?

SuperJolly commented 4 years ago

@awen123 这里有官方提供的示例,简单来说就是先执行play(),如果活跃度满足自动播放的话会直接播放,如果不满足可以在catch里处理兜底逻辑,即给播放器上展示一个播放按钮,然后手动点击播放。 https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#audiovideo_elements

awen123 commented 4 years ago

现在的需求是视频自动播放,且有声音,但我现在设置完muted属性后视频完全没有声音啦,有没有好的解决办法呢,

SuperJolly commented 4 years ago

你认真看下我发你的,这种方案不需要静音