- 当前 Bug 的表现(可附上截图)
进行远程的mp3音频播放的时候,发现开发工具上表现正常,但是真机(测试机子为小米Note3)却不正常(通过开发者工具的预览功能调试)。
测试的音频为一个按钮的点击音效。
以下是开发者工具的控制台输出截图:
一次playCount对应一次canPlayCount,声音能在执行play()接口的时候马上播放。
以下是真机(小米Note3)的控制台输出截图(通过开发者工具的预览功能调试):
表现的效果为,playCount和canPlayCount次数并没有对上,调用play()的时候,声音并没有马上出来,而且,每次onWaiting有收到信息的时候,查看静态服务器后台输出,发现还会再次进行资源的请求。但每次都是用同一个innerAudioContext对象进行播放,按理来说,不应该重复加载资源才对。服务端输出内容如下:
- 预期表现
资源加载成功之后,应该是调用了play()接口,就要马上有声音出来才对,而且不应该每次play都重复进行远程资源的加载。
- 复现路径
- 提供一个最简复现 Demo
function testAudio(url, obj){
obj.canPlayCount = 0;
obj.playCount = 0;
var flag = false;
var innerAudioContext = wx.createInnerAudioContext();
var startPlay = function(){
if(flag) return;
flag = true;
window.setInterval(function(){
console.log("playCount---->", ++obj.playCount, " ", mo.DATE.format(mo.DATE.date()));
innerAudioContext.play();
}, 5000);
};
// var startPlay2 = function(){
// console.log("playCount---->", ++obj.playCount, " ", mo.DATE.format(mo.DATE.date()));
// innerAudioContext.play();
// };
innerAudioContext.onCanplay(function () {
console.log("canPlayCount---->", ++obj.canPlayCount, " ", mo.DATE.format(mo.DATE.date()));
startPlay();
});
innerAudioContext.onWaiting(function() {
console.log('onWaiting---->', obj.playCount);
});
innerAudioContext.onEnded(function (e) {
console.log("onEnded")
});
innerAudioContext.src = url;
}
调用:
testAudio(url, {});
url为一个远程的mp3地址。
小程序新手感觉,这个innerAudioContext bug好多啊。完全不如普通网页好用
多年前从业小程序外包快速开发,深受其害。
万没想到多年以后,又被小程序继续折磨,当年就是一坨,现在还是一坨 更大的一坨。
你这个 flag什么时候重置为false呢?然后你的5秒的定时器作用意义是什么?
flag是为了确保startPlay只在加载完毕之后,里面的内容只执行一次。 5秒的定时器,就是每隔5秒播放一次啊,然后看到的表现就是声音的播放时机不正确,日志的输出也跟预想的不一样。
那你testAudio调用后岂不是这个音效会无限的5秒播放?我认为还是你这个定时器设置的问题。建议把定时器放到外面,不要在testAudio里面实现可以 testAudio 里return 出innerAudioContext对象
我就是要无线的5秒播放一次啊,但是播放出来的效果不正常,并没有5秒播放出来一次。 你看下我输出的日志,效果并不是没5秒一次,真机跟开发者工具是有很大区别。