移动端audio音频播放兼容方案

现在很多移动端要求audio播放必需由用户的事件触发,否则就劫持。实际应用中经常会出现JS网络请求通过返回的结果来决定播放什么音频,在移动端是不允许的。

当移动需要通过网络请求回调来播放音频时,就得做点准备工作,具体代码如下:

加载准备处理

     /**
     * 循环处理
     * @param {Object} data
     * @param {Function} callback
     * @returns {undefined}
     */
    function each(data, callback) {
        if (typeof data === 'object') {
            if (data.length) {
                for (var key = 0; key < data.length; key++) {
                    if (callback(key, data[key]) === false) {
                        break;
                    }
                }
            } else {
                for (var key in data) {
                    if (callback(key, data[key]) === false) {
                        break;
                    }
                }
            }
        }
    }
    /**
     * 播放音频
     * @param {String} name
     * @param {Bool} isPrepare
     * @returns {undefined}
     */
    function audioPaly(name, isPrepare) {
        each(name.split(/\s+/), function (_, name) {
            if (audioPaly.lists[name]) {
                if (isPrepare) {
                    audioPaly.lists[name].prepare();
                } else {
                    audioPaly.lists[name].play();
                }
            }
        });
    }
    audioPaly.lists = {};
    /**
     * 加载音频
     * @param {String} path
     * @param {Function} callback
     * @returns {undefined}
     */
    function loadAudio(path) {
        var audio = create('audio', {preload: 'load'});
        each({'ogg': 'ogg', 'mp3': 'mpeg', 'wav': 'wav'}, function (name, type) {
            audio.appendChild(create('source', {src: '/audio/' + path + '.' + name, type: 'audio/' + type}));
        });
        audio.addEventListener('loadedmetadata', function () {
            audioPaly.lists[path] = {
                play: function () {//播放
                    audio.muted = false;//关闭静音
                    audio.play();
                },
                prepare: function () {//准备
                    audio.muted = true;//静音,有的移动端不设置这个会直接播放
                    audio.play();
                    audio.pause();
                }
            };
        });
        document.body.appendChild(audio);
    }
    
    //加载音频
    loadAudio('test');

用户事件触发处理

//绑定用户可触发元素点击事件
element.addEventListener('click', function(){
    audioPaly('test', true);//音频触发,用于回调再次播放
    //网络请求代码
    ....
        //网络回调器
        function (){
            audioPaly('test');//播放处理
        }
    ....
});

准备的音频文件(为什么准备多个就不多说了,具体看面向的终端支持音频格式来定)

/audio/test.mp3

/audio/test.ogg

/audio/test.wav

这段代码并不复杂,只是利用了移动端限制中的一点点许可,当在用户触发事件中播放了,那么在后续的操作的就可以再次播放。

只要我们在用户触发后播放音频并及时暂停或静音就可以不被听到音频,然后在网络请求回调中再次操作播放即可实现,动态播放。

原文地址:http://blog.51cto.com/php2012web/2066930

时间: 2024-10-10 12:26:17

移动端audio音频播放兼容方案的相关文章

[转载]html5 audio音频播放全解析——html5系列

序 html5开启了一个新时代,因为它让浏览器本身变得不那么被动,audio api就是一个典型的列子,在html5还没确定之前,如果想要在听音乐看视频唯一的办法就是用flash意思是当你没有给浏览器装载Flash插件的话 那么音乐视频即是空谈,html5 audio的出现改变了这一格局,因为你可以不用Flash插件就可以听音乐看视频,当然这些能否实现还跟你用的浏览器有关. 这是demo地址 http://www.feman.cn/h5/audio.html 在手机上浏览效果会更好 文章结构 1

html5 audio音频播放全解析

