浏览器自动播放音频受限问题剖析

举报
媒体服务小助手ultra 发表于 2024/08/08 15:43:50 2024/08/08
【摘要】 什么是音频受限新的页面加载后立即自动开始播放音频(或带有音轨的视频)可能会让用户感到意外,所以在用户没有和页面交互前,当前主流浏览器,默认会阻止音频自动播放。具体表现在,如果audio/video标签携带autoplay属性,页面加载完后,并不会自动播放;如果强行调用play接口,会报“Uncaught (in promise) DOMException: play() failed bec...

什么是音频受限

新的页面加载后立即自动开始播放音频(或带有音轨的视频)可能会让用户感到意外,所以在用户没有和页面交互前,当前主流浏览器,默认会阻止音频自动播放。具体表现在,如果audio/video标签携带autoplay属性,页面加载完后,并不会自动播放;如果强行调用play接口,会报“Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first”类似错误。

HTML:

1.png

JS:2.png

在新的页面直接自动播放带有音频的视频,会受到浏览器的阻止。

通常浏览器期望用户在交互后,才可以允许音频自动播放。如通过点击当前页面的播放按钮后,再去调用play接口。3.png

音频自动播放条件

作为一般规则,您可以假设仅当以下至少一项为真时才允许音频自动播放:

  • 音频已静音或音量设置为 0
  • 用户已经与同域网站进行了互动(通过点击、轻触、按键等)
  • 如果网站已被列入白名单。如果浏览器确定用户频繁与媒体互动,则可能会被加入白名单,或者通过偏好设置等加入白名单。
  • 顶级框架嵌入其他域名网站iframe时,需要顶级框架授予自动播放权限;顶级框架嵌入相同域名网站iframe时,无需授予权限,能够自动播放。部分浏览器支持,兼容性不好。

静音播放

HTML:4.png

JS:5.png

video标签中添加muted属性,则可以自动播放。自动播放后,则可以通过添加按钮取消静音。


同域授权

1.png

index.html点击播放打开同域新的页面video-frame.html,video-frame.html页面中自动播放视频,音频不受限。

2.1.png

然后如果直接刷新打开video-frame.html页面自动播放,则音频受限。

以常用视频网站bilibili为例,直接打开https://www.bilibili.com/bangumi/play/ep832085?theme=movie&spm_id_from=autoNext 播放页面自动播放,音频会受限,bilibili做了静音播放处理。如果通过从主页点击跳转到这个播放页面,则音频不受限。

媒体互动度指数

媒体互动度指数 (MEI) 用于衡量个人在网站上使用媒体的倾向。Chrome 采用的方法是针对每个来源使用与重要媒体播放事件的访问次数之比:

  • 媒体(音频/视频)播放时长必须超过 7 秒。
  • 必须有音频且已取消静音。
  • 包含视频的标签页处于活动状态。
  • 视频的尺寸(以像素为单位)必须大于 200x140。

当该指数足够高时,媒体可以在设备上自动播放。用户的 MEI 可在 about://media-engagement 内部页面中找到。

3.png

音频受限的具体原因和如何加入白名单因浏览器而异,但以上是值得遵循的良好准则。

可以通过设置浏览器启动参数--user-data-dir=C:\Temp\chrome-data,将浏览器数据指向新的目录,则可以重置MEI。

9 (1).png

重置后的MEI:

4.png

iframe 委托

当前页面通过iframe嵌入非同域video-frame.html页面:11.png

非同域video-frame.html页面自动播放视频:12.png

通过iframe标签中添加allow="autoplay",顶级框架将自动播放权限授予iframe。苹果Safari不支持此方式,兼容性如下:

13.png


最佳实践

静音播放

14.png

可以在新的页面先静音播放,然后通过用户点击取消静音,来达到播放声音的效果。

7.png

自动播放失败监听


自动播放后,如果报NotAllowedError的错误,则可以界面上展示播放按钮,引导用户点击播放按钮播放。

8.png

如果video标签只用来播放视频轨道,另有音频标签播放音频轨道,则视频轨道不受限,可以自动播放。只有音频轨道受限,可以做成视频自动播放,引导用户点击取消静音。

效果图1:

9.png

效果图2:

10.png

参考文档:

mdn web docs-媒体和 Web Audio API 的自动播放指南

Chrome 中的自动播放政策

macOS 的自动播放政策变更

在 Firefox 中允许或阻止媒体自动播放

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。