要求: 1. 做到Android,Iphone,pc格式通用.
2. 文件大小上尽可能越小越好.
1. 为什么微信的android版的语音文件采用amr格式,而iPhone版采用aud格式?
aud格式的全称为Advanced WMA Workshop 是wma的改进型,WMA在压缩比和音质方面都超过了MP3。所以采用aud是出于音效上的考虑吧。
2. 类似产品使用的技术
talkbox Android版用的是ilbc的第三方编解码库,在iPhone上用的是caf
微信 Android版估计是amr估计转码的是交给腾讯强大的服务器了。
米聊 Android版和Iphone版用的都是speex
注:
3. 微信android使用的是amr编码;iphone 使用aud转码会在微信服务器上完成。android上使用了speex这个库进行压缩编码。在服务器做格式转换确实比客户端方便多了,用ffmpeg就可以搞定了,也是瘦客户端的一种思路,而且可以依此延伸很多扩展业务。
注
4. 考虑采用的方案
1> speex需要Android和ios都进入转码.
2> android支持amr,低版本不支持ilbc, ios高版本(4.3)只支持ilbc,不能支持amr。
android将语音转ilbc,
5. ios实现amr编解码方案具体做法
录制
1>将语音录成原始pcm码
注意这里,虽然录制是pcm码,但出来的文件ios依然会封装一层,将其包装成pcf格式。所以就有了第二步。
2>将pcf中的pcm码取出来
使用libopencore库将其编成amr格式,这时可以发送给android端播放了。
播放
1>将android版本发送过来的amr解码出来
2>播放原始pcm即可
代码文件都放在github上了,有需要的可以参考一下。 https://github.com/hhuai/ios_util
6. android将语音转ilbc