uni-app中二进制音频文件小程序环境可正常播放,app-plus环境播放报错{"errMsg": "MediaError","errCode": -99 }

发布于 1周前 作者 eggper 来自 uni-app

uni-app中二进制音频文件小程序环境可正常播放,app-plus环境播放报错{“errMsg”: “MediaError”,“errCode”: -99 }
图片

2 回复

阅读文档 tips 部分 https://uniapp.dcloud.net.cn/api/media/audio-context.html
appplus 测试了哪些平台、哪些真机?最好提供复现工程,提供更多信息,有助于定位和解答你的问题。


在uni-app中处理二进制音频文件播放时,遇到小程序环境正常而app-plus环境报错的问题,通常与音频文件的加载、解码或播放环境差异有关。错误代码 {"errMsg": "MediaError","errCode": -99 } 指示的是一个媒体错误,具体可能由多种原因引起,如文件损坏、格式不支持或权限问题等。

以下是一个在uni-app中处理音频播放的示例代码,特别关注了在app-plus环境下可能遇到的问题和解决方案。请注意,由于具体错误原因可能多样,以下代码提供了一种较为通用的处理方式,并尝试解决常见的权限和路径问题。

<template>
  <view>
    <button @click="playAudio">播放音频</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      innerAudioContext: null,
      audioSrc: '' // 这里假设是已经获取的二进制音频文件的URL或路径
    };
  },
  methods: {
    // 假设音频文件已经通过某种方式(如网络请求)下载并存储到本地
    initAudio() {
      // 在app-plus环境下,确保有读取文件的权限,并正确获取文件路径
      #ifdef APP-PLUS
      const fs = uni.getFileSystemManager();
      const filePath = `${uni.env.USER_DATA_PATH}/audio/example.mp3`; // 替换为实际路径
      
      // 检查文件是否存在
      fs.access({
        path: filePath,
        success: () => {
          this.audioSrc = filePath;
        },
        fail: () => {
          console.error('文件不存在或无法访问');
        }
      });
      #else
      // 小程序环境下直接使用网络路径或本地路径
      this.audioSrc = 'https://example.com/audio/example.mp3'; // 替换为实际路径
      #endif

      this.innerAudioContext = uni.createInnerAudioContext();
      this.innerAudioContext.src = this.audioSrc;
      this.innerAudioContext.onError((err) => {
        console.error('音频播放错误:', err);
      });
    },
    playAudio() {
      this.innerAudioContext.play();
    }
  },
  onLoad() {
    this.initAudio();
  }
};
</script>

<style>
/* 样式部分省略 */
</style>

在上述代码中,我们根据环境(#ifdef APP-PLUS)分别处理了音频文件的路径设置。在app-plus环境下,我们使用uni.getFileSystemManager()来访问文件系统,确保文件存在并正确设置路径。同时,我们在createInnerAudioContext时监听onError事件,以便在播放出错时获取错误信息。

请注意,如果问题依旧存在,可能需要检查音频文件的格式是否被app-plus环境支持,或者尝试调整音频文件的编码参数。此外,确保在app-plus的manifest文件中配置了必要的权限(如读写存储权限)。

回到顶部