下面应用一个简单的例子,演示一个 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);
}
~~~