声音无法自动播放一直在IOS/Android上面都是一个惯例, 桌面端的 Safari在2017年的11版本中也宣布禁止带有声音的多媒体自动播放, 紧接着2018年4月份Chrome发布的66版本也正式关闭了声音自动播放, 也就是 <audio autoplay></audio> <video autoplay></video>在桌面版的浏览器也将失效.

一开始移动端是完全禁止带有音频的媒体自动播放, 是因为考虑到了手机带宽和对电池的消耗, 但是后来又改了, 因为浏览器厂商发现网页开发人员可能会使用GIF动态图替代视频实现自动播放, 正如IOS文档所说, 使用GIF的带宽流是video(h24)格式的12倍, 而播放性能消耗是2倍, 所以这样对用户反而不利, 还有开发者使用Canvas进行hack, 如Android Chrome文档中提到.

因此浏览器厂商开放了对多媒体自动播放的限制, 只要具备以下条件就能自动播放:

1. 没有音频轨道, 或者设置了muted属性

2. 在视图里面是可见的, 要插入到DOM里面并且不是display: none; 或者 visibility: hidden的, 没有滑出可视区域.

也就是说只要你不开声音扰民, 且对用户可见, 就可以自动播放.

桌面版的Safari浏览器也使用了这个策略, 升级到 Safari 11 之后的说明:

以及Chome文档的说明

这个策略对视频网站的冲击非常大, 比如用Safari打开tudou

Chrome 的禁止更加人性化一点, 他有一个MEI的策略, 这个策略大概就是说只要用户在当前网页主动播放超过7s的媒体, 视频窗口不能小于 200 X 140, 就允许自动播放

对于网页开发者来说应该如何规避这个风险?

Chrome文档给了一个最佳实践, 先把音频加一个muted的属性就可以自动播放, 然后显示一个声音被关掉的按钮, 提示用户点一下打开声音, 对于视频来说, 确实可以这样处理, 但是对于音频来说, 很多人是监听页面的点击事件, 只要点一次就可以开始播放, 一般都是播放背景音乐, 也不需要按钮,但是如果有多个音频资源的页面应该如何自动播放呢?

首先, 如果用户还没有进行交互就调用播放声音的API, Chrome会给个提示

Safari会这么提示

NotAllowedError: The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.

意思就是说, 用户还没有进行交互, 不能调用play(), 那么用户的交互包括哪些呢?

包括用户触发的 touchend, click, doubleclick或者是deydown, 在这些事件里面可以调用play()

所以上面提到的很多人是监听的整个页面的点击事件进行播放的, 不管点击哪里, 只要点了就行, 包括触摸下滑

原生播放视频只能使用 video 标签, 而原生音频播放除了使用 audio标签外, 还可以使用一个API叫做 AudioContext, 它是一个能够用来控制声音播放并且带了很多丰富的操作接口.

参考链接

Chrome 66禁止声音自动播放之后

Chrome 新的自动播放策略

利用HTML5 Web Audio API给网页JS交互增加声音

Chrome 66 禁止声音自动播放的更多相关文章

  1. Chrome 声音自动播放抱错问题【play() failed】

    Chrome下调用play后抱错:DOMException: play() failed because the user didn't interact with the document firs ...

  2. video实现有声音自动播放

    video实现自动播放有声音 需求:老板见人家可以的,我们的也要可以!!! 前端:自动播放,简单... 要实现:鼠标移入视频播放同时有声音,移出让你暂停,,,,, 问题集合 1- 自动播放实现没有声音 ...

  3. 怎样解决Chrome浏览器因为禁止音频自动播放所造成的视频无法自动播放且报错: Uncaught (in promise) DOMException的问题

    这个问题是谷歌基于用户体验方面的考虑, 对页面加载时自动播放的音频作了限制, 试想一下, 如果你打开某个页面就立刻自动播放某种不可描述的声音, 那体验想必是十分酸爽. 尽管这个设定是针对音频的, 但实 ...

  4. Windows下如何禁止优盘自动播放、自动运行

     造冰箱的大熊猫@cnblogs 2019/1/28 为了防范层出不穷的病毒和木马,如何禁止插入优盘后Windows自动播放优盘或运行优盘程序? 运行环境:Windows 7 1)点击Windows开 ...

  5. [bug]解决chrome浏览器不支持所有媒体音乐不自动播放问题

    声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...

  6. 【转】解决chrome浏览器不支持audio和video标签的autoplay自动播放

    声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...

  7. Chrome,firefox解除阻止视频自动播放

    Firefox 66 将阻止自动播放音频和视频 PingWest品玩2月5日报道,从发布适用于桌面的 Firefox 66 和 Firefox for Android 开始,Firefox 将默认阻止 ...

  8. 阿里云 Aliplayer高级功能介绍(九):自动播放体验

    基本介绍 经常会碰到客户询问,为什么我设置了autoplay为true,但是没有自动播放,每次都要向客户解释这个是浏览器从用户体验角度考虑做的限制,客户会继续询问那我要怎么做? 针对这个问题Alipl ...

  9. 如何自动播放光盘、解决win7电脑不能播放光盘

    如何设置光盘自动播放.允许光盘自动运行呢? 在使用电脑光驱播放光盘文件的时候,经常出现的一个问题是,光驱不能自动播放光盘,但是打开光盘的文件手动操作没有任何问题,这给使用造成了很多麻烦.那么,如何让光 ...

随机推荐

  1. MySQL:数据类型介绍

    数据类型介绍 一.整数类型(可以添加自增约束条件) 数据类型 存储需要 有符号 无符号 tinyint 1个字节 -2^7~2^7-1 0~2^8 smallint 2个字节 -2^15~2^15-1 ...

  2. wxPython的使用--类似画板的界面

    # -*- coding: utf-8 -*-import wximport wx.lib.buttonsimport cPickleimport os class PaintWindow(wx.Wi ...

  3. Python中列表、元组、集合、字典

    Python 列表(List) 列表是最常用的Python数据类型: 列表中的数据项不需要具有相同的类型: 列表也叫做数组,定义时使用[]: 通过下标访问列表中的元素,下标从 0  开始计数 列表的增 ...

  4. 2D转换下的zoom和transform:scale的区别

    一.什么是zoom 在我们做项目和查看别人的网页的时候总会在一些元素的样式里,看到有一个家伙孤零零的待在那里,它到底是谁呢? 它的名字叫zoom,zoom的意思是“变焦”,虽然在摄影的领域经常被提到, ...

  5. nginx php

    server { listen 443; server_name www.awkj.com; ssl on; ssl_certificate cert/214683879970617.pem; ssl ...

  6. ORA-00600: internal error code, arguments: [kole_t2u], [34]

    数据库版本10.2.0.5,Alert 日志存在ORA-600报错 ORA-00600: internal error code, arguments: [kole_t2u], [34], [] -- ...

  7. IIS 7上导入SSL证书

    1.将SSL证书文件上传至服务器 2.导入证书 1)在IIS设置项中,打开‘服务器证书’ 2)选择导入 3)将网站绑定SSL证书

  8. AE2

    2.3缩放属性 ctrl+D 复制图层:这样可以吧这个图层的所有属性都复制过去 然后按着alt键,把图片替换掉 需要做一个倒计时(作业)(到1时做一个烟花效果) 问题:1.按着alt键,把图片替换掉. ...

  9. C语言--第八周作业评分(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1400 一.评分要求 要求1 完成14.15周的所有PTA中题目集,总共4次题 ...

  10. java poi解析excel报错处理

    org.apache.xmlbeans.SchemaTypeLoaderException: XML-BEANS compiled schema: Incompatible minor version ...