uni-app createInnerAudioContext 安卓端播放oss上音频地址报错
uni-app createInnerAudioContext 安卓端播放oss上音频地址报错
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Windows10_19042 | HBuilderX |
示例代码:
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = 'https://cos.ap-shanghai.myqcloud.com/defb-shanghai-030-privatev2-02-1256635546/501f-1400665836/5957-BjeN13g8RQ/59a49e1d43a2675744a01624ee5eceaf.mp3?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDd5HFyQbWAXdS0HGzRcV7TYMuBBuLWP1M%26q-sign-time%3D1653977197%3B1656569197%26q-key-time%3D1653977197%3B1656569197%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D434bdb10aa22ac8d050c958b11dba665422510e7&im-time-expired=1656569197';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res);
});
操作步骤:
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src = 'https://cos.ap-shanghai.myqcloud.com/defb-shanghai-030-privatev2-02-1256635546/501f-1400665836/5957-BjeN13g8RQ/59a49e1d43a2675744a01624ee5eceaf.mp3?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDd5HFyQbWAXdS0HGzRcV7TYMuBBuLWP1M%26q-sign-time%3D1653977197%3B1656569197%26q-key-time%3D1653977197%3B1656569197%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D434bdb10aa22ac8d050c958b11dba665422510e7&im-time-expired=1656569197';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res);
});
预期结果:
实际结果:
在安卓机上 播放oss上的视频地址 播放错误 返回 {“errMsg”:“MediaError”,“errCode”:-99}
bug描述:
在安卓机上 播放oss上的视频地址 播放错误 返回 {“errMsg”:“MediaError”,“errCode”:-99}
oss地址会过期 过期之后无法访问 我在测试的时候 oss地址是没有过期的 这个问题只在android上出现 ios正常
我也遇到这样的问题,开始的时候使用的是STS授权,结果地址很长很长,播放的时候,全部是-99。后来不使用STS了,地址改成这样短的
https://rrr-oss.oss-cn-hangzhou.aliyuncs.com/audio/20230528/Et2Q2NdHiBZEt8t5bQpS.mp3?response-content-disposition=inline&OSSAccessKeyId=LTAI5tCP8hCZsEWQNT23QKQn&Expires=1685880334&Signature=Mzab%2Fe7EaVwe3ONQPWEpHYk%2Bnfc%3D
结果是,一般都都可以播放,偶尔无法播放。或者说一个播放列表,随机的无法播放,同一个音频一会儿能播放,一会儿不能,都在时间限制内。
这样的问题只在安卓10上出现,浏览器上长短地址都可以正常播放,不会出现任何问题。
1111
一样的问题,一年啦现在还有呢
通过先下载再播放解决了
在使用 uni-app
的 createInnerAudioContext
播放 OSS(阿里云对象存储)上的音频文件时,安卓端可能会遇到一些问题,导致无法正常播放音频。以下是一些可能的原因和解决方法:
1. 音频格式问题
- 原因: 某些安卓设备可能不支持特定的音频格式,例如
.mp3
文件在某些设备上可能无法正常播放。 - 解决方法: 确保音频文件的格式是安卓设备广泛支持的格式,如
.mp3
或.wav
。你可以尝试将音频文件转换为其他格式后再测试。
2. 音频文件编码问题
- 原因: 音频文件的编码方式可能不被安卓设备支持。
- 解决方法: 尝试重新编码音频文件,使用标准的编码参数。你可以使用工具如
FFmpeg
来重新编码音频文件。
3. 跨域问题
- 原因: 如果你的音频文件托管在 OSS 上,可能会遇到跨域问题,导致音频无法加载。
- 解决方法: 确保 OSS 的跨域设置正确。你可以在 OSS 的管理控制台中配置跨域规则,允许你的域名访问音频文件。
4. 网络问题
- 原因: 网络不稳定或音频文件过大,导致加载失败。
- 解决方法: 确保网络连接稳定,并尝试压缩音频文件以减小文件大小。
5. 音频地址问题
- 原因: 音频地址可能不正确或无法访问。
- 解决方法: 检查音频地址是否正确,并确保音频文件可以通过浏览器直接访问。
6. 权限问题
-
原因: 安卓设备可能缺少必要的权限来播放网络音频。
-
解决方法: 在
manifest.json
中确保已添加必要的权限,如网络访问权限:"permission": { "scope.userLocation": { "desc": "你的位置信息将用于小程序位置接口的效果展示" } }
7. uni-app 版本问题
- 原因: 你使用的
uni-app
版本可能存在已知的 bug。 - 解决方法: 确保你使用的是最新版本的
uni-app
,或者尝试降级到已知稳定的版本。
8. 调试和日志
- 原因: 没有足够的调试信息来定位问题。
- 解决方法: 在代码中添加更多的日志输出,检查
onError
回调中的错误信息,以便更好地定位问题。
示例代码
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.src = 'https://your-oss-bucket.aliyuncs.com/audio.mp3';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((err) => {
console.error('播放错误:', err);
});
innerAudioContext.play();