uni-app 【报Bug】同样的路径 audio 组件可以播放,uni.createInnerAudioContext() 显示 {"errMsg":"MediaError","errCode":-99}
uni-app 【报Bug】同样的路径 audio 组件可以播放,uni.createInnerAudioContext() 显示 {“errMsg”:“MediaError”,“errCode”:-99}
示例代码:
//ws返回
(res) => {
console.log(res, '收到消息了====')
//使用createInnerAudioContext时候 使用下面代码
this.src = uni.arrayBufferToBase64(res)
//使用audio组件时候 使用下面代码
// this.src = `data:audio/mp3;base64,${uni.arrayBufferToBase64(res)}`;
},
playAudio() {
if (this.src) {
this.audio= uni.createInnerAudioContext();
let base64Audio = `data:audio/mp3;base64,${this.src}`;
this.audio.src = base64Audio;
this.audio.autoplay = true
this.audio.onPlay(()=>{
console.log('播放了====')
});
this.audio.onError((err) => {
console.log(err, '播放失败了==')
})
this.audio.onEnded(function() {
this.audio.destroy();
console.log('开始播放了==')
});
} else {
console.error('No audio URL available');
}
},
操作步骤:
//ws返回
(res) => {
console.log(res, '收到消息了====')
//使用createInnerAudioContext时候 使用下面代码
this.src = uni.arrayBufferToBase64(res)
//使用audio组件时候 使用下面代码
// this.src = `data:audio/mp3;base64,${uni.arrayBufferToBase64(res)}`;
},
playAudio() {
if (this.src) {
this.audio= uni.createInnerAudioContext();
let base64Audio = `data:audio/mp3;base64,${this.src}`;
this.audio.src = base64Audio;
this.audio.autoplay = true
this.audio.onPlay(()=>{
console.log('播放了====')
});
this.audio.onError((err) => {
console.log(err, '播放失败了==')
})
this.audio.onEnded(function() {
this.audio.destroy();
console.log('开始播放了==')
});
} else {
console.error('No audio URL available');
}
},
预期结果:
//ws返回
(res) => {
console.log(res, '收到消息了====')
//使用createInnerAudioContext时候 使用下面代码
this.src = uni.arrayBufferToBase64(res)
//使用audio组件时候 使用下面代码
// this.src = `data:audio/mp3;base64,${uni.arrayBufferToBase64(res)}`;
},
playAudio() {
if (this.src) {
this.audio= uni.createInnerAudioContext();
let base64Audio = `data:audio/mp3;base64,${this.src}`;
this.audio.src = base64Audio;
this.audio.autoplay = true
this.audio.onPlay(()=>{
console.log('播放了====')
});
this.audio.onError((err) => {
console.log(err, '播放失败了==')
})
this.audio.onEnded(function() {
this.audio.destroy();
console.log('开始播放了==')
});
} else {
console.error('No audio URL available');
}
},
预期 可以播放
实际结果:
播放不了 报错 {“errMsg”:“MediaError”,“errCode”:-99}
bug描述:
ws返回的 buffer数据 我转换成base64 然后data:audio/mp3;base64,${this.src}
同样的路径 audio 组件可以播放 ;uni.createInnerAudioContext() 显示 {“errMsg”:“MediaError”,“errCode”:-99}
如果你这个音频文件又短,体积又大,可能是采样率过高了,使用ffmpeg调整转换率到44100即可
ffmpeg.exe -i onChecking.mp3 -ar 44100 onChecking44100.mp3
ffmpeg.exe -i onLongWaiting.mp3 -ar 44100 onLongWaiting44100.mp3
ffmpeg.exe -i onCheckFinish.mp3 -ar 44100 onCheckFinish44100.mp3
ffmpeg.exe -i onConnect.mp3 -ar 44100 onConnect44100.mp3
ffmpeg.exe -i newMsg.mp3 -ar 44100 newMsg44100.mp3
audio 路径 是src srcs 是我把路径写死测试了一下
作者这个问题解决了吗
如果你有问题可以参考这个回答。
如果仍有问题,请提供脱敏后的音频文件用于测试。
在使用 uni-app
开发时,如果你遇到 uni.createInnerAudioContext()
报错 {"errMsg":"MediaError","errCode":-99}
,而同样的路径在 audio
组件中可以正常播放,可能是以下几个原因导致的:
1. 路径问题
- 相对路径:
uni.createInnerAudioContext()
对路径的处理可能与audio
组件不同。确保你使用的是绝对路径或正确的相对路径。 - 网络路径:如果你使用的是网络路径,确保路径是有效的,并且服务器支持跨域请求。
解决方案:
- 尝试使用绝对路径或完整的网络路径。
- 如果是本地文件,确保路径正确,并且文件存在于指定位置。
2. 文件格式问题
uni.createInnerAudioContext()
可能对某些音频格式支持不完全,或者文件本身存在问题。
解决方案:
- 确保音频文件格式是支持的格式(如
.mp3
,.wav
等)。 - 尝试使用其他音频文件进行测试。
3. 跨域问题
- 如果你使用的是网络路径,可能会遇到跨域问题。
audio
组件可能对跨域请求的处理与uni.createInnerAudioContext()
不同。
解决方案:
- 确保服务器配置了正确的 CORS 头,允许跨域请求。
- 如果是本地开发,可以尝试使用本地服务器来避免跨域问题。
4. 平台差异
uni-app
支持多平台,不同平台对uni.createInnerAudioContext()
的实现可能有所不同。
解决方案:
- 检查你当前运行的平台(如微信小程序、H5、App 等),查看是否有平台特定的限制或问题。
- 查阅
uni-app
官方文档,了解不同平台的兼容性。
5. 代码问题
- 检查你的代码,确保
uni.createInnerAudioContext()
的使用方式正确。
示例代码:
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.src = 'https://example.com/path/to/audio.mp3';
innerAudioContext.play();
解决方案:
- 确保
src
属性设置正确,并且在调用play()
之前已经设置好。
6. 错误处理
- 添加错误处理逻辑,捕获并处理可能的错误。
示例代码:
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.src = 'https://example.com/path/to/audio.mp3';
innerAudioContext.onError((err) => {
console.error('音频播放错误:', err);
});
innerAudioContext.play();