序 html5开启了一个新时代,因为它让浏览器本身变得不那么被动,audio api就是一个典型的列子,在html5还没确定之前,如果想要在网页上听音乐看视频唯一的办法就是用flash意思是当你没有给浏览器装载Flash插件的话 那么音乐视频即是空谈,html5 audio的出现改变了这一格局,因为你可以不用Flash插件就可以听音乐看视频,当然这些能否实现还跟你用的浏览器有关. 这是demo地址 http://www.feman.cn/h5/audio.html(IE8以下不支持) 在手机上浏

关于HTML5中audio音频播放器的一些理解

最近由于工作需要音频,了解到了HTML5中新兴的audio音频播放器.关于它本身的自带的属性不过多介绍,但是需要着重提到的就是它自身就有play()和pause()两个函数可以拿来直接使用,也就是我们经常遇到的播放和暂停功能.下面是我写的实例,有兴趣的朋友可以下载附件观看.今天晚上能把这个问题搞出来,基本上HTML5中audio的一些常见,常用的需求都可以解决了.开心- <!DOCTYPE HTML> <html> <head> <meta charset=&qu

移动端audio自动播放问题

中秋临近,心血来潮想做个手机端贺卡,以前接触的移动端较少,虽然是个简单的贺卡,其实也蛮多坑的,简略说一下在制作贺卡的过程遇到的坑: 一:移动端的屏幕大小不能算作body的大小,因为手机浏览器头部都有网址导航等等,底部也有留白,应该出去这一部分: 二:audio背景音乐是不能自动播放的,不管怎么调试js都没用,经过多方查证,居然是移动端做了限制,一定要用户交互才能触发,网上的解决方案大多是通过touchstart事件: <audio id="myaudio" > <so

【jquery】一款不错的音频播放器——Amazing Audio Player

前段时间分享了一款视频播放器,点击这里.今天介绍一款不错的音频播放器——Amazing Audio Player. 介绍: Amazing Audio Player 是一个使用很方便的 Windows 和 MAC 应用程序,允许你创建 HTML5 音频播放器的网站.该音频播放器兼容 iPhone,ipad,Android,Chrome,Firefox,Safari,Opera 和 IE 7 / 8 / 9 / 10.同时它也可以发布成为一个 WordPress 的音频播放器插件,Joomla 音

Android 音频播放——AudioTrack直接播PCM、MediaPlayer播媒体文件可以是audio

http://blog.csdn.net/java_android_c/article/details/52678265 Android平台播放音频的方式一般有3种.1.利用系统内置的应用程序播放音频    2.利用AudioTrack播放原始音频   3.使用MediaPlayer播放.此3种音频播放方式,以第三种MediaPlayer播放这种方式使用的最多,必须掌握! 一.使用系统内置的程序. Google想的"周到",一般都给我们提供了一些内置程序,然而这些内置程序的UI效果,那

音频兼容方案

目的:播放不同格式的音频. 策略:固定最高格式音频播放环境,不足这一格式,扩展到这一格式. 分类:将采样速率和采样位数组合,构成类别. 1类格式:48KHz/16Bit,常用格式,DVD音频格式,AC97格式. 2类格式:96KHz/16Bit,提高了1倍采样速率. 3类格式:144KHz/16Bit,提高了2倍采样速率. 4类格式:192KHz/16Bit,提高了3倍采样速率. 5类格式:192KHz/18Bit,扩展了采样位数. 分类是因存储器限制,第1类和第5类相差8倍.前4类满足普通应用

HTML5开发,audio 控制,当单个音频播放的时候,其它音频保持暂停状态,避免重音

//html部分 <audio controls src="http://sc1.111ttt.com/2016/1/12/09/205090905133.mp3"></audio> <audio controls src="http://sc1.111ttt.com/2016/5/12/09/205090518581.mp3"></audio> <audio controls src="http://

使用audio标签播放音频文件

HTML5定义了一个新的元素用来指定标准的方式来插入音频文件到web页面中:<audio>标签.使用audio标签可以控制音频的播放与停止,循环播放与播放次数设置,以及播放位置等等. 例如:<audio id="a"  preload="metadata"  src="flash/1.mp3"  controls = "controls"></audio> 使用audio标签播放音频文件