uni-app ios端uni.createInnerAudioContext()播放失败{"errMsg":"MediaError","errCode":-5} 安卓正常

uni-app ios端uni.createInnerAudioContext()播放失败{“errMsg”:“MediaError”,“errCode”:-5} 安卓正常

开发环境 版本号 项目创建方式
Windows 22H2 HBuilderX

产品分类:
uniapp/App

PC开发环境操作系统:
Windows

HBuilderX类型:
正式

HBuilderX版本号:
3.99

手机系统:
iOS

手机系统版本号:
iOS 16

手机厂商:
苹果

手机机型:
iphone 14 plus

页面类型:
vue

vue版本:
vue2

打包方式:
云端

示例代码:

const innerAudioContext = uni.createInnerAudioContext();    
innerAudioContext.autoplay = true;    
innerAudioContext.src ='https://webfs.hw.kugou.com/202401241520/96d1590181e9d59edc624a260826d076/KGTX/CLTX003/b5b15c23597a62cc1cd536953447adfa.mp3'    
innerAudioContext.onPlay(() => {    
    console.log('开始播放')    
});    
innerAudioContext.onEnded(() => {    
    console.log('语音播报结束')    
    innerAudioContext.destroy() // 销毁    
});    
innerAudioContext.onError((e) => {    
    console.log('语音播报失败', e)    
    innerAudioContext.destroy() // 销毁    
});

操作步骤:

真机运行时无法播放MP3

预期结果:

正常播放MP3

实际结果:

无法播放MP3

bug描述:

安卓正常播放MP3文件 ios时直接回调onError返回{"errMsg":"MediaError","errCode":-5}

更多关于uni-app ios端uni.createInnerAudioContext()播放失败{"errMsg":"MediaError","errCode":-5} 安卓正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

解决了吗?遇到了同样的问题

更多关于uni-app ios端uni.createInnerAudioContext()播放失败{"errMsg":"MediaError","errCode":-5} 安卓正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 中,uni.createInnerAudioContext() 用于创建音频播放器。你在 iOS 端遇到播放失败的问题,错误码为 -5,而 Android 端正常。这个问题可能与 iOS 的音频格式支持、网络请求、或权限配置有关。以下是一些可能的原因和解决方案:


1. 音频格式不支持

iOS 对音频格式的支持有限,可能不支持某些格式(如 .mp3 文件编码格式不兼容)。请确保音频文件是 iOS 支持的格式,如 .mp3(使用标准编码)、.aac.m4a 等。

解决方案:

  • 检查音频文件的格式,确保是 iOS 支持的格式。
  • 如果音频文件是 .mp3,尝试重新编码为标准的 MP3 格式。

2. 音频文件路径问题

如果音频文件是通过网络加载的,iOS 可能对网络请求有更严格的限制,比如 HTTPS 要求。

解决方案:

  • 确保音频文件的 URL 是 HTTPS 协议(iOS 要求网络资源必须使用 HTTPS)。
  • 如果是本地文件,确保路径正确,例如:
    const audio = uni.createInnerAudioContext();
    audio.src = '/static/audio/test.mp3'; // 确保路径正确
    audio.play();
    

3. iOS 权限问题

iOS 可能需要用户交互(如点击事件)才能触发音频播放,否则会被系统阻止。

解决方案:

  • 确保音频播放是在用户交互事件(如按钮点击)中触发的,例如:
    <button [@click](/user/click)="playAudio">播放音频</button>
    
    methods: {
      playAudio() {
        const audio = uni.createInnerAudioContext();
        audio.src = 'https://example.com/audio.mp3';
        audio.play();
      }
    }
    

4. 音频文件损坏或无法访问

如果音频文件损坏或服务器无法访问,iOS 可能会抛出错误。

解决方案:

  • 检查音频文件是否完整,确保可以通过浏览器直接访问。
  • 如果是本地文件,确保文件已正确打包到项目中。

5. iOS 系统限制

iOS 对音频播放有一些系统限制,比如后台播放需要特殊配置。

解决方案:

  • 如果需要后台播放,确保在 manifest.json 中配置了后台播放权限:
    {
      "app-plus": {
        "distribute": {
          "ios": {
            "UIBackgroundModes": ["audio"]
          }
        }
      }
    }
    

6. 调试和日志

如果以上方法无法解决问题,可以通过调试进一步排查。

解决方案:

  • 监听 onError 事件,查看具体错误信息:
    const audio = uni.createInnerAudioContext();
    audio.src = 'https://example.com/audio.mp3';
    audio.onError((err) => {
      console.error('音频播放失败:', err);
    });
    audio.play();
    

7. uni-app 版本问题

确保使用的 uni-app 版本是最新的,旧版本可能存在兼容性问题。

解决方案:

  • 更新 uni-app 到最新版本:
    npm update [@dcloudio](/user/dcloudio)/uni-app
回到顶部