web audio不行,部分华为安卓手机不出声音,部分。
没办法,必须要出声,我们是英语教育类学习应用。
刚刚又测试,把< audio > 去掉,再次进入不强制重启手机,也不会卡死,看样子,真的是< audio >的问题啊。
web audio不行,部分华为安卓手机不出声音,部分。
没办法,必须要出声,我们是英语教育类学习应用。
刚刚又测试,把< audio > 去掉,再次进入不强制重启手机,也不会卡死,看样子,真的是< audio >的问题啊。
刚刚又测试了一波,新的发现,现在知道如何必现这个bug了:
如果使用传统的dom标签的网页,< audio >并不会卡死整个微信。
而我上面那个页面是基于cocos creator开发的< canvas >页面,快速来回播放< audio > 就是会干死整个微信。
你疯狂添加移除dom,能不炸?
你可以打开 开发者工具查看源码,同一个 url 的音频,永远只有一个audio标签,我已经做了key-value判断了。
甚至我在index页面添加了一个指定id的标签 < audio id=‘xxx’ src=’’>,通过更新 src 属性的方式都没用。
不是这个原因。
还有一个建议,重新创建一个demo,上边放两个按钮疯狂点击播放音效,看会不会卡死
目测,肯定会,因为上面的页面本身就很小很简单了。
今天忙没时间搞,一会空了在弄。
你是创建一个audio dom操作的,然后只用了一个audio然后要播放所有?,通过换src的值?还是疯狂的添加删除dom?其实你可以在在每次创建2个audio dom但是不挂载在dom上面,一样的用,我看你没有一次性用到两个音效。一个是当前点击要播放的一个是下一个可能点击要播放的,然后进入下一个场景或者layer再替换,播放。这样试试$bgMusic = document.createElement(‘audio’);$bgMusic.src = ‘/Public/faceResource/music/bgMusic.mp3’; 用的时候自己 $bgMusic.play()
我现在的做法就是你说的这种。
this._domAudio = document.getElementById('audio'); //生成一个audio元素 if(!this._domAudio) { this._domAudio = document.createElement('audio'); } this._domAudio.src = this._audioUrl; this._domAudio.controls = false; this._domAudio.autoplay = true; playDomAudio() { this._domAudio.load(); this._domAudio.play(); }
刚刚又测试了一波,
浏览器:Safari ;
机型:iphone 7;
ios系统:11.2.6;
当在这种环境下测试,如果突然被中断(比如,突然电量不足20%,系统提醒弹框出现;或者微信消息,切换到微信)切走safari, 再回来safari时,发生 Safari 卡死。
不要每次播放的时候都load()这个是重新加载视频的,比如你本来加载好了,你还要重新加载,这样会重复加载,增加内存,内存释放不可能很及时的
而且这个也不需要重新加载,它会自动预加载好的
刚刚测试了一波,你说的很对,好像就是这个load有问题。
现在使用:
this._domAudio.pause();
this._domAudio.currentTime = 0;
this._domAudio.play();
这样解决了一个问题,播放声音的时候,没有滞后很严重了。
但是会不会干死微信,暂时不清楚,没有 ios 11.2.6 系统的机器了。ios11.3 没问题。