MediaCodec
MediaCodec类可用于访问Android底层的媒体编解码器,例如,编码/解码组件。它是Android为多媒体支持提供的底层接口的一部分(通常与MediaExtractor, MediaSync, MediaMuxer, MediaCrypto, MediaDrm, Image, Surface, 以及AudioTrack一起使用)。
从广义上讲,一个编解码器通过处理输入数据来产生输出数据。它通过异步方式处理数据,并且使用了一组输入输出buffers。在简单层面,请求(或接收)到一个空的输入buffer,向里面填满数据并将它传递给编解码器处理。这个编解码器将使用完这些数据并向所有空的输出buffer中的一个填充这些数据。最终,请求(或接受)到一个填充了数据的buffer,可以使用其中的数据内容,并且在使用完后将其释放回编解码器。
1、 Data Types
编解码器处理三种类型的数据:压缩数据,原始音频数据,原始视频数据。上述三种数据都可以通过ByteBuffers进行处理,但需要为原始视频数据提供一个Surface来提高编解码性能。
压缩缓存(Compressed Buffers):输入缓冲区(解码器)和输出缓冲区(编码器)包含压缩数据格式的类型。
原始音频缓存(Raw Audio Buffers):原始音频缓冲区包含整个PCM音频帧数据。
原始视频缓存(Raw Video Buffers):ByteBuffer模式视频缓冲区根据他们的颜色格式布局。视频编解码器可能支持三种类型的色彩格式:1)、native raw video format:被COLOR_FormatSurface标记,其可与输入或输出Surface一起使用;2)、flexible YUV buffers(如COLOR_FormatYUV420Flexible),可以与输入/输出Surface一起使用, ByteBuffer模式下可以通过调用getInput/OutputImage(int)方法进行使用;3)、通常只在ByteBuffer模式下被支持。由供应商指定,可以使用 getInput/OutputImage(int)方法。
2、States
在编解码器的生命周期内有三种理论状态:停止态-Stopped、执行态-Executing、释放态-Released。停止状态(Stopped)包括了三种子状态:未初始化(Uninitialized)、配置(Configured)、错误(Error)。执行状态(Executing)在概念上会经历三种子状态:刷新(Flushed)、运行(Running)、流结束(End-of-Stream)。
android MediaCodec ACodec
最新推荐文章于 2025-04-07 10:01:14 发布