uni-app uni.createInnerAudioContext() 播放特定网络链接的音频播放失败,这个链接的音频文件下载下来播放是正常的

uni-app uni.createInnerAudioContext() 播放特定网络链接的音频播放失败,这个链接的音频文件下载下来播放是正常的

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 Apple M2;MacOS 14.5 (23F79)
HBuilderX类型 正式
HBuilderX版本 4.66
手机系统 Android
手机系统版本 Android 13
手机厂商 一加/小米
手机机型 安卓手机
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

示例代码:

this.audioContext = uni.createInnerAudioContext(); // 创建音频上下文  

this.audioContext.onCanplay(() => {
console.log('-----可以播放音频-----');
})

this.audioContext.onError((err) => {
console.error('音频播放失败', err);
console.log('音频路径',this.audioContext.src)
toast('音频播放失败');
if (this.onFinish) this.onFinish(); // 发生错误时调用回调
});

// 播放指定索引的音频
private playAudioAtIndex(index: number) {
if (index < 0 || index >= this.audioList.length) return;

this.audioContext.stop(); // 停止当前音频  
this.audioContext.src = this.audioList[index]; // 设置音频文件路径  
this.audioContext.volume = this.volume; // 设置音量  
this.audioContext.play(); // 开始播放  
}

操作步骤:

  1. createInnerAudioContext 播放网络路径:
https://XXXX.aliyuncs.com/audio/202507/20250701150516686388ac6227a.mp3?Expires=1751612716&OSSAccessKeyId=LTAI5tFRY33oR23Tatejksdx&Signature=nGvxvuAyheTXoazsdla%2Bh4BPQ4Y%3D
  1. 报错{“errMsg”:“MediaError”,“errCode”:-99}

预期结果:

  1. 能正常播放

实际结果:

  1. 报错{“errMsg”:“MediaError”,“errCode”:-99},无法播放

bug描述:

  1. 使用uni.createInnerAudioContext()播放网络mp3
  2. 报错:{“errMsg”:“MediaError”,“errCode”:-99}
  3. 这个链接的mp3文件放到其他网络路径下是ok的
  4. 报错的网络路径类似如下:
https://XXXX.aliyuncs.com/audio/202507/20250701150516686388ac6227a.mp3?Expires=1751612716&OSSAccessKeyId=LTAI5tFRY33oR23Tatejksdx&Signature=nGvxvuAyheTXoazsdla%2Bh4BPQ4Y%3D
  1. 有疑问:是不是createInnerAudioContext 播放的时候对这个路径处理异常导致无法播放???

更多关于uni-app uni.createInnerAudioContext() 播放特定网络链接的音频播放失败,这个链接的音频文件下载下来播放是正常的的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

hello,可以私信我发一下你这个文件链接吗?我测试一下

更多关于uni-app uni.createInnerAudioContext() 播放特定网络链接的音频播放失败,这个链接的音频文件下载下来播放是正常的的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个网络路径的链接使用createInnerAudioContext播放在h5正常,在app才会报错:{“errMsg”:“MediaError”,“errCode”:-99}

目前app使用renderjs的方式来播放音频

回复 菜菜2: 下载到本地之后播放呢?

回复 DCloud_UNI_yuhe: 目前没去测试这种,后端暂时改了链接了

从你的描述和错误代码来看,这是一个典型的音频源URL格式问题。errCode: -99 通常表示音频源无法加载或格式不支持。

主要问题在于你的音频URL包含了URL特殊字符和查询参数:

https://XXXX.aliyuncs.com/audio/202507/20250701150516686388ac6227a.mp3?Expires=1751612716&OSSAccessKeyId=LTAI5tFRY33oR23Tatejksdx&Signature=nGvxvuAyheTXoazsdla%2Bh4BPQ4Y%3D

URL中的%2B(加号编码)和%3D(等号编码)等特殊字符在createInnerAudioContext处理时可能出现解析异常。

解决方案:

  1. URL编码处理 在设置src前对URL进行完整编码:
this.audioContext.src = encodeURI(this.audioList[index]);
  1. 分离参数方式 如果可能,建议将音频文件路径与参数分离,使用纯净的MP3 URL:
// 提取纯净的音频路径,去除签名参数
const cleanUrl = this.audioList[index].split('?')[0];
this.audioContext.src = cleanUrl;
回到顶部