AVCodec Kit(Audio & Video Codec Kit,音视频编解码,封装,解封装)是媒体系统中的音视频的编解码、媒体文件的封装、解封装、媒体数据输入等原子能力。
基于性能考虑,AVCodec Kit仅提供C接口。
媒体文件:携带有音视频、字幕等媒体数据的文件,如.mp4、.m4a。
流媒体:可以边下载,边播放的媒体传输形式,下载协议如HTTP/HTTPS、HLS协议。
音视频编码:将未压缩原序列音视频数据转换为另一种格式数据,如H.264、AAC。
音视频解码:将一种数据格式转换为未压缩状态的原序列音视频数据,如YUV、PCM。
媒体文件封装:将音频、视频、字幕等数据以及描述信息,按照某种格式要求,写入到同一个文件中,如.mp4。
媒体文件解封装:将文件中的音频、视频、字幕等媒体数据读出,解析出媒体的描述信息。
sample:有相同时间属性的一组数据。
对于音视频,通常是有相同解码时间戳的压缩数据。
对于字幕,通常包含对应时间点的字幕内容。
所有的轨道结尾数据都为空。
视频编解码
视频编码的输入和视频解码的输出支持Surface模式。
在编码和解码过程中,通过回调函数通知应用数据处理的情况;如编码过程通过回调通知应用,完成一帧编码,输出编码结果AVBuffer;在解码过程通过回调通知应用输入一帧码流到解码器解码,当解码完成也会通过回调通知应用解码完成,应用可以对数据做后续处理。
视频编解码的逻辑如图所示。

具体开发指导请参考视频解码Surface模式、视频编码Surface模式。
音频编解码
音频编码的输入和音频解码的输出为PCM格式。
在编码和解码过程中,通过回调函数通知应用数据处理的情况;如编码过程通过回调通知应用,完成一帧编码,输出编码结果AVBuffer;在解码过程通过回调通知应用输入一帧码流到解码器解码,当解码完成也会通过回调通知应用解码完成,应用可以对数据做后续处理。
音频编解码逻辑如图所示。

文件封装与解封装
在文件封装环节,应用将AVBuffer送入Codec对应的接口,执行数据封装,AVBuffer可以是由上述编码输出的AVBuffer,也可以是应用创建的AVBuffer,AVBuffer中要携带有效的码流数据和相关的时间描述等信息。
在文件解封装环节,应用从Codec对应的接口获得携带有码流数据的AVBuffer,该AVBuffer可以送入上述视频和音频编解码对应接口。
文件封装、解封装逻辑如图所示。

本Kit支持模拟器,但与真机存在部分能力差异,具体差异如下。
通用差异:请参见模拟器与真机的差异。
音频编解码支持模拟器,具体规格参考音频编解码。
支持的视频解码格式如下:
MSVIDEO122+、WMV322+、MJPEG22+、MPEG123+、MPEG2、MPEG4、H.263、AVC(H.264)、RV3023+、RV4023+、DVVIDEO23+、RAWVIDEO23+、Cinepak24+。
支持的媒体数据解封装格式如下:
mp4、fmp4、mkv、mpeg-ts、flv、mpeg-ps、avi、3gp22+、3g222+、m4v22+、wmv22+、rm23+、rmvb23+、m4a、aac、mp3、ogg、flac、wav、amr、ape、wma22+、sunAU24+、dts23+、srt、webvtt。