重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 7470|回复: 2
打印 上一主题 下一主题

[其他] 【前端】变通解决Safari无法自动播放视频音频文件问题

[复制链接]

299

主题

684

帖子

7026

积分

学生管理组

Rank: 8Rank: 8

积分
7026
跳转到指定楼层
楼主
发表于 2016-9-24 03:21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于 iOS Safari 限制不允许 audio autoplay, 必须用户主动交互(例如 click)后才能播放 audio, 因此必须通过一个用户交互事件来主动 play 一下 audio,
以下代码的做法,就是先监听一个事件touchstart,相当于页面挂钩嘛,这个事件来了过后,在回调函数里面调用 forceSafariPlayAudio,也就是load一哈,然后play一哈,就行老。然后需要再挂钩一个事件'play',这个是音频刚刚播放的时候的事件,就在这个事件继续路由的时候,里面执行一个函数,去除监听touchstart事件,必须这么做,不然你点一下屏幕,那个音乐就重新播放老,我最先都没搞懂哟。。。。

好老 具体代码如下
[HTML] syntaxhighlighter_viewsource syntaxhighlighter_copycode

<!DOCTYPE html>
<html lang="zh-cn" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Type">
<meta content="text/html; charset=utf-8">
<meta charset="utf-8">
<title>方案</title>
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="format-detection" content="email=no">
</head>
<body>  
  <audio id="myaudio" autoplay preload loop controls >
        你的浏览器不支持HTML5
    </audio>
</div>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" charset="utf-8">
(function(){
        function forceSafariPlayAudio() {
            
              audioEl.load();                   
              audioEl.play(); 
         }
        var audioEl = document.getElementById('myaudio');
	audioEl.addEventListener('play', function() {
            //log('play');
            // 当 audio 能够播放后, 移除这个事件
            window.removeEventListener('touchstart', forceSafariPlayAudio, false);
        }, false);
	window.addEventListener('touchstart', forceSafariPlayAudio, false);
        audioEl.src = 'audio/ll.mp3';
})();
</script>
</body>
</html>

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

299

主题

684

帖子

7026

积分

学生管理组

Rank: 8Rank: 8

积分
7026
沙发
 楼主| 发表于 2016-9-24 03:23:35 | 只看该作者
下面来个干货  在微信里面的做法,实测可自动播放的

[HTML] syntaxhighlighter_viewsource syntaxhighlighter_copycode
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>Auto play html audio in iOS WeChat InAppBrowser the right way</title>
</head>
<body>
    <h1>在 iOS 微信浏览器中自动播放 HTML5 audio(音乐) 的正确方式</h1>
    <p>核心原理: 在微信的JS-API 中 play 一下 audio 即可达到自动播放的目的(应该是微信自己做了处理)</p>
    <br>
    <br>
    <br>
    <audio id="bgmusic" src="http://www.w3school.com.cn/i/song.mp3" autoplay preload loop controls></audio>
    <!-- 当使用方法1时必须加载 JS-SDK 的 JS 文件, 方法2不需要加载这个 JS -->
    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
    <script>
    // 方法1: 现在微信官方已经推出了微信JS-SDK, 最好还是不要使用"野生"方式, 因为不知道什么时候就可以不能用了!
    // [url]http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html[/url]
    // 通过config接口注入权限验证配置后, 在 ready 中 play 一下 audio
    function autoPlayAudio1() {
        wx.config({
            // 配置信息, 即使不正确也能使用 wx.ready
            debug: false,
            appId: '',
            timestamp: 1,
            nonceStr: '',
            signature: '',
            jsApiList: []
        });
        wx.ready(function() {
            document.getElementById('bgmusic').play();
        });
    }

    // 方法2: "野生"方法, 借用原来老的 WeixinJSBridge
    function autoPlayAudio2() {
        window.onload = function() {
            // alert(typeof WeixinJSBridge);
            WeixinJSBridge.invoke('getNetworkType', {}, function(e) {
                // 在这里拿到 e.err_msg, 这里面就包含了所有的网络类型
                // alert(e.err_msg);
                document.getElementById('bgmusic').play();
            });
        };
    }

    // 大家或多或少都知道 iOS Safari 不允许自动播放 audio, 可能已经被坑过了,
    // 但微信内嵌的浏览器应该是做了一些定制化, 允许自动播放 audio.
    // 测试了以下机型在微信内嵌浏览器中仅需设置 audio autoplay 即可自动播放(audio)音乐, 无需特殊处理.
    // * iPhone5     iOS 7.0.6 WeChat 6.2
    // * iPhone5s    iOS 8.1.2 WeChat 6.3.7
    // * iPhone6Plus iOS 8.1.3 WeChat 6.3.7
    // * MI1S    Android 4.1.2 WeChat 6.3.7
    // 
    // 但是当手机是 iPhone6s iOS 9.1 WeChat 6.3.7 时, 必须做如下特殊处理才能在微信中自动播放(audio)音乐,
    // 我可以推测是 iOS 9 的兼容性问题么?
    // 
    autoPlayAudio1(); // 推荐使用方法1
    // autoPlayAudio2(); // 也可以试一试方法2
    </script>
</body>
</html>
回复 支持 反对

使用道具 举报

299

主题

684

帖子

7026

积分

学生管理组

Rank: 8Rank: 8

积分
7026
板凳
 楼主| 发表于 2016-9-24 03:32:54 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 22:05 , Processed in 0.170579 second(s), 27 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表