一.问题重述

有的公众号消息点进去之后能够自动播放音乐,不需要用户手动触发再play,这是怎么实现的?

二.方案尝试

1.audio设置autoplay属性播放

给audio标签设置autoplay="autoplay"

结果:在某些Android机上可以自动播放,IOS不支持

2.setTimeout播放

进入页面后延迟执行audio.play()

结果:Safari,IOS微信不支持

3.按钮播放

通过点击按钮或者touch事件触发播放

结果:某些Android微信不支持

4.用旧微信API回调播放

通过获取网络状态的接口回调播放(无论成功失败,都执行play)

var audio = document.getElementById('audio');

if (window.WeixinJSBridge) {

WeixinJSBridge.invoke('getNetworkType', {}, function(e) {

audio.play();

}, false);

}else{

document.addEventListener("WeixinJSBridgeReady", function() {

WeixinJSBridge.invoke('getNetworkType', {}, function(e) {

audio.play();

});

}, false);

}

结果:IOS 微信不支持,Safari不支持(未做兼容性处理)

5.用新微信API回调播放

原理同上,只是用了新的微信API,详细信息请查看微信JS-SDK说明文档

var audio = document.getElementById('audio');

if (window.WeixinJSBridge) {

wx.getNetworkType({

success: function (res) {

audio.play();

},

fail: function (res) {

audio.play();

}

});

}else{

document.addEventListener("WeixinJSBridgeReady", function() {

wx.getNetworkType({

success: function (res) {

audio.play();

},

fail: function (res) {

audio.play();

}

});

}, false);

}

结果:IOS支持性未知

6.微信API回调用AudioAPI播放

AudioAPI无法打破IOS系统不让自动下载音频的限制(具体见后文),所以尝试在回调中用AudioAPI播放音频

注意:低版本IOS不支持AudioAPI,Android支持性未知

// 获取AudioContext

window.context = getAudiocontext();

// 获取音频数据

window.source = null;

window.bufs = [];

// 执行

getBufs();

/**

* 获取AudioContext

* @return {AudioContext} andio元素相关的环境对象

*/

function getAudiocontext() {

window.AudioContext = (window.AudioContext || window.webkitAudioContext);

if(window.AudioContext) {

return new window.AudioContext();

} else {

console.log('not support web audio api');

}

}

/**

* 播放

* @param {Integer} 1: 多个source直接连接输出设备 2: 多个source通过GainNode再连接输出设备

* @return nth

*/

function getBufs() {

var audioURL = 'didi.mp3'; // 这里替换为音频文件URL

var xhr1 = new XMLHttpRequest();

xhr1.open('GET', audioURL, true);

xhr1.responseType = 'arraybuffer'; // XMLHttpRequest 2的新东西

xhr1.onload = function() {

// 音频数据在xhr.response中,而不是xhr.requestText

bufs.push(xhr1.response);

}

xhr1.send();

}

//

// 微信回调 //

//

var audio = document.getElementById('audio');

function runNow() {

context.decodeAudioData(bufs[0], function(buffer) {

source = context.createBufferSource();

source.buffer = buffer;

// 源直接连接到输出设备

source.connect(context.destination);

source.start(0);

});

}

if (window.WeixinJSBridge) {

WeixinJSBridge.invoke('getNetworkType', {}, function(e) {

setTimeout(runNow, 3000);

}, false);

}else{

document.addEventListener("WeixinJSBridgeReady", function() {

WeixinJSBridge.invoke('getNetworkType', {}, function(e) {

setTimeout(runNow, 3000);

});

}, false);

}

结果:iPhnoe5不支持,6p未知,能触发回调,但play代码无效

7.其他可能能实现的方法

模拟事件触发(trigger)

手动触发事件,在事件处理器中播放音频,未经测试

新API

官方公开的1.0.0版本API不支持播放音频(仅仅支持播放录音),后续可能会开放更多音频API,当然,都是后话

三.解决方案

没有完美兼容的解决方案,经测试,iPhone 5S及6上可以用JS API回调方式播放,Android自动播放比较容易,但某些深度定制机型仍然无法播放

自动播放的难点主要来自IOS,因为IOS系统限制不能自动下载音频视频,必须由用户动作触发播放:

In Safari on iOS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, preload and autoplay are disabled. No data is loaded until the user initiates it. This means the JavaScript play() and load() methods are also inactive until the user initiates playback, unless the play() or load() method is triggered by user action. In other words, a user-initiated Play button works, but an onLoad=”play()” event does not.

还看到一种解决方案:

if ("wView" in window) {

window.wView.allowsInlineMediaPlayback = "YES";

window.wView.mediaPlaybackRequiresUserAction = "NO";

}

据说添加上面代码之后,直接preload、autoplay就可以了

注意:未经测试,效果未知

四.DEMO

参考资料

