uni-app getBackgroundAudioManager在安卓中测试域名可播放M4A正式域名报-99错误码但正式域名在IOS可正常播放M4A,MP3在安卓正式域名也可播放
uni-app getBackgroundAudioManager在安卓中测试域名可播放M4A正式域名报-99错误码但正式域名在IOS可正常播放M4A,MP3在安卓正式域名也可播放
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Windows 10 专业版 | HBuilderX |
操作步骤
无
预期结果
正常播放
实际结果
回调onEnded,报{"errMsg":"未知错误","errCode":-99}
bug描述
uni.getBackgroundAudioManager()函数,在安卓端赋值src时,音频为M4A格式会直接回调onEnded,报{"errMsg":"未知错误","errCode":-99}
,但是赋值为MP3时又是正常的。
我有两个域名,一个正式地址,一个测试地址。同一个M4A音频进行测试。手机是小米和红米。
测试地址:
- Android端 --正常
- IOS端 --正常
正式地址:
- Android端 --直接回调onEnded,报
{"errMsg":"未知错误","errCode":-99}
,MP3格式又是正常的 - IOS端 --正常
1 回复
在 uni-app 中使用 getBackgroundAudioManager
时,遇到在安卓设备上测试域名可以播放 M4A 文件,但正式域名报 -99 错误码,而在 iOS 设备上正式域名可以正常播放 M4A 文件,MP3 文件在安卓正式域名也可以正常播放的情况,可能是由于以下原因导致的:
可能的原因及解决方案
-
域名 HTTPS 问题:
- 在安卓设备上,正式域名可能没有正确配置 HTTPS,或者 HTTPS 证书存在问题。安卓设备对 HTTPS 的要求比 iOS 更严格。
- 解决方案:确保正式域名的 HTTPS 证书有效且正确配置,可以使用 SSL Labs 等工具检查证书的有效性。
-
MIME 类型配置问题:
- 服务器可能没有正确配置 M4A 文件的 MIME 类型,导致安卓设备无法正确识别和播放。
- 解决方案:在服务器上配置正确的 MIME 类型,确保
.m4a
文件的 MIME 类型为audio/mp4
或audio/x-m4a
。
-
跨域问题:
- 正式域名可能存在跨域问题,导致安卓设备无法正常加载音频文件。
- 解决方案:在服务器端配置 CORS(跨域资源共享),确保允许从你的应用域名访问音频文件。
-
音频文件编码问题:
- 安卓设备可能对某些 M4A 文件的编码格式支持不完全,导致无法播放。
- 解决方案:尝试将 M4A 文件转换为其他格式(如 MP3),或者使用不同的编码工具重新编码 M4A 文件。
-
网络问题或缓存问题:
- 正式域名可能存在网络问题,或者安卓设备缓存了错误的文件信息。
- 解决方案:清除安卓设备的缓存,或者尝试在不同的网络环境下测试。
-
uni-app 的兼容性问题:
getBackgroundAudioManager
在安卓设备上可能存在某些兼容性问题。- 解决方案:尝试更新 uni-app 到最新版本,或者使用其他音频播放插件或库进行测试。
调试步骤
-
检查域名和证书:
- 确保正式域名的 HTTPS 证书有效,并且没有过期。
-
检查服务器配置:
- 确保服务器正确配置了 M4A 文件的 MIME 类型,并且允许跨域访问。
-
检查音频文件:
- 使用不同的工具重新编码 M4A 文件,确保其编码格式兼容安卓设备。
-
调试代码:
- 在代码中添加调试信息,检查音频文件的 URL、加载状态、错误信息等。
-
网络调试:
- 使用 Chrome 的开发者工具或其他网络调试工具,检查音频文件的加载过程和网络请求状态。
示例代码
const backgroundAudioManager = uni.getBackgroundAudioManager();
backgroundAudioManager.src = 'https://your-official-domain.com/audio.m4a';
backgroundAudioManager.title = 'Audio Title';
backgroundAudioManager.coverImgUrl = 'https://your-official-domain.com/cover.jpg';
backgroundAudioManager.onPlay(() => {
console.log('开始播放');
});
backgroundAudioManager.onError((err) => {
console.error('播放错误:', err);
});