前言¶
概述
本文档为使用媒体处理芯片的音频进行智能分析方案开发的程序员而写,目的是供您在开发过程中查阅音频支持的各种参考信息,包括各项协议说明、API、错误码等。
产品版本
与本文档相对应的产品版本如下。
产品名称 |
产品版本 |
|---|---|
SS928 |
V100 |
SS626 |
V100 |
SS524 |
V100 |
SS522 |
V100 |
SS528 |
V100 |
SS625 |
V100 |
SS927 |
V100 |
读者对象
本文档(本指南)主要适用于以下工程师:
技术支持工程师
软件开发工程师
符号约定
在本文中可能出现下列标志,它们所代表的含义如下。
符号 |
说明 |
|---|---|
|
表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。 |
|
表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。 |
|
表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。 |
|
用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。 |
|
对正文中重点信息的补充说明。 “说明”不是安全警示信息,不涉及人身、设备及环境伤害信息。 |
修订记录
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
文档版本 |
发布日期 |
修改说明 |
|---|---|---|
00B01 |
2025-09-15 |
第1次临时版本发布。 |
音频组件¶
概述¶
音频组件集成了AAC编解码协议,并开放接口,以便于用户集成第三方提供的编解码协议。AAC编解码使用示例代码在sample/audio目录。
须知: 客户如果需要使用AAC格式的专利,必须从版权权利人处获取授权,并缴纳Licensing Fee。
重要概念¶
音频编解码协议
音频组件提供的编解码功能基于独立封装的AAC编解码库,核心编解码器工作在用户态,使用CPU软件编解码。
AAC编解码协议说明如表1所示。
表 1 音频编解码协议说明
协议 |
采样率 |
帧长(采样点) |
码率(kbps) |
压缩率 |
CPU消耗 |
描述 |
|---|---|---|---|---|---|---|
AAC Encoder |
8kHz,16kHz,22.05kHz,24kHz,32kHZ, 44.1kHz,48kHz |
|
- |
- |
50 MHz |
AAC有两次突破性的技术升级:
|
AAC Decoder |
兼容全部速率 |
512、1024、2048 |
- |
- |
25 MHz |
后向兼容。传统AAC解码器,仅解码aac Plus v1码流低频信息,而aacPlus解码器则可以同时还原高频信息。不支持PS的AAC解码器,解码aac Plus v2码流时,仅能得到单声道信息,而aacPlus2解码器则可以得到立体声声音。注意:解码方式需要选用ADEC_MODE_STREAM。 |
注:“cpu消耗”的结果值基于ARM9 288MHz环境,2/2 MHz表示编码和解码分别占有2M和2M CPU。
表 2 AAC Encoder各协议码率设置(码率单位为kbps)
采样率 |
声道 |
LC BitRate |
Plus v1 BitRate |
Plus v2 BitRate |
|||
|---|---|---|---|---|---|---|---|
Supported |
Preferred |
Supported |
Preferred |
Supported |
Preferred |
||
8kHz |
Mono |
16~48 |
24 |
— |
— |
— |
— |
Stereo |
16~96 |
32 |
— |
— |
— |
— |
|
16kHz |
Mono |
24~96 |
48 |
24~48 |
32 |
— |
— |
Stereo |
24~192 |
48 |
24~96 |
32 |
16~48 |
32 |
|
22.05kHz |
Mono |
32~132 |
64 |
32~64 |
48 |
— |
— |
Stereo |
32~265 |
48 |
32~128 |
64 |
16~64 |
32 |
|
24kHz |
Mono |
32~144 |
48 |
32~64 |
48 |
— |
— |
Stereo |
32~288 |
48 |
32~128 |
64 |
16~64 |
32 |
|
32kHz |
Mono |
32~192 |
48 |
32~64 |
48 |
— |
— |
Stereo |
32~320 |
128 |
32~128 |
64 |
16~64 |
32 |
|
44.1kHz |
Mono |
48~265 |
64 |
32~64 |
48 |
— |
— |
Stereo |
48~320 |
128 |
32~128 |
64 |
16~64 |
48 |
|
48kHz |
Mono |
48~288 |
64 |
32~64 |
48 |
— |
— |
Stereo |
48~320 |
128 |
32~128 |
64 |
16~64 |
48 |
|
注:“—”表示不支持这种情况。
表 3 AAC Encoder Low Delay协议码率设置(码率单位为kbps)
采样率 |
声道 |
LD BitRate |
ELD BitRate |
||
|---|---|---|---|---|---|
Supported |
Preferred |
Supported |
Preferred |
||
8kHz |
Mono |
16~96 |
24 |
32~96 |
32 |
Stereo |
16~192 |
48 |
64~192 |
64 |
|
16kHz |
Mono |
24~192 |
48 |
16~256 |
48 |
Stereo |
32~320 |
96 |
32~320 |
96 |
|
22.05kHz |
Mono |
32~256 |
48 |
24~256 |
48 |
Stereo |
48~320 |
96 |
32~320 |
96 |
|
24kHz |
Mono |
32~256 |
64 |
24~256 |
64 |
Stereo |
48~320 |
128 |
32~320 |
128 |
|
32kHz |
Mono |
48~320 |
64 |
32~320 |
64 |
Stereo |
64~320 |
128 |
64~320 |
128 |
|
44.1kHz |
Mono |
64~320 |
128 |
96~320 |
128 |
Stereo |
44~320 |
256 |
192~320 |
256 |
|
48kHz |
Mono |
64~320 |
128 |
96~320 |
128 |
Stereo |
64~320 |
256 |
192~320 |
256 |
|
音频编解码集成接口
SDK发布包中开放接口用于注册和注销编码器和解码器,音频组件根据这些接口,提供了注册AAC编解码器的示例。用户既可以参考示例,注册自有的第三方编解码器,也可直接使用音频组件提供的示例来注册并使用组件中的AAC编解码器。
【注意】
AAC编解码器的使用支持静态库注册的形式,相关库包括libaac_comm.a、libaac_enc.a、libaac_sbr_enc.a、libaac_dec.a、libaac_sbr_dec.a。其中,libaac_sbr_enc.a在AAC编码器不使用EAAC、EAACPLUS、AACELD类型编码时可裁剪;libaac_sbr_dec.a在AAC解码器不使用EAAC、EAACPLUS、AACELD类型解码时可裁剪。当使用EAAC、EAACPLUS、AACELD编解码类型时,须在注册编解码器之前进行SBRENC、SBRDEC功能模块的静态注册。
AAC编解码器的使用还支持动态库调用的形式,相关库包括libaac_comm.so、libaac_enc.so、libaac_sbr_enc.so、libaac_dec.so、libaac_sbr_dec.so。其中,libaac_sbr_enc.so在AAC编码器不使用EAAC、EAACPLUS、AACELD类型编码时可裁剪;libaac_sbr_dec.so在AAC解码器不使用EAAC、EAACPLUS、AACELD类型解码时可裁剪。
AAC编解码器不支持同时使用静态库注册和动态库调用。
AAC编解码器的静态库注册只允许成功调用一次,不支持重复注册。
【举例】
下面的代码实现静态注册AAC的SBRENC和SBRDEC模块。
td_s32 ret;
td_void* sbr_enc_handle = ss_aac_sbrenc_get_handle();
/* register SBRENC module. */
ret = ss_aacenc_register_mod(sbr_enc_handle);
if (ret != TD_SUCCESS) {
printf("[func]:%s [line]:%d [info]:%s\n",
__FUNCTION__, __LINE__, "init sbr_enc lib fail!\n");
return OT_ERR_AENC_NOT_SUPPORT;
}
td_void* sbr_dec_handle = ss_aac_sbrdec_get_handle();
/* register SBRDEC module. */
ret = ss_aacdec_register_mod(sbr_dec_handle);
if (ret != TD_SUCCESS) {
printf("[func]:%s [line]:%d [info]:%s\n",
__FUNCTION__, __LINE__, "init sbr_dec lib fail!\n");
return OT_ERR_ADEC_NOT_SUPPORT;
}
API参考¶
SDK发布包中的以下API用于注册和注销编码器和解码器。
ss_mpi_aenc_register_encoder:注册编码器。
ss_mpi_aenc_unregister_encoder:注销编码器。
ss_mpi_adec_register_decoder:注册解码器。
ss_mpi_adec_unregister_decoder:注销解码器。
音频组件中提供的注册示例:
ss_mpi_aenc_aac_init:注册AAC编码器。
ss_mpi_adec_aac_init:注册AAC解码器。
ss_mpi_aenc_register_encoder¶
【描述】
注册编码器。
【语法】
td_s32 ss_mpi_aenc_register_encoder(td_s32 *handle, const ot_aenc_encoder *encoder);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
注册句柄。 |
输出 |
encoder |
编码器属性结构体。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_comm_aenc.h、ss_mpi_audio.h
库文件:libss_mpi.a
【注意】
用户通过传入编码器属性结构体,向AENC模块注册一个编码器,并返回注册句柄,用户可以最后通过注册句柄来注销该编码器。
AENC模块最大可注册20个编码器,且自身已注册LPCM、G711a、G711u、G726、ADPCM五个编码器。
同一种编码协议不允许重复注册编码器,例如假如已注册AAC编码器,不允许另外再注册一个AAC编码器。
编码器属性包括编码器类型、最大码流长度、编码器名称、打开编码器的函数指针、进行编码的函数指针、关闭编码器的函数指针。
编码器类型
SDK以枚举标识编码协议,注册时应选择相关协议的编码器类型。
最大码流长度
每帧编码后码流的最大长度,AENC模块将根据注册的最大码流长度分配内存大小。
编码器名称
编码器名称用字符串表示,用于在proc信息中显示。
打开编码器的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_open_encoder)(td_void *encoder_attr, td_void **encoder);
其中第一个参数是编码器属性,用于传入不同类型的编码器的特定属性;第二个参数是编码器句柄,用于返回可用于操作编码器的句柄。这两个参数均由用户封装,用户封装第二个参数时需要注意分配内存,因为编码器句柄还将用于编码和关闭编码器。
进行编码的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_enc_frame)(td_void *encoder, const ot_audio_frame *data, td_u8 *out_buf, td_u32 *out_len);
第一个参数是上一个函数打开编码器时返回的编码器句柄;第二个参数是SDK的音频帧数据结构体的指针,用于传入音频帧数据;第三个参数是输出缓存指针;第四个参数是输出缓存长度。
关闭编码器的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_close_encoder)(td_void *encoder);
参数是打开编码器时返回的编码器句柄。
用户需根据这几个函数原型封装第三方编码器,并通过编码器属性结构体注册给AENC模块,从而实现第三方编码器的集成。
必须在创建编码通道前注册相关类型的编码器,编码器不需要重复注册。
【举例】
下面的代码举例AAC编码器的注册:
td_s32 handle, ret;
aenc_encoder aac;
ret = aac_init_enc_lib();
if (ret) {
return ret;
}
aac.type = OT_PT_AAC;
snprintf(aac.name, sizeof(aac.name), "aac");
aac.max_frame_len = MAX_AAC_MAINBUF_SIZE;
aac.func_open_encoder = open_aac_encoder;
aac.func_enc_frame = encode_aac_frm;
aac.func_close_encoder = close_aac_encoder;
ret = ss_mpi_aenc_register_encoder(&handle, &aac);
if (ret) {
return ret;
}
return TD_SUCCESS;
【相关主题】
无。
ss_mpi_aenc_unregister_encoder¶
【描述】
注销解码器。
【语法】
td_s32 ss_mpi_aenc_unregister_encoder(td_s32 handle);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
注册句柄(注册编码器时获得的句柄)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_comm_aenc.h、ss_mpi_audio.h
库文件:libss_mpi.a
【注意】
通常不需要注销编码器。
【举例】
无
【相关主题】
无
ss_mpi_adec_register_decoder¶
【描述】
注册解码器。
【语法】
td_s32 ss_mpi_adec_register_decoder(td_s32 *handle, const ot_adec_decoder *decoder);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
注册句柄。 |
输出 |
decoder |
解码器属性结构体。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_comm_adec.h、ss_mpi_audio.h
库文件:libss_mpi.a
【注意】
用户通过传入解码器属性结构体,向ADEC模块注册一个解码器,并返回注册句柄,用户可以最后通过注册句柄来注销该解码器。
ADEC模块最大可注册20个解码器,且自身已注册LPCM、G711a、G711u、G726、ADPCM五个解码器。
同一种解码协议不允许重复注册解码器,例如假如已注册AAC解码器,不允许另外再注册一个AAC解码器。
解码器属性包括解码器类型、解码器名称、打开解码器的函数指针、进行解码的函数指针、获取音频帧信息的函数指针、关闭解码器的函数指针。
解码器类型
SDK以枚举标识解码协议,注册时应选择相关协议的解码器类型。
解码器名称
解码器名称用字符串表示,用于在proc信息中显示。
打开解码器的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_open_decoder)(td_void *decoder_attr, td_void **decoder);其中第一个参数是解码器属性,用于传入不同类型的解码器的特定属性;第二个参数是解码器句柄,用于返回可用于操作解码器的句柄。这两个参数均由用户封装,用户封装第二个参数时需要注意分配内存,因为解码器句柄还将用于解码和关闭解码器。
进行解码的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_dec_frame)(td_void *decoder, td_u8 **in_buf, td_s32 *left_byte, td_u16 *out_buf, td_u32 *out_len, td_u32 *chns);第一个参数是上一个函数打开解码器时返回的解码器句柄;第二个参数是输入缓存,用于传入音频帧数据;第三个参数用于返回剩余字节数,用于流式解码,即每次送入的音频帧数据不是完整的一帧的情形;第四个参数是输出缓存;第五个参数是输出数据的单声道长度;第六个参数是输出的通道数,码流数据经解码后,可能输出单声道,也可能输出立体声。
获取音频帧信息的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_get_frame_info)(td_void *decoder, td_void *info);第一个参数是打开解码器时返回的解码器句柄;第二个参数是用户封装的音频帧信息,有的解码器解析码流时会获取解码后音频数据的采样点、采样率等信息;如果用户解码器不需要此函数,可以为该函数原型封装一个空函数。
关闭解码器的函数指针
SDK封装的一个函数指针,其函数原型为:
td_s32 (*func_close_decoder)(td_void *decoder);参数是打开解码器时返回的解码器句柄。
用户需根据这几个函数原型封装第三方解码器,并通过解码器属性结构体注册给ADEC模块,从而实现第三方解码器的集成。
必须在创建解码通道前注册相关类型的解码器,解码器不需要重复注册。
【举例】
下面的代码举例AAC解码器的注册:
td_s32 handle, ret;
adec_decoder aac;
ret = aac_init_dec_lib();
if (ret) {
return ret;
}
aac.type = OT_PT_AAC;
snprintf(aac.name, sizeof(aac.name), "aac");
aac.func_open_decoder = open_aac_decoder;
aac.func_dec_frame = decode_aac_frm;
aac.func_get_frame_info = get_aac_frm_info;
aac.func_close_decoder = close_aac_decoder;
aac.func_reset_decoder = reset_aac_decoder;
ret = ss_mpi_adec_register_decoder(&handle, &aac);
if (ret) {
return ret;
}
return TD_SUCCESS;
【相关主题】
无。
ss_mpi_adec_unregister_decoder¶
【描述】
注销解码器。
【语法】
td_s32 ss_mpi_adec_unregister_decoder(td_s32 handle);
【参数】
参数名称 |
描述 |
输入/输出 |
|---|---|---|
handle |
注册句柄(注册解码器时获得的句柄)。 |
输入 |
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
头文件:ot_comm_adec.h、ss_mpi_audio.h
库文件:libss_mpi.a
【注意】
通常不需要注销解码器。
【举例】
无
【相关主题】
无。
ss_mpi_aenc_aac_init¶
【描述】
注册AAC编码器。
【语法】
td_s32 ss_mpi_aenc_aac_init(td_void);
【参数】
无
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
源文件:audio_aac_adp.c
头文件:audio_aac_adp.h
库文件:libaac_comm.so、libaac_enc.so
【注意】
此接口在audio_aac_adp.c里实现,而audio_aac_adp.c并没有封装成库,所以在使用此接口时,需要包含audio_aac_adp.c和audio_aac_adp.h才能编译通过。这两个文件默认放置在sample/audio/adp文件夹中。此外,在需要使用到SBRENC功能时,需要添加libaac_sbr_enc.so库。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_aac_init¶
【描述】
注册AAC解码器。
【语法】
td_s32 ss_mpi_adec_aac_init(td_void);
【参数】
无
【返回值】
返回值 |
描述 |
|---|---|
0 |
成功。 |
非0 |
失败,其值为错误码。 |
【需求】
源文件:aduio_aac_adp.h
头文件:audio_aac_adp.h
库文件:libaac_comm.so、libaac_dec.so
【注意】
请参考ss_mpi_aenc_aac_init接口注意项的说明。此外,在需要使用到SBRDEC功能时,需要添加libaac_sbr_dec.so库。
【举例】
无。
【相关主题】
无。
数据类型¶
音频组件相关数据类型、数据结构定义如下:
ot_aenc_encoder:定义编码器属性结构体。
ot_adec_decoder:定义解码器属性结构体。
ot_aac_type:定义AAC音频编解码协议类型。
ot_aac_bps:定义AAC音频编码码率。
ot_aac_transport_type:定义AAC音频编解码协议传输封装类型。
ot_aenc_attr_aac:定义AAC编码协议属性结构体。
ot_adec_attr_aac:定义AAC解码协议属性结构体。
ot_aenc_encoder¶
【说明】
定义编码器属性结构体。
【定义】
typedef struct {
ot_payload_type type;
td_u32 max_frame_len;
ot_char name[OT_MAX_ENCODER_NAME_LEN]; /* encoder type,be used to print proc information */
td_s32 (*func_open_encoder)(td_void *encoder_attr, td_void **encoder); /* encoder is the handle to control the encoder */
td_s32 (*func_enc_frame)(td_void *encoder, const ot_audio_frame *data, td_u8 *out_buf, td_u32 *out_len);
td_s32 (*func_close_encoder)(td_void *encoder);
} ot_aenc_encoder;
【成员】
成员名称 |
描述 |
|---|---|
type |
编码协议类型,见《MPP 媒体处理软件V5.0 开发参考》“2.系统控制”章节。 |
max_frame_len |
最大码流长度。 |
name |
编码器名称。OT_MAX_ENCODER_NAME_LEN定义见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
func_open_encoder |
打开编码器的函数指针。 |
func_enc_frame |
进行编码的函数指针。详细描述请参见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
func_close_encoder |
关闭编码器的函数指针。 |
【注意事项】
无。
【相关数据类型及接口】
ot_adec_decoder¶
【说明】
定义解码器属性结构体。
【定义】
typedef struct {
ot_payload_type type;
ot_char name[OT_MAX_DECODER_NAME_LEN];
td_s32 (*func_open_decoder)(td_void *decoder_attr, td_void **decoder); /* struct decoder is packed by user, user malloc and free memory for this struct */
td_s32 (*func_dec_frame)(td_void *decoder, td_u8 **in_buf, td_s32 *left_byte, td_u16 *out_buf, td_u32 *out_len, td_u32 *chns);
td_s32 (*func_get_frame_info)(td_void *decoder, td_void *info);
td_s32 (*func_close_decoder)(td_void *decoder);
td_s32 (*func_reset_decoder)(td_void *decoder);
} ot_adec_decoder;
【成员】
成员名称 |
描述 |
|---|---|
type |
解码协议类型,见《MPP 媒体处理软件V5.0 开发参考》“系统控制”章节。 |
name |
解码器名称。OT_MAX_DECODER_NAME_LEN定义见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
func_open_decoder |
打开解码器的函数指针。 |
func_dec_frame |
进行解码的函数指针。 |
func_get_frame_info |
获取音频帧信息的函数指针 |
func_close_decoder |
关闭解码器的函数指针。 |
func_reset_decoder |
重启解码器的函数指针。 |
【注意事项】
无。
【相关数据类型及接口】
ot_aac_type¶
【说明】
定义AAC音频编解码协议类型。
【定义】
typedef enum {
OT_AAC_TYPE_AACLC = 0,
OT_AAC_TYPE_EAAC = 1,
OT_AAC_TYPE_EAACPLUS = 2,
OT_AAC_TYPE_AACLD = 3,
OT_AAC_TYPE_AACELD = 4,
OT_AAC_TYPE_BUTT,
} ot_aac_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_AAC_TYPE_AACLC |
AACLC格式。 |
OT_AAC_TYPE_EAAC |
eAAC格式(也称为HEAAC、AAC+或aacPlusV1)。 |
OT_AAC_TYPE_EAACPLUS |
eAACPLUS格式(也称为AAC++或aacPlusV2)。 |
OT_AAC_TYPE_AACLD |
AACLD格式。 |
OT_AAC_TYPE_AACELD |
AACELD格式。 |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aac_bps¶
【说明】
定义AAC音频编码码率。
【定义】
typedef enum {
OT_AAC_BPS_8K = 8000,
OT_AAC_BPS_16K = 16000,
OT_AAC_BPS_22K = 22000,
OT_AAC_BPS_24K = 24000,
OT_AAC_BPS_32K = 32000,
OT_AAC_BPS_48K = 48000,
OT_AAC_BPS_64K = 64000,
OT_AAC_BPS_96K = 96000,
OT_AAC_BPS_128K = 128000,
OT_AAC_BPS_256K = 256000,
OT_AAC_BPS_320K = 320000,
OT_AAC_BPS_BUTT
} ot_aac_bps;
【成员】
成员名称 |
描述 |
|---|---|
OT_AAC_BPS_8K |
8kbit/s |
OT_AAC_BPS_16K |
16kbit/s |
OT_AAC_BPS_22K |
22kbit/s |
OT_AAC_BPS_24K |
24kbit/s |
OT_AAC_BPS_32K |
32kbit/s |
OT_AAC_BPS_48K |
48kbit/s |
OT_AAC_BPS_64K |
64kbit/s |
OT_AAC_BPS_96K |
96kbit/s |
OT_AAC_BPS_128K |
128kbit/s |
OT_AAC_BPS_256K |
256kbit/s |
OT_AAC_BPS_320K |
320kbit/s |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aac_transport_type¶
【说明】
定义AAC音频编解码协议传输封装类型。
【定义】
typedef enum {
OT_AAC_TRANSPORT_TYPE_ADTS = 0,
OT_AAC_TRANSPORT_TYPE_LOAS = 1,
OT_AAC_TRANSPORT_TYPE_LATM_MCP1 = 2,
OT_AAC_TRANSPORT_TYPE_BUTT
} ot_aac_transport_type;
【成员】
成员名称 |
描述 |
|---|---|
OT_AAC_TRANSPORT_TYPE_ADTS |
ADTS封装格式。AACLC/EAAC/EAACPLUS支持。 |
OT_AAC_TRANSPORT_TYPE_LOAS |
LOAS封装格式。AACLC/EAAC/EAACPLUS/AACLD/AACELD支持。 |
OT_AAC_TRANSPORT_TYPE_LATM_MCP1 |
LATM1封装格式。AACLC/EAAC/EAACPLUS/AACLD/AACELD支持。 |
【注意事项】
LATM1格式由于不具备同步帧头机制,在码流出现问题时无法快速恢复,不推荐使用。
【相关数据类型及接口】
无。
ot_aenc_attr_aac¶
【说明】
定义AAC编码协议属性结构体。
【定义】
typedef struct {
ot_aac_type aac_type;
ot_aac_bps bit_rate;
ot_audio_sample_rate sample_rate;
ot_audio_bit_width bit_width;
ot_audio_snd_mode snd_mode;
ot_aac_transport_type transport_type;
td_s16 band_width;;
} ot_aenc_attr_aac;
【成员】
成员名称 |
描述 |
|---|---|
aac_type |
AAC编码类型(Profile)。 |
bit_rate |
编码码率。 取值范围: LC:16~320; EAAC:24~128; EAAC+:16~64; AACLD:16~320; AACELD:32~320; 以kbit/s为单位。 |
sample_rate |
音频数据的采样率。 取值范围: LC:8~48; EAAC:16~48; EAAC+:16~48。 AACLD:8~48; AACELD:8~48; 以kHz为单位。 ot_audio_sample_rate请参见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
bit_width |
音频数据采样精度,只支持16bit。 ot_audio_bit_width请参见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
snd_mode |
输入数据的声道模式。支持输入为单声道或双声道。 ot_audio_snd_mode请参见《MPP 媒体处理软件V5.0 开发参考》“音频”章节。 |
transport_type |
AAC传输封装类型。 取值范围:
|
band_width |
目标频段范围。取值范围是,0或1000~sample_rate/2,单位Hz |
【注意事项】
无。
【相关数据类型及接口】
无。
ot_adec_attr_aac¶
【说明】
定义AAC解码协议属性结构体。
【定义】
typedef struct {
ot_aac_transport_type transport_type;
} ot_adec_attr_aac;
【成员】
成员名称 |
描述 |
|---|---|
trans_type |
AAC传输封装类型。 取值范围:
|
【注意事项】
无。
【相关数据类型及接口】
无。
错误码¶
音频编码错误码¶
音频编码API错误码如下所示。
表 1 音频编码API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa0178001 |
OT_ERR_AENC_INVALID_DEV_ID |
音频设备号无效 |
0xa0178003 |
OT_ERR_AENC_INVALID_CHN_ID |
音频编码通道号无效 |
0xa0178007 |
OT_ERR_AENC_ILLEGAL_PARAM |
音频编码参数设置无效 |
0xa0178008 |
OT_ERR_AENC_EXIST |
音频编码通道已经创建 |
0xa0178009 |
OT_ERR_AENC_UNEXIST |
音频编码通道未创建 |
0xa017800a |
OT_ERR_AENC_NULL_PTR |
输入参数空指针错误 |
0xa017800b |
OT_ERR_AENC_NOT_CFG |
编码通道未配置 |
0xa017800c |
OT_ERR_AENC_NOT_SUPPORT |
操作不被支持 |
0xa017800d |
OT_ERR_AENC_NOT_PERM |
操作不允许 |
0xa0178014 |
OT_ERR_AENC_NO_MEM |
系统内存不足 |
0xa0178015 |
OT_ERR_AENC_NO_BUF |
编码通道缓存分配失败 |
0xa0178016 |
OT_ERR_AENC_BUF_EMPTY |
编码通道缓存空 |
0xa0178017 |
OT_ERR_AENC_BUF_FULL |
编码通道缓存满 |
0xa0178018 |
OT_ERR_AENC_NOT_READY |
系统没有初始化 |
0xa0178040 |
OT_ERR_AENC_ENCODER_ERR |
音频编码数据错误 |
0xa0178041 |
OT_ERR_AENC_VQE_ERR |
AENC VQE处理错误 |
音频解码错误码¶
音频解码API错误码如下所示。
表 1 音频解码API错误码
错误代码 |
宏定义 |
描述 |
|---|---|---|
0xa0188001 |
OT_ERR_ADEC_INVALID_DEV_ID |
音频解码设备号无效 |
0xa0188002 |
OT_ERR_ADEC_INVALID_CHN_ID |
音频解码通道号无效 |
0xa0188007 |
OT_ERR_ADEC_ILLEGAL_PARAM |
音频解码参数设置无效 |
0xa0188008 |
OT_ERR_ADEC_EXIST |
音频解码通道已经创建 |
0xa0188009 |
OT_ERR_ADEC_UNEXIST |
音频解码通道未创建 |
0xa018800a |
OT_ERR_ADEC_NULL_PTR |
输入参数空指针错误 |
0xa018800b |
OT_ERR_ADEC_NOT_CFG |
解码通道属性未配置 |
0xa018800c |
OT_ERR_ADEC_NOT_SUPPORT |
操作不被支持 |
0xa018800d |
OT_ERR_ADEC_NOT_PERM |
操作不允许 |
0xa0188014 |
OT_ERR_ADEC_NO_MEM |
系统内存不足 |
0xa0188015 |
OT_ERR_ADEC_NO_BUF |
解码通道缓存分配失败 |
0xa0188016 |
OT_ERR_ADEC_BUF_EMPTY |
解码通道缓存空 |
0xa0188017 |
OT_ERR_ADEC_BUF_FULL |
解码通道缓存满 |
0xa0188018 |
OT_ERR_ADEC_NOT_READY |
系统没有初始化 |
0xa0188040 |
OT_ERR_ADEC_DECODER_ERR |
音频解码数据错误 |
0xa0188041 |
OT_ERR_ADEC_BUF_LACK |
解码输入缓存空间不够 |




