参考文档:

1.https://github.com/yxl/opencore-amr-js   (将amr文件转为wav格式的编解码项目)


因为项目需要,要将amr的base46格式的音频文件在IOS,android微信内置浏览器播放。项目中使用的第三方IM为融云,经过调研发现,使用融云js播放语音的方式,可以在IOS上播放,但是在Android上无法播放,而且h5的audio组件,不支持amr格式的音频文件。

最后得出的结论,IOS上的audio支持amr格式播放,android上audio组件不支持amr格式播放,包括使用融云js播放语音的方式,使用的也是audio组件。

想到的方案是,将amr的base64文件进行格式转换,转换为mp3,wav等audio支持的格式,然后进行播放,没有找到很好的资源。

经过领导的一句话,尝试性的找融云客服咨询了一下,看看有没有相关的项目,客服给了opencore-amr-js项目,是将amr格式的文件转换为wav格式的音频文件,进行播放。

将项目发布到测试环境,在微信内置浏览器跑了一下,得到的答案是,android可以正常播放,但是IOS无法播放;其中有一个对象,在IOS环境中,好像是找不到,运行就报错。

于是,综合了一下,得到了最终的解决方案,

IOS使用融云js进行语音播放,Android使用opencore-amr-js进行语音播放;播放语音时,判断机器为Android还是IOS,来选择播放方式。

在将opencore-amr-js项目往自己项目迁移的过程中,发现,融云js中使用的Libamr-2.2.5.min.js 文件,就是opencore-amr-js项目中的amrnb.js文件,也就是说,融云js也是在  opencore-amr-js项目的基础上开发的,而且改动也非常小,Android中需要使用的方法,都没有发生变动,感觉还是挺开心的,因为amrnb.js文件有474kb,太大了,如果在加上融云js的Libamr-2.2.5.min.js 文件,整个聊天室,得有1兆多了,加载时间太长了。

下面,将Android播放语音的代码放在下面:

demo下载地址,demo在项目的js目录下面。

    AMR decode/encode tests    

Test decoder

Convert yuan.amr to wav file and compare with yuan.wav:

Decode amr file and play

yuan.amr

Select a local file and play:

Encode audio to amr file and play

hello.ogg

Select a local file to encode and play:

base64测试

Amr to wav

yuan.amr

Select a local file, convert and play:

wav file content:























更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  5. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  6. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  7. android支持https通讯,交叉编译 libcurl libnghttp2 oponssl
  8. 【Android】lib依赖
  9. Android资源文件在配置文件中的使用

随机推荐

  1. 【原创】【Android(安卓)Camera】—— 关
  2. Ubuntu下安装Android(安卓)Studio全过程(2
  3. Ubuntu 16.04 64bit 编译 Android(安卓)4
  4. 【Android(安卓)Developers Training】 2
  5. Android滑动回弹效果
  6. Flutter知识点:数据存储之SharedPreferen
  7. android内存泄露 mat
  8. Application Resources
  9. 【原】android本地推送
  10. Android(安卓)-- Messenger与Service