概述
- 解码是编码的逆过程,对编码后的数据进行逆向操作,还原原始数据的过程
- 前面几个章节详细讲解了图像基础以及编码流程,其中并未涉及具体算法,编解码算法较为复杂&枯燥,对于Android音视频开发应用层初学者而言,可以暂时跳过算法的学习
- 目前有很多成熟的编解码工具,MediaCodec就是Android平台专门处理硬编解码的工具
编解码的软硬之分
- 软编软解码:使用CPU进行编码,一般是执行代码运行算法指令编码,效率低、资源占用高、兼容性好!
- 硬编硬解码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等,效率高、资源占用低、兼容性差!
MediaCodec
-
MediaCodec
是Android平台提供的一个底层的音视频编解码框架,它是安卓底层多媒体基础框架的重要组成部分。它经常和MediaExtractor
、MediaSync
、MediaMuxer
、MediaCrypto
、MediaDrm
、Image
、Surface
、AudioTrack
等一起使用 -
MediaCodec大体流程
MediaCodec大体流程
上图所示,数据左进右出,其中有输入和输出端各有若干个buffer,输入端不断拿到一个空buffer,装上数据,传入MediaCodec,输出端不断从MediaCodec获取到buffer,每次得到处理好的数据后,再将buffer交还给MediaCodec
-
MediaCodec状态
MediaCodec状态
上图所示,MediaCodec可以理解为一个状态机,期间会经历多个状态,具体来说是总共有三个大状态:Stopped、Executing 、Released,其中Stopped包含Uninitialized、Configured、Error三个小状态,Executing包含Flushed、Running 、End-of-Stream三个小状态
- 具体用法,可以参考官网
MediaCodec