H5 ios10+ Safari 中实现 video/audio 自动播放小技巧

关于Safari 中禁止音视频自动播放的问题:

apple 开发者声明:https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html

苹果为了用户着想,禁止了 AutoplayJS "onload" 加载播放,也就是说即使你在html文件里使用了preloadautoplay 属性,在移动版 Safari 上,此属性会被忽视,并且不会加载视频流,甚至不会下载该视频流。除非用户物理点击一次媒体播放。

Safari 中通过 playsinline + muted 实现媒体自动播放

其实从 ios10 开始 safari 重新支持了自动播放,不过有前置条件,需要在 videoaudio 添加 muted 属性并且设置为 true(或者视频本身没有音轨),这样设置了 muted (静音)的媒体标签就符合自动播放的规则了,不过单单设置了 muted 并不能自动播放,还有另外一个关键属性,那就是 playsinline 属性,这个属性可以让我们的媒体在浏览器中不必以全屏的形式播放,众所周知,在 ios 中媒体播放默认都以全屏形式播放,加上 playsinline 即可不全屏播放媒体,nice~。

<video id="webcam" controls autoplay playsinline muted />

给 video 设置了以上属性后,那么就已经实现了视频的自动播放了,然后另一个问题就来了,现在是静音播放的状态,如何取消静音呢?可以在 window.onload() 等事件中取消 video 标签静音状态即可,即完美实现媒体自动播放。

window.onload = () => {
	document.getElementById('webcam').muted = false;
}
总结:
关于在 H5 中自动播放的问题,一直都有很大的争议,自动播放的确会带来安全性问题和一些不好的用户体验,但是在一些特殊场景中还是需要自动播放支持,例如直播流、WebRTC等等需要自动播放,后续继续收集各种 H5 中遇到的兼容问题以及API支持问题,觉得写的不错的话,点个赞吧,你的支持是我坚持的动力~~
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
在移动端的iOS系统浏览器限制了自动播放音频的行为,必须在用户与页面交互后才能播放音频。 但可以通过以下方式绕过这个限制: 1. 监听用户的交互事件,例如`touchstart`,`click`等事件,在事件处理函数播放音乐。 ``` document.addEventListener('touchstart', function() { // 在这里播放音乐 document.querySelector('audio').play(); }); ``` 2. 使用Web Audio API,它允许在用户与页面交互前预加载音频,然后在用户与页面交互后播放音频。具体实现可以参考以下代码: ``` var context = new (window.AudioContext || window.webkitAudioContext)(); var buffer; var source; var xhr = new XMLHttpRequest(); xhr.open('GET', 'music.mp3', true); xhr.responseType = 'arraybuffer'; xhr.onload = function() { context.decodeAudioData(xhr.response, function(decoded) { buffer = decoded; }); }; xhr.send(); document.addEventListener('touchstart', function() { source = context.createBufferSource(); source.buffer = buffer; source.connect(context.destination); source.start(0); }); ``` 在这个例子,我们使用XMLHttpRequest对象来获取音频文件,并使用`decodeAudioData`方法将其解码为一个AudioBuffer对象,然后在用户与页面交互时创建一个AudioBufferSourceNode对象,并将其连接到AudioContext.destination属性上,最后调用start方法播放音频。 需要注意的是,iOS系统的限制对于所有浏览器都是适用的,因此无法完全绕过这个限制。在实际应用,还需要考虑用户体验和页面性能等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超喜欢你呦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值