MediaCodec的使用没什么好说的,开发者官网的介绍颇为详尽,今天我们进入源码,从初始化流程说起,深入探寻一下MediaCodec的秘密。
获取MediaCodecList的流程
想要初始化一个MediaCodec实例,总要先拿到当前系统所支持的codec列表,也就是MediaCodecList,再从其中得到我们需要的具体codec。
codec列表可以在系统的vendor/etc目录下找到,位于media_codec.xml等几个xml文件中,在出厂时就已经配好了。所以如果只是想要快速查看,可以不用写代码,直接找个手机adb进去看看。
MediaCodecList的本质是一个MediaCodecInfo数组,其构建流程如下图所示
有人说了,假如我已经知道自己要什么类型的MediaCodec,那直接创建对应的实例,然后调用MediaCodec.getCodecInfo不行吗,何必要通过MediaCodecList呢,岂不啰嗦?我劝你最好不要这么干,在某些机型上,MediaCodec.getCodecInfo会引发crash,相比之下,MediaCodecList是更靠谱的选择。
根据媒体格式创建对应的MediaCodec
我们先岔开话题,假设现在的场景是使用MediaExtractor来解析输入文件,看看