MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMuxer、AudioTrack结合使用,能够编解码诸如H.264、H.265、AAC、3gp等常见的音视频格式。广义而言,MediaCodec的工作原理就是处理输入数据以产生输出数据。具体来说,MediaCodec在编解码的过程中使用了一组输入/输出缓存区来同步或异步处理数据:首先,客户端向获取到的编解码器输入缓存区写入要编解码的数据并将其提交给编解码器,待编解码器处理完毕后将其转存到编码器的输出缓存区,同时收回客户端对输入缓存区的所有权;然后,客户端从获取到编解码输出缓存区读取编码好的数据进行处理,待处理完毕后编解码器收回客户端对输出缓存区的所有权。不断重复整个过程,直至编码器停止工作或者异常退出。
MediaCodec发展历程Android 4.1 API 16 提出首个版本的MediaCodec
Android 4.3 API 18 扩展了一种通过Surface提供输入的方法createSurface
Android 5.0 API 21 引入了“异步模式”
这是官网提供的MediaCodec编解码流程图:
解释一下大致的意思:
input侧:编(解)码器提供空闲的输入端队列buffer,将需要编(解)码的未压缩yuv数据(压缩H.264数据)丢入到空闲的buffer中,提交给编(解)码器
output侧:编(解)码器将编(解)码完成的未压缩yuv数据(压缩H.264数据)丢入到输出端队列buffer中,可以通过buffer获得编(解)码完成的数据,消费掉buffer中的数据后,将buffer归还给解码器。



