uni.createInnerAudioContext() 报错{“errMsg“:“MediaError“,“errCode“:-99}

报错原因:

uniapp的uni.createInnerAudioContext不支持直接播放base64音频文件,所以需要把base64音频转为本地音频文件再播放,缺点是转换会导致延迟,音频播放会有延迟

utils文件夹下新建tool.js文件

tool.js文件代码:

javascript 复制代码
export const base64ToFile = (base64Str, fileName, callback) => {
  var index = base64Str.indexOf(',');
  var base64Str = base64Str.slice(index + 1, base64Str.length);

  plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
    fs.root.getFile(fileName, {
      create: true
    }, function(entry) {
      var fullPath = entry.fullPath;
      let platform = uni.getSystemInfoSync().platform;
      if (platform == 'android') {
        var Base64 = plus.android.importClass("android.util.Base64");
        var FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
        try {
          var out = new FileOutputStream(fullPath);
          var bytes = Base64.decode(base64Str, Base64.DEFAULT);
          out.write(bytes);
          out.close();
          callback && callback(entry.toLocalURL());
        } catch (e) {
          console.log(e.message);
        }
      } else if (platform == 'ios') {
        var NSData = plus.ios.importClass('NSData');
        var nsData = new NSData();
        nsData = nsData.initWithBase64EncodedStringoptions(base64Str, 0);
        if (nsData) {
          nsData.plusCallMethod({
            writeToFile: fullPath,
            atomically: true
          });
          plus.ios.deleteObject(nsData);
        }
        callback && callback(entry.toLocalURL());
      }
    });
  });
}; 

在script下面导入

javascript 复制代码
<script>
import { base64ToFile } from "@/utils/tools.js";

方法中使用:

javascript 复制代码
      const base64Audio = uni.arrayBufferToBase64(response.data);
        const base64WithPrefix = `data:audio/mp3;base64,${base64Audio}`;
        
        // 使用 Promise 包装回调式的 base64ToFile
        const filePath = await new Promise((resolve) => {
          const fileName = `${word}_${Date.now()}.mp3`;
          base64ToFile(base64WithPrefix, fileName, (path) => {
            resolve(path);
          });
        });

参考文献:
uniapp开发安卓和ios播放base64音频(mp3,wav都可以),或者处理其它类型的base64数据成为url_uniapp 播放base64-CSDN博客 uniapp能播放base64格式的音频吗? - DCloud问答

相关推荐
d***93515 分钟前
springboot3.X 无法解析parameter参数问题
android·前端·后端
n***84071 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
执笔论英雄4 小时前
Slime异步原理(单例设计模式)4
开发语言·python·设计模式
e***74955 小时前
Modbus报文详解
服务器·开发语言·php
lly2024065 小时前
ASP 发送电子邮件详解
开发语言
小徐敲java5 小时前
python使用s7协议与plc进行数据通讯(HslCommunication模拟)
开发语言·python
likuolei5 小时前
XSL-FO 软件
java·开发语言·前端·数据库
6***37945 小时前
PHP在电商中的BigCommerce
开发语言·php
正一品程序员5 小时前
vue项目引入GoogleMap API进行网格区域圈选
前端·javascript·vue.js
Dev7z5 小时前
基于Matlab的多制式条形码识别与图形界面(GUI)系统设计与实现
开发语言·matlab