7***@qq.com
7***@qq.com
  • 发布:2018-10-25 18:07
  • 更新:2019-09-11 15:21
  • 阅读:2885

base64 音频数据在部分手机播放失败 setDataSourceFD failed.:status=0x80000000

分类:HBuilder

在使用官方base64 audio播放例子时,在特定一款安卓手机上报错 setDataSourceFD failed.:status=0x80000000,其中极少数音频数据能播放成功
其他所有安卓手机,及苹果手机均未出现该问题(已用大量相同音频数据测试)

手机型号为 小米8 miui10.0.6稳定版 android8.1.0

代码如下:
dataURL2Audio(base64Str, function(entry) {
var player = plus.audio.createPlayer(path);
player.play(function() {
player = null;
}, function(e) {
mui.alert("播放失败:" + path + e.message);
});
})
function dataURL2Audio(base64Str, callback) {
var base64Str = base64Str.replace('data:audio/amr;base64,', '');
var audioName = (new Date()).valueOf() + '.amr';
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
fs.root.getFile(audioName, {
create: true
}, function(entry) {
// 获得平台绝对路径
var fullPath = entry.fullPath;
if(mui.os.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);
} catch(e) {
console.log(e.message);
}
}
})
})
}

[QQ]
759493637
求解答

2018-10-25 18:07 负责人:无 分享
已邀请:
7***@qq.com

7***@qq.com

我也遇到了这个问题,老哥解决了没有?

  • 7***@qq.com (作者)

    我android单独处理的,把amr格式转为mp3然后用audio标签播放的

    2018-11-27 16:39

  • 7***@qq.com

    噢噢,谢谢啦

    2018-11-28 09:08

青木物联

青木物联

我也遇到了,怎么解决啊

  • 7***@qq.com (作者)

    android和ios分别处理 if(plus.os.name == "Android") {

    console.log('android');

    RongIMLib.RongIMVoice.stop();

    RongIMLib.RongIMVoice.play(base64Str);

    } else {

    plus.audio.createPlayer(path);

    }

    2019-01-15 16:38

  • 青木物联

    好的,谢谢

    2019-01-16 20:16

青木物联

青木物联

感谢这位兄弟提供信息,已经解决,补充说明,用融云的声音库实现播放base64语音
https://www.rongcloud.cn/docs/web.html#voice。

大海的凡夫俗子

大海的凡夫俗子

除了第三方插件,还有其他解决办法吗?我也遇到IOS可以播放base64,安卓却不行,写法和你的如出一辙

该问题目前已经被锁定, 无法添加新回复