下面應用一個簡單的例子,演示一個 AnyChat Codec 庫的框架代碼,實現音頻的 CELT 編碼、解碼模塊(不包含音頻編解碼算法部分)。
如需要完整的示例工程源代碼,請與佰銳科技技術支持中心聯系,我們將安排專業工程師提供技術協助。
~~~
// 獲取庫基本信息
DWORD MediaCodec_GetLibraryInfo(DWORD* dwCapability, DWORD* dwMainVer, DWORD* dwSubVer, CHAR* lpCompileTime, DWORD dwBufLen)
{
// 版本信息
*dwMainVer = 1;
*dwSubVer = 0;
// 編譯時間
if(dwBufLen && lpCompileTime)
_snprintf(lpCompileTime,dwBufLen,"%s %s", DATE , TIME );
// 庫的編解碼能力(非常重要,庫實現某一種編解碼器時,才能加上對應的標志)
*dwCapability = MEDIACODEC_CAPABILITY_AUDIOENCODEC | MEDIACODEC_CAPABILITY_AUDIODECODEC;
return 0;
}
// 獲取編解碼器基本信息
DWORD MediaCodec_GetCodecInfo(DWORD dwCodecType, DWORD* dwCodecId, CHAR* lpCodecName, DWORD dwBufLen)
{
DWORD ret = -1;
if(dwCodecType & MEDIACODEC_CAPABILITY_AUDIOENCODEC)
{
*dwCodecId = MEDIA_CODEC_ID_CELT; if(lpCodecName && dwBufLen)
_snprintf(lpCodecName, dwBufLen, "%s", "CELT Audio Encoder"); ret = 0;
}
else if(dwCodecType & MEDIACODEC_CAPABILITY_AUDIODECODEC)
{
*dwCodecId = MEDIA_CODEC_ID_CELT; if(lpCodecName && dwBufLen)
_snprintf(lpCodecName, dwBufLen, "%s", "CELT Audio Decoder"); ret = 0
}
return ret;
}
// 打開音頻編碼器
DWORD MediaCodec_AudioCodec_InitEncoder(MediaCodecContext* lpContext)
{
return CCeltCodec::InitEncoder(lpContext);
}
// 對音頻進行編碼
DWORD MediaCodec_AudioCodec_Encode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket)
{
return CCeltCodec::Encode(lpContext, InPacket, OutPacket);
}
// 關閉音頻解碼器
DWORD MediaCodec_AudioCodec_CloseEncoder(MediaCodecContext* lpContext)
{
return CCeltCodec::CloseEncoder(lpContext);
}
// 打開音頻解碼器
DWORD MediaCodec_AudioCodec_InitDecoder(MediaCodecContext* lpContext)
{
return CCeltCodec::InitDecoder(lpContext);
}
// 對音頻流進行解碼
DWORD MediaCodec_AudioCodec_Decode(MediaCodecContext* lpContext, MediaPacket* InPacket, MediaPacket* OutPacket)
{
return CCeltCodec::Decode(lpContext, InPacket, OutPacket);
}
// 關閉音頻解碼器
DWORD MediaCodec_AudioCodec_CloseDecoder(MediaCodecContext* lpContext)
{
return CCeltCodec::CloseDecoder(lpContext);
}
~~~