# 2.1 API接口定义
外部音视频的编码、解码模块提供标准 C语言接口,上层应用需要按下面的标准实现 AnyChat Codec 库,实现的目标文件是动态库( Windows平台为 dll文 件,Linux 、Android平台为.so文件),这样 AnyChat平台才能正确注册并调用。
~~~
#if defined(WIN32)
# if defined(MEDIACODEC_EXPORTS)
# define MEDIACODEC_API extern "C" declspec(dllexport)
# else
# define MEDIACODEC_API extern "C" declspec(dllimport)
# endif
#else
# define MEDIACODEC_API extern "C"
#endif
// 获取库基本信息
MEDIACODEC_API DWORD MediaCodec_GetLibraryInfo(DWORD* dwCapability, DWORD* dwMainVer, DWORD* dwSubVer, CHAR* lpCompileTime, DWORD dwBufLen);
// 获取编解码器基本信息
MEDIACODEC_API DWORD MediaCodec_GetCodecInfo(DWORD dwCodecType, DWORD* dwCodecId, CHAR* lpCodecName, DWORD dwBufLen);
// 打开音频编码器
MEDIACODEC_API DWORD MediaCodec_AudioCodec_InitEncoder(MediaCodecContext* lpContext);
// 对音频进行编码
MEDIACODEC_API DWORD MediaCodec_AudioCodec_Encode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket);
// 关闭音频解码器
MEDIACODEC_API DWORD MediaCodec_AudioCodec_CloseEncoder(MediaCodecContext* lpContext);
// 打开音频解码器
MEDIACODEC_API DWORD MediaCodec_AudioCodec_InitDecoder(MediaCodecContext* lpContext);
// 对音频流进行解码
MEDIACODEC_API DWORD MediaCodec_AudioCodec_Decode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket);
// 关闭音频解码器
MEDIACODEC_API DWORD MediaCodec_AudioCodec_CloseDecoder(MediaCodecContext* lpContext);
// 打开视频编码器
MEDIACODEC_API DWORD MediaCodec_VideoCodec_InitEncoder(MediaCodecContext* lpContext);
// 对视频进行编码
MEDIACODEC_API DWORD MediaCodec_VideoCodec_Encode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket);
// 关闭视频编码器
MEDIACODEC_API DWORD MediaCodec_VideoCodec_CloseEncoder(MediaCodecContext* lpContext);
// 打开视频解码器
MEDIACODEC_API DWORD MediaCodec_VideoCodec_InitDecoder(MediaCodecContext* lpContext);
// 对视频流进行解码
MEDIACODEC_API DWORD MediaCodec_VideoCodec_Decode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket);
// 关闭视频解码器
MEDIACODEC_API DWORD MediaCodec_VideoCodec_CloseDecoder(MediaCodecContext* lpContext);
~~~
其中获取库基本信息(MediaCodec_GetLibraryInfo)和获取编解码器基本信息(MediaCodec_GetCodecInfo)两个 API 是必须要实现的,其它的 API 可根据实 际的需要来实现,如上层应用只需要实现硬件的视频编码与解码,则音频的编码、 解码 API可以不用实现。