背景
在chrome中使用video视频标签,muted=false的时候第一次进入页面会autoplay失效,无法自动播放。
原因
随着互联网发展,很多网页会加入自动播放的视频甚至广告,chrome后来也开始禁止网页自动播放有声音的视频,防止刚进入页面吓到用户。
Chrome 的自动播放策略在 2018 年 4 月变化为:
静音自动播放总是允许的。
顶部框架可以将自动播放权限授予其iframe以允许自动播放声音。
在下列情况下允许使用声音自动播放:
3.1 用户已经与域进行了交互(点击,tap等)。
3.2 在桌面上,用户的媒体参与指数阈值(MEI)已被越过,这意味着用户以前播放带有声音的视频。
3.3 在移动设备上,用户已将该网站添加到主屏幕。
解决方案
本地方案:
- 关闭chrome所有页面
- 右键桌面chrome图标,选择“属性”
- 在目标最后(即结束符"后面)加“ --autoplay-policy=no-user-gesture-required”(复制双引号中内容,注意别漏掉开头的空格)
- 点击“确定”
线上方案: play方法返回一个promise,可供判断浏览器是否允许当前的播放行为,如果不允许则静音播放
const promise = videoRef.current.play();
promise
.then(() => {
console.log('支持自动播放');
})
.catch(() => {
console.log('自动播放失败');
if (videoRef.current) {
videoRef.current.muted = true;
videoRef.current.play();
}
});