分享

微信JSSDK录音功能开发遇到的坑

 昨夜雾浓 2017-11-23

摘要: 1、在进行微信网页录音功能开发的时候,微信jssdk初始化一定要把用到的方法写在isApiList中,不然调用方法起不到效果。 2、微信录音前会弹出“是否允许录音”,点击是才会执行wx.startRecord函数success回调,否则执行fail。所有,要把微信录音中的动作写在succe

1、在进行微信网页录音功能开发的时候,微信jssdk初始化一定要把用到的方法写在wx.config配置信息jsApiList中,不然调用方法起不到效果。


jsApiList: ['onMenuShareAppMessage','translateVoice','onVoiceRecordEnd','stopVoice'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2

2、微信录音前会弹出“是否允许录音”,点击是才会执行wx.startRecord函数success回调,否则执行fail。所以,要把微信录音过程中相关的动作写在success回调里。**这个‘是否允许录音’提示很没有规律,在开始调试的时候很正常,只有在第一次录音和一定时间之后(这个时间没有找到规律到底是多长)弹出提示;不正常的是有段时间,微信每次都会弹出这个提示,并且在有些手机上会卡住,必须点击返回才能正常录音。

3、微信录音到60秒时会出现不执行wx.uploadVoice的bug,导致音频获取不到,解决方法是在录音到59秒的时候停止录音。微信有一个到60秒自动停止的方法,碰到的问题是进入这个方法,到60秒会自动停止,但不会执行后面的上传语音的逻辑,只是把录音停止了,写的其他动作都没执行。

wx.onVoiceRecordEnd({
    // 录音时间超过一分钟没有停止的时候会执行 complete 回调
    complete: function (res) {
        var localId = res.localId; 
    }
});


4、微信录音后会返回本地音频地址,可以用wx.playVoice直接播放,上传数据时则要用wx.uploadVoice获取mediaId后上传这个数据,本地音频地址是不能上传的。等播放的时候用wx.downVoice以mediaId为参数再下载到本地播放本地音频文件。微信只会保留3天,3天过后mediaID就会失效,所以在3天内要把资源下载到自己的服务器中。

5、连续播放微信本地音频:录音之后会直接得到本地音频地址,可以用来直接播放,所以在录音页面连续播放音频时,会少一个下载音频的逻辑。如果进行连续点击音频进行播放,会导致微信方法崩溃掉,所以要加一个统一开关使音频回归到初始状态,这样再次点击时,就不会出现bug。注意:这个回归到初始化的方法要用wx.stopVoice方法。再连续播放时是自动进行的,所以这个地方也要加一个初始化操作。就是在播放每一个音频之前都加一个初始化操作,这个地方ios和Android处理方法不一样,ios要用wx.pauseVoice方法,Android要用wx.stopVoice才可以。

6、连续播放微信mediaID音频文件:在播放之前要用wx.downLoadVoice下载到本地,然后播放本地音频文件,这个地方用到了异步获取资源的操作了,这个时候在初始化时不能用遍历所有音频文件进行停止操作,需要在停止前进行判断,找出正在播放的进行停止。

7、连续播放自己服务器音频文件:这个时候用到audio标签播放,需要异步获取音频地址,所以不能再页面初始化的时候进行获取,会导致获取的结果顺序乱掉,需要在点击音频的时候在获取当前音频的url。这个时候会出现audio在某些手机上不能播放的兼容问题,就是audio地址如果是异步获取的,在第一次的时候播放不出来。解决方法是在页面中写入一个audio标签,src中放入一个时长1s的音频,在点击的时候就播放,然后异步获取音频url再进行替换。注意:ios是没有这个bug的,所以ios是不能用这个方法,如果用了就会出现bug。

8、监听audio音频播放停止事件,用到了audio标签的ended属性,如果停止了返回true。给audio标签添加监听事件,这个时候用于连续播放功能的记录顺序的下标要用全局变量。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多