详细问题描述
计算机系统:win10
hx版本:1.9.4.20190426
APP运行手机:iOS12.2版本
在自定义基座中,自定义组件模式,真机运行。APP中有一个聊天模块,调用录音组件录音之后,调用音频组件播放录音。声音能正常听到,但是声音播放结束之后,会出现错误日志。具体日志如下:
15:08:21.799 [ERROR] : appServiceSDKScriptError
15:08:21.799 undefined is not an object (evaluating 'n.src');at api onAudioStateChange callback function
15:08:21.799 getAudioState@app-service.js:3:75555
15:08:21.799 Un@app-service.js:3:77415
15:08:21.799 app-service.js:4:844
15:08:21.799 invoke@app-service.js:4:889
15:08:21.799 invoke@app-service.js:4:105643
15:08:21.799 X@app-service.js:4:163217
15:08:21.799 app-service.js:4:170670
15:08:21.799 hc@app-service.js:4:310445
15:08:21.799 app-service.js:4:311579
15:08:21.799 app-service.js:4:164893
15:08:21.799 subscribeHandler@app-service.js:4:1563
15:08:21.799 P@app-service.js:3:5118
15:08:21.799 callbackFromNative
15:08:21.799 nativeEval
15:08:21.799 global code
播放完之后,如果此时我重新运行一次项目的话,再点击刚才的语音播放(因为我的聊天消息有在本地缓存),会出现如下错误:
在音频组件的onError事件里,errMsg:MediaError; errCode:-4
通过日志记录,两次播放的音频地址是一模一样的,所以可以排除是音频文件错误的原因。
下面贴出我播放语音的代码:
//播放语音
function playvoice(o) {
const _src = o.file || o.localurl || o.mediaUrl;
audioContext && audioContext.destroy() && (audioContext = null);
audioContext = uni.createInnerAudioContext();
audioContext.src = _src;
_debug('播放音频的地址为:' + _src);
audioContext.onEnded(function() {
o.action = "voiceplaystop";
_postMessage(o);
audioContext && audioContext.destroy() && (audioContext = null);
})
audioContext.onError((res) => {
console.log("audioContext error, msg:" + res.errMsg + "; errCode:" + res.errCode);
});
audioContext.play();
}
9 个回复
最佳回复
DCloud_uni-ad_HDX
HBuilderX 1.9.7 已修复
q***@163.com (作者)
补充一下:重新运行项目,播放语音,是不出声音的,onError事件返回的错误代码就是上文中的 -4 MediaError
DCloud_uni-ad_HDX
不出声的问题是因为调用 audioContext.destroy() 出错了
audioContext.destroy() 实现有些问题,下版修复
q***@163.com (作者)
今天晚上更新的版本,还是没有修复
2019-05-15 23:38
DCloud_uni-ad_HDX
回复 q***@163.com: 是1.9.6 alpha版吗 alpha版需要单独下载
2019-05-16 14:58
q***@163.com (作者)
回复 DCloud_uni-ad_HDX: 是的,今天都升级到1.9.7了。
2019-05-16 15:24
DCloud_uni-ad_HDX
回复 q***@163.com: 1.9.7已修复此问题
2019-05-18 15:35
q***@163.com (作者)
那么,上面那个能出声音,也报错是什么情况
q***@163.com (作者)
那么,上面那个能出声音,也报错是什么情况。
而且我刚安卓里面调试了一下,压根都不会有声音,而且onError里面报 errCode:-99
q***@163.com (作者)
第一次发送语音可以播放。然后重新运行一下项目,就不能播放了。
audioContext error, msg:MediaError; errCode:-4
报这个错误,alpha1.9.7版本还是这样
DCloud_Android_zl
麻烦提供一下可复现demo
2019-05-16 18:45
q***@163.com (作者)
项目第一次运行,录音是正常,播放也正常。然后将录音文件缓存起来。重新运行项目,点击播放,第一次正常。再点击一次就不正常。demo见附件。。。。。
DCloud_uni-ad_HDX
录音保存为临时文件会清理,如需再次播放需要手动保存
2019-05-17 18:50
q***@163.com (作者)
什么时候清理呢,我的demo你有没有调试。你手机真机运行一下。然后录音,播放,没有问题。然后把APP进程结束掉,重新点进APP,然后直接播放语音,前面一两次可能也是正常播放,多点几次就不行了。没有道理我点两次播放就给我删除了吧。
q***@163.com (作者)
那么我在APP里面调用uni.chooseImage选择照片,返回的路径如果我没有手动保存,也会被清理嘛。
手动保存是调用uni.saveFile接口嘛。返回的保存路径要不要做处理。