# 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可以不用實現。