uni-app中二进制音频文件小程序环境可正常播放,app-plus环境播放报错{"errMsg": "MediaError","errCode": -99 }
uni-app中二进制音频文件小程序环境可正常播放,app-plus环境播放报错{“errMsg”: “MediaError”,“errCode”: -99 }
阅读文档 tips 部分 https://uniapp.dcloud.net.cn/api/media/audio-context.html
appplus 测试了哪些平台、哪些真机?最好提供复现工程,提供更多信息,有助于定位和解答你的问题。
在uni-app中处理二进制音频文件播放时,遇到小程序环境正常而app-plus环境报错的问题,通常与音频文件的加载、解码或播放环境差异有关。错误代码 {"errMsg": "MediaError","errCode": -99 }
指示的是一个媒体错误,具体可能由多种原因引起,如文件损坏、格式不支持或权限问题等。
以下是一个在uni-app中处理音频播放的示例代码,特别关注了在app-plus环境下可能遇到的问题和解决方案。请注意,由于具体错误原因可能多样,以下代码提供了一种较为通用的处理方式,并尝试解决常见的权限和路径问题。
<template>
<view>
<button @click="playAudio">播放音频</button>
</view>
</template>
<script>
export default {
data() {
return {
innerAudioContext: null,
audioSrc: '' // 这里假设是已经获取的二进制音频文件的URL或路径
};
},
methods: {
// 假设音频文件已经通过某种方式(如网络请求)下载并存储到本地
initAudio() {
// 在app-plus环境下,确保有读取文件的权限,并正确获取文件路径
#ifdef APP-PLUS
const fs = uni.getFileSystemManager();
const filePath = `${uni.env.USER_DATA_PATH}/audio/example.mp3`; // 替换为实际路径
// 检查文件是否存在
fs.access({
path: filePath,
success: () => {
this.audioSrc = filePath;
},
fail: () => {
console.error('文件不存在或无法访问');
}
});
#else
// 小程序环境下直接使用网络路径或本地路径
this.audioSrc = 'https://example.com/audio/example.mp3'; // 替换为实际路径
#endif
this.innerAudioContext = uni.createInnerAudioContext();
this.innerAudioContext.src = this.audioSrc;
this.innerAudioContext.onError((err) => {
console.error('音频播放错误:', err);
});
},
playAudio() {
this.innerAudioContext.play();
}
},
onLoad() {
this.initAudio();
}
};
</script>
<style>
/* 样式部分省略 */
</style>
在上述代码中,我们根据环境(#ifdef APP-PLUS
)分别处理了音频文件的路径设置。在app-plus环境下,我们使用uni.getFileSystemManager()
来访问文件系统,确保文件存在并正确设置路径。同时,我们在createInnerAudioContext
时监听onError
事件,以便在播放出错时获取错误信息。
请注意,如果问题依旧存在,可能需要检查音频文件的格式是否被app-plus环境支持,或者尝试调整音频文件的编码参数。此外,确保在app-plus的manifest文件中配置了必要的权限(如读写存储权限)。