https://developer.android.com/reference/android/media/MediaCodec

MediaCodec用于访问底层多媒体编解码器。是Android底层多媒体支持架构的一部分。(一般会和MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, AudioTrack配合使用。)
大体来说,一个编解码器接收Input数据来输出Output数据。编解码器接收一组输入和输出,异步的进行处理。在最简化的场景下,你向codec请求一个空的input buffer,用数据填充这个buffer并将buffer送回codec,然后codec就会对input进行处理并将处理结果填充到当前空闲的output buffer,最后在你向codec请求output buffer时,codec就把填充好的output buffer提供给你进行消费,当使用完output buffer后需要将buffer归还给codec供后续使用。

数据类型

Codec处理三种数据:压缩数据、原始音频数据、原始视频数据。所有数据都可以用ByteBuffer承载,但为了提升性能你应该在使用原始视频数据的场景使用Surface。Surface直接对应Android native video buffer,使用了Surface就不需要将数据映射到ByteBuffer或者通过ByteBuffer来回拷贝了。一般来说,使用Surface时不可以访问原始视频数据,但你可以使用ImageReader类来访问unsecured decoded (raw) video frames。