首先,第一个问题,威信用的可不是 amr 格式,amr 扩展名可能是为了历史兼容保留的,实际是 silk 格式,所以你如果用标准 amr 的音频播放软件是打不开威信的 amr 文件的。
其次,安卓呢给你提供了两个大宝贝 API ,一个叫 MediaCodec ,一个叫 AudioTrack ,这俩呢先一边等会儿。
然后,你手机如果是联发哥的呢,发哥会给你在系统中预装很多编解码器,比如
omx.mtk.xxx 。要是糕通的呢,通哥也会给你预装一堆
omx.qcom.xxx 。然后安卓是谷哥的嘛,谷哥也会给你预装一堆
omx.google.xxx 。再就是你的手机是 vivi 牌的,爱爱也会给你预装一堆
omx.vivi.xxx 。反正嘛,硬件厂商给你预装的编解码器呢大概率就是它芯片能支持的硬解码器,像谷歌这样的软件厂商呢给你预装的大概率就是软解码实现,当然也不绝对,看它们喜好。
最后轮到威信,威信播放语音信息时就有很多种选择了,威信可以选择:
①威信直接把 silk 格式的文件丢给 MediaCodec ,MediaCodec 呢就顺着上面系统注册了的解码器挨个找,诶,找到一个 omx.mtk.opus.decoder 的解码器,这个解码器是发哥提供的,然后解码工作就丢给了发哥的芯片去硬解。如果找到了一个 omx.google.opus.decoder 的解码器,这是谷哥提供的,然后解码工作就交给了软件实现的解码器去软解。
②威信把文件丢给 MediaCodec 后,MediaCodec 找了一圈“这解码,多是一件美事儿啊”,没有找到任何支持此格式的解码器。那就是系统解码不了呗,威信通过内置的 silk 库把 silk 格式的 amr 文件自己解码为 PCM ,然后把 PCM 流丢给 AudioTrack 剩下的安卓就给你完成了,这也是软解。
这些呢,都是我瞎说的。