uniapp 出现 { "errmsg": "mediaerror", "errcode": -99 } 错误如何解决?

在uniapp开发中,调用媒体相关接口时出现错误提示:{ "errmsg": "mediaerror", "errcode": -99 },请问这个错误具体是什么原因导致的?应该如何解决?目前尝试了重新编译和更换真机调试,但问题依旧存在。希望有经验的朋友能帮忙分析下可能的原因和解决方案,谢谢!

2 回复

检查音频/视频文件格式、编码是否支持,文件是否损坏或路径错误。尝试更换文件或重新上传。


在 UniApp 中,{ "errmsg": "mediaerror", "errcode": -99 } 错误通常与媒体文件操作相关,例如音频、视频播放或录制失败。以下是常见原因及解决方法:


常见原因

  1. 文件路径错误:媒体文件不存在或路径不正确。
  2. 格式不支持:音频/视频格式不被平台兼容。
  3. 网络问题:网络资源加载失败(如在线音频/视频)。
  4. 权限问题:未获取录音或播放权限(如 Android 需要麦克风权限)。
  5. 系统资源占用:设备正在使用麦克风或扬声器。

解决方法

1. 检查文件路径

  • 本地文件需使用绝对路径,例如:/static/audio.mp3
  • 在线 URL 需确保可访问且无跨域问题。

2. 验证媒体格式

  • 音频:支持 MP3、AAC 等常见格式。
  • 视频:H.264 编码的 MP4 文件兼容性较好。
  • 使用工具转换格式(如 FFmpeg)后重试。

3. 处理网络资源

  • 检查在线文件 URL 是否有效:
    // 示例:使用 uni.downloadFile 预下载
    uni.downloadFile({
      url: 'https://example.com/audio.mp3',
      success: (res) => {
        if (res.statusCode === 200) {
          const tempFilePath = res.tempFilePath;
          // 使用临时路径播放
          uni.playVoice({ filePath: tempFilePath });
        }
      }
    });
    

4. 配置权限

  • Android:在 manifest.json 中添加所需权限:
    "permissions": {
      "android": {
        "requestPermissions": ["RECORD_AUDIO", "MODIFY_AUDIO_SETTINGS"]
      }
    }
    
  • iOS:在 manifest.jsonios 节点下配置权限描述。

5. 释放系统资源

  • 确保无其他应用占用麦克风/扬声器。
  • 播放前停止其他音频:
    uni.stopVoice(); // 停止当前播放
    

6. 错误捕获与重试

  • 在媒体 API 的 fail 回调中处理错误:
    uni.playVoice({
      filePath: 'audio.mp3',
      success: () => console.log('播放成功'),
      fail: (err) => {
        console.error('播放失败:', err);
        // 可加入重试逻辑
      }
    });
    

其他建议

  • 使用真机调试(部分问题在模拟器中无法复现)。
  • 查看 UniApp 官方文档确认 API 兼容性(如 uni.createInnerAudioContext 的用法)。
  • 更新 UniApp SDK 和手机系统至最新版本。

通过以上步骤排查,通常可解决大部分 -99 媒体错误问题。如果仍无法解决,请提供具体代码和操作场景以便进一步分析。

回到顶部