关于audio标签在ios系统无法播放录音的问题整理:
<auido id="audio" ref="audio" src="audioPath" controls=controls></audio>
这样即使赋值有效额audioPath也无法播放音频文件。因为ios没有下载语音文件或者说是被safari拦截或者说是需要手动触发事件。网上的原因基本都大概如此。然后,我就查找了一下audio类,做了如下的代码修改:
mounted(){ this.$refs.audio.addEventListener("touchstart",function(){ if(this.readyState!=4){ this.load(); } }) }
audio对象具有readyState属性,有四个取值,只有当readyState==4时,录音文件可以播放,所以我为audio标签添加了一个touchstart事件,进行录音文件的加载。
代码可以不太严谨,我看网上还有适时removeEventListener的代码,我没有加进来。欢迎大家一下交流讨论,提出更优方案。不胜感激!!!!!
吐个小槽:ios的一些权限控制对于前端人员简直就是折磨,本来最初找到的实现方案在android已经测试通过了,结果到了ios几乎就是全部推翻重新做!!!!
关于录音和播放的其他问题,可以参考如下地址:
https://www.npmjs.com/package/js-audio-recorder/v/0.2.3 //js-audio-recorder可以实现录音,播放录音。安卓满足要求,ios无法使用。。。
https://www.npmjs.com/package/benz-amr-recorder //benz-amr-recorder可以用来播放amr音频,当安卓人员把amr音频返回给你的时候可以使用这个播放。录音部分没有尝试。
浙公网安备 33010602011771号