微信php背景音乐,微信公众平台添加背景音乐相关推荐

  1. PC浏览器添加背景音乐 VS 手机浏览器添加背景音乐

    PC浏览器添加背景音乐 VS  手机浏览器添加背景音乐 最近需要在手机浏览器打开网页时自动播放背景音乐 网上找了很多都是PC浏览器打开网页时播放音乐的效果 现在个人进行些总结 1.PC浏览器中添加背景 ...

  2. 微信公众平台添加深圳通余额查询功能

    公交卡余额就像卫生纸一样,看着挺多的.刷着刷着就见底了.为了防患于未然.做了这样一个方便查询的微信公众接口. 原理很简单. 就是通过访问深圳通公司提供的一个查询接口  http://121.15.13 ...

  3. python设置背景音乐_python给视频添加背景音乐并改变音量的具体方法

    用到给视频添加背景音乐,并改变音量.记录一下,与碰到同样问题的朋友共享. import subprocess inmp4='E:/PycharmProjects/untitled2/hecheng/1 ...

  4. 计算机考试设置背景音乐,给Excel表格添加背景音乐

    平常老是用Excel 来大量处理表格,看久了总让人觉得乏味.如果在编辑Excel2003 表格时能自动播放一些优美的背景音乐那感觉应该很不错吧.本文要介绍的就是这么一种可以简单快速地为Excel200 ...

  5. css文件插入背景音乐,在HTML中添加背景音乐

    方法一: 在源代码中编写以下几句代码将能实现在HTML网页内添加背景音乐: src="http://demo.mimvp.com/html5/take_you_fly.mp3"&g ...

  6. css文件插入背景音乐,博客园添加背景音乐,背景效果!

    博客园添加背景音乐,背景效果 申请博客园js权限 申请话术 实例 尊敬的博客园管理员: 请求申请开通js权限,希望能够把自己的博客修饰的漂亮点,点缀自定义js插件效果,希望管理员可以批准,谢谢! 开通 ...

  7. 在html5中怎么设置背景音乐,HTML5简单实现添加背景音乐的几种方法

    这里推荐两种方法,就是两个标签 或者 常用 +css布局 隐藏播放器 做网站比较实用! html5添加音乐 说明: 1.src毫无疑问写路径. 2.使用hidden="true"表 ...

  8. html怎样把视频作为背景音乐,如何为视频添加背景音乐

    视频后期制作中,给视频添加背景音乐是不可缺少的其中一步.因为视频配上音乐,给观者视觉冲击的同时,也能让人有听觉上的触动.音乐与视频画面结合并相互影响着,烘托氛围,这才是完美的视频作品.不过背景音乐只是 ...

  9. python给视频加背景音乐_python给视频添加背景音乐并改变音量的具体方法

    用到给视频添加背景音乐,并改变音量.记录一下,与碰到同样问题的朋友共享. import subprocess inmp4='E:/PycharmProjects/untitled2/hecheng/1 ...

最新文章

  1. 让大规模深度学习训练线性加速、性能无损,基于BMUF的Adam优化器并行化实践...
  2. 个人学习进度(第十三周)
  3. iOS利用通知(NSNotification)进行传值
  4. 程序员:除了技术,还有什么更重要?
  5. input在type=number时去右边上下箭头
  6. OpenCV之图像梯度(笔记11)
  7. java三大框架增删改查_Java_Web三大框架之Hibernate增删改查
  8. Spacecom:将和信威集团在30天内决定新的收购协议
  9. Kudu:支持快速分析的新型Hadoop存储系统
  10. vc6 移植到vs2013
  11. MS08_067漏洞复现
  12. 什么3D建模软件适合初学者使用?
  13. 初级的数据分析师,主要需要做哪些工作?
  14. 深入理解Java虚拟机——Parallel Scavenge收集器
  15. python-函数读取内置函数序列化与反序列化
  16. 世界杯开赛在即,告诉你5个用区块链玩转球赛的秘密 | 内附独家资源
  17. 电磁元件(电阻,电容与电感)
  18. 手动实现李群SE(3)到李代数se(3)之间的对指数运算关系
  19. 计算机职称考试在线软件,职称计算机考试模拟软件windowXP模块免费版
  20. 大数据之于智能交通意义重大仍面临五大难题

热门文章

  1. 国家网络安全宣传周开幕 志翔科技护航核心数据与业务安全
  2. R 返回元素在数据框或者向量中的位置?
  3. 学习笔记(08):区块链应用案例-区块链商业应用-供应链管理
  4. 单机Eureka的构建
  5. cast from pointer to smaller type ‘int‘ loses information —— NDK 开发
  6. 机器学习_吴恩达-总
  7. 江苏省小学生计算机装备标准,江苏省小学信息技术装备标准new.doc
  8. cpu功能解析,cpu功能作用与其工作过程
  9. Flutter Container 组件
  10. 灌水滴~~ 讨论下怎样用电脑上手机3GQQ的西游