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}
 
 
 

更多关于uni-app 【报Bug】同样的路径 audio 组件可以播放,uni.createInnerAudioContext() 显示 {"errMsg":"MediaError","errCode":-99}的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如果你这个音频文件又短,体积又大,可能是采样率过高了,使用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
更多关于uni-app 【报Bug】同样的路径 audio 组件可以播放,uni.createInnerAudioContext() 显示 {"errMsg":"MediaError","errCode":-99}的实战教程也可以访问 https://www.itying.com/category-93-b0.html
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(); 
        
       
                     
                   
                    


