音频组件 API参考
前言
本文档为使用媒体处理芯片的音频进行智能分析方案开发的程序员而写,目的是供您在开发过程中查阅音频支持的各种参考信息,包括各项协议说明、API、错误码等。
与本文档相对应的产品版本如下。
本文档(本指南)主要适用于以下工程师:
- 技术支持工程师
- 软件开发工程师
在本文中可能出现下列标志,它们所代表的含义如下。
修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新内容。
音频组件
概述
音频组件集成了AAC编解码协议,并开放接口,以便于用户集成第三方提供的编解码协议。AAC编解码使用示例代码在sample/audio目录和cbb/audio/adp目录。MP3和OPUS编解码器使用示例参考AAC。
须知:
客户如果需要使用AAC格式的专利,必须从版权权利人处获取授权,并缴纳Licensing Fee。
重要概念
音频编解码协议
音频组件提供的编解码功能基于独立封装的AAC编解码库,核心编解码器工作在用户态,使用CPU软件编解码。
AAC编解码协议说明如表1所示。
表 1 音频编解码协议说明
说明:
“cpu消耗”的结果值基于ARM9 288MHz环境。
表 2 AAC Encoder各协议码率设置(码率单位为kbps)
注:“—”表示不支持这种情况。
表 3 AAC Encoder Low Delay协议码率设置(码率单位为kbps)
音频编解码集成接口
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;
}
OPUS自定义帧结构
使用OPUS编解码库进行OPUS格式的编码,编码后的码流遵循表1中描述的帧结构,即在每帧码流数据的净荷数据之前填充有8个字节的帧头,其中前四个字节用于表示OPUS每帧RAW流数据长度,该4字节为长度的字符串表示,后四个字节保留。使用OPUS编解码库进行以上格式的解码时,需要读取相应的帧头信息。
表 1 OPUS自定义帧结构
API参考
SDK发布包中的以下API用于注册和注销编码器和解码器。以下API接口封装在libss_mpi_audio.a中。
- 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_aenc_aac_deinit:解注册AAC编码器。
- ss_mpi_adec_aac_init:注册AAC解码器。
- ss_mpi_adec_aac_deinit:解注册AAC解码器。
- ss_mpi_aenc_mp3_init: 注册MP3编码器。
- ss_mpi_aenc_mp3_deinit:解注册MP3编码器。
- ss_mpi_adec_mp3_init: 注册MP3解码器。
- ss_mpi_adec_mp3_deinit:解注册MP3解码器。
- ss_mpi_aenc_opus_init:注册OPUS编码器。
- ss_mpi_aenc_opus_deinit:解注册OPUS编码器。
- ss_mpi_adec_opus_init:注册OPUS解码器。
- ss_mpi_adec_opus_deinit:解注册OPUS解码器。
ss_mpi_aenc_register_encoder
【描述】
注册编码器。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_aenc.h、ss_mpi_audio.h
- 库文件:libss_mpi_audio.a
【注意】
- 用户通过传入编码器属性结构体,向AENC模块注册一个编码器,并返回注册句柄,用户可以最后通过注册句柄来注销该编码器。
- AENC模块最大可注册20个编码器,且自身已注册LPCM、G711a、G711u、G726、ADPCM五个编码器。
- 同一种编码协议不允许重复注册编码器,例如假如已注册AAC编码器,不允许另外再注册一个AAC编码器。
-
编码器属性包括编码器类型、最大码流长度、编码器名称、打开编码器的函数指针、进行编码的函数指针、关闭编码器的函数指针。
-
编码器类型
SDK以枚举标识编码协议,注册时应选择相关协议的编码器类型。
-
最大码流长度
每帧编码后码流的最大长度,AENC模块将根据注册的最大码流长度分配内存大小。
-
编码器名称
编码器名称用字符串表示,用于在proc信息中显示。
-
打开编码器的函数指针
SDK封装的一个函数指针,其函数原型为:
其中第一个参数是编码器属性,用于传入不同类型的编码器的特定属性;第二个参数是编码器句柄,用于返回可用于操作编码器的句柄。这两个参数均由用户封装,用户封装第二个参数时需要注意分配内存,因为编码器句柄还将用于编码和关闭编码器。
-
进行编码的函数指针
SDK封装的一个函数指针,其函数原型为:
其中第一个参数是上一个函数打开编码器时返回的编码器句柄;第二个参数是SDK的音频帧数据结构体的指针,用于传入音频帧数据;第三个参数是输出缓存信息结构体指针。
-
关闭编码器的函数指针
SDK封装的一个函数指针,其函数原型为:
参数是打开编码器时返回的编码器句柄。
-
用户需根据这几个函数原型封装第三方编码器,并通过编码器属性结构体注册给AENC模块,从而实现第三方编码器的集成。
-
-
必须在创建编码通道前注册相关类型的编码器,编码器不需要重复注册。
【举例】
下面的代码举例AAC编码器的注册:
td_s32 handle, ret;
ot_aenc_encoder aac;
ret = aac_init_enc_lib();
if (ret < 0) {
return ret;
}
aac.type = OT_PT_AAC;
snprintf(aac.name, sizeof(aac.name), "aac");
aac.max_frame_len = OT_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 = ot_mpi_aenc_register_encoder(&handle, &aac);
if (ret != TD_SUCCESS) {
return ret;
}
return TD_SUCCESS;
【相关主题】
无。
ss_mpi_aenc_unregister_encoder
【描述】
注销编码器。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_aenc.h、ss_mpi_audio.h
- 库文件:libss_mpi_audio.a
【注意】
通常不需要注销编码器。
【举例】
无
【相关主题】
无
ss_mpi_adec_register_decoder
【描述】
注册解码器。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_adec.h、ss_mpi_audio.h
- 库文件:libss_mpi_audio.a
【注意】
- 用户通过传入解码器属性结构体,向ADEC模块注册一个解码器,并返回注册句柄,用户可以最后通过注册句柄来注销该解码器。
- ADEC模块最大可注册20个解码器,且自身已注册LPCM、G711a、G711u、G726、ADPCM五个解码器。
- 同一种解码协议不允许重复注册解码器,例如假如已注册AAC解码器,不允许另外再注册一个AAC解码器。
-
解码器属性包括解码器类型、解码器名称、打开解码器的函数指针、进行解码的函数指针、获取音频帧信息的函数指针、关闭解码器的函数指针。
-
解码器类型
SDK以枚举标识解码协议,注册时应选择相关协议的解码器类型。
-
解码器名称
解码器名称用字符串表示,用于在proc信息中显示。
-
打开解码器的函数指针
SDK封装的一个函数指针,其函数原型为:
其中第一个参数是解码器属性,用于传入不同类型的解码器的特定属性;第二个参数是解码器句柄,用于返回可用于操作解码器的句柄。这两个参数均由用户封装,用户封装第二个参数时需要注意分配内存,因为解码器句柄还将用于解码和关闭解码器。
-
进行解码的函数指针
SDK封装的一个函数指针,其函数原型为:
其中第一个参数是上一个函数打开解码器时返回的解码器句柄;第二个参数是输入缓存信息结构体指针;第三个参数是输出的通道数,码流数据经解码后,可能输出单声道,也可能输出立体声。
-
获取音频帧信息的函数指针
SDK封装的一个函数指针,其函数原型为:
第一个参数是打开解码器时返回的解码器句柄;第二个参数是用户封装的音频帧信息,有的解码器解析码流时会获取解码后音频数据的采样点、采样率等信息;如果用户解码器不需要此函数,可以为该函数原型封装一个空函数。
-
关闭解码器的函数指针
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 < 0) {
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 != TD_SUCCESS) {
return ret;
}
return TD_SUCCESS;
【相关主题】
无。
ss_mpi_adec_unregister_decoder
【描述】
注销解码器。
【语法】
【参数】
【返回值】
失败,其值为错误码。 |
【需求】
- 头文件:ot_common_adec.h、ss_mpi_audio.h
- 库文件:libss_mpi_audio.a
【注意】
通常不需要注销解码器。
【举例】
无
【相关主题】
无。
ss_mpi_aenc_aac_init
【描述】
注册AAC编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_aac_adp.c
- 头文件:ss_audio_aac_adp.h
- 库文件:libss_mpi_audio_adp.a、libaac_comm.so、libaac_enc.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在需要使用SBRENC功能时,需要添加libaac_sbr_enc.so库。
【举例】
无。
【相关主题】
无。
ss_mpi_aenc_aac_deinit
【描述】
解注册AAC编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_aac_adp.c
- 头文件:ss_audio_aac_adp.h
- 库文件:libss_mpi_audio_adp.a、libaac_comm.so、libaac_enc.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_aenc_aac_init调用之后对称使用。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_aac_init
【描述】
注册AAC解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_aac_adp.h
- 头文件:ss_audio_aac_adp.h
- 库文件:libss_mpi_audio_adp.a、libaac_comm.so、libaac_dec.so
【注意】
请参考ss_mpi_aenc_aac_init接口注意项的说明。此外,在需要使用SBRDEC功能时,需要添加libaac_sbr_dec.so库。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_aac_deinit
【描述】
解注册AAC解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_aac_adp.h
- 头文件:ss_audio_aac_adp.h
- 库文件:libss_mpi_audio_adp.a、libaac_comm.so、libaac_dec.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_adec_aac_init调用之后对称使用。
【举例】
无。
【相关主题】
无。
ss_mpi_aenc_mp3_init
【描述】
注册MP3编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_mp3_adp.c
- 头文件:ss_audio_mp3_adp.h
- 库文件:libss_mpi_audio_adp.a、libmp3_enc.so、libmp3_lame.so
【注意】
libmp3_enc.so依赖于libmp3_lame.so。对于动态链接场景,需要同时链接libmp3_enc.so和libmp3_lame.so;对于dlopen场景,只需加载libmp3_enc.so即可。
【举例】
无。
【相关主题】
无。
ss_mpi_aenc_mp3_deinit
【描述】
解注册MP3编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_mp3_adp.c
- 头文件:ss_audio_mp3_adp.h
- 库文件:libss_mpi_audio_adp.a、libmp3_enc.so、libmp3_lame.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_aenc_mp3_init调用之后对称使用。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_mp3_init
【描述】
注册MP3解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_mp3_adp.c
- 头文件:ss_audio_mp3_adp.h
- 库文件:libss_mpi_audio_adp.a、libmp3_dec.so
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_mp3_deinit
【描述】
解注册MP3解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_mp3_adp.c
- 头文件:ss_audio_mp3_adp.h
- 库文件:libss_mpi_audio_adp.a、libmp3_dec.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_adec_mp3_init调用之后对称使用
【举例】
无。
【相关主题】
无。
ss_mpi_aenc_opus_init
【描述】
注册OPUS编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_opus_adp.c
- 头文件:ss_audio_opus_adp.h
- 库文件:libss_mpi_audio_adp.a、libopus.so
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_aenc_opus_deinit
【描述】
解注册OPUS编码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_opus_adp.c
- 头文件:ss_audio_opus_adp.h
- 库文件:libss_mpi_audio_adp.a、libopus.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_aenc_opus_init调用之后对称使用。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_opus_init
【描述】
注册OPUS解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_opus_adp.c
- 头文件:ss_audio_opus_adp.h
- 库文件:libss_mpi_audio_adp.a、libopus.so
【注意】
无。
【举例】
无。
【相关主题】
无。
ss_mpi_adec_opus_deinit
【描述】
解注册OPUS解码器。
【语法】
【参数】
无
【返回值】
失败,其值为错误码。 |
【需求】
- 源文件:ss_audio_opus_adp.c
- 头文件:ss_audio_opus_adp.h
- 库文件:libss_mpi_audio_adp.a、libopus.so
【注意】
- 此接口封装在libss_mpi_audio_adp.a库里。
- 在ss_mpi_adec_opus_init调用之后对称使用。
【举例】
无。
【相关主题】
无。
数据类型
音频组件相关数据类型、数据结构定义如下:
- 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_mpeg_version:定义MP3编解码协议版本结构体。
- ot_mp3_layer:定义MP3格式。
- ot_mp3_bps:定义MP3音频码率。
- ot_aenc_attr_mp3:定义MP3编码协议属性结构体。
- ot_adec_attr_mp3:定义MP3解码协议属性结构体。
- ot_opus_bps:定义OPUS音频码率。
- ot_opusenc_app:定义OPUS编码模式。
- ot_aenc_attr_opus:定义OPUS编码协议属性结构体。
- ot_adec_attr_opus:定义OPUS解码协议属性结构体。
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;
【成员】
【注意事项】
无。
【相关数据类型及接口】
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;
【成员】
【注意事项】
无。
【相关数据类型及接口】
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_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_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;
【成员】
【注意事项】
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;
【成员】
|
|
【注意事项】
无。
【相关数据类型及接口】
无。
ot_adec_attr_aac
【说明】
定义AAC解码协议属性结构体。
【定义】
【成员】
|
【注意事项】
无。
【相关数据类型及接口】
无。
ot_mpeg_version
【说明】
定义MP3解码协议版本结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_mp3_layer
【说明】
定义MP3格式。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_mp3_bps
【说明】
定义MP3解码码率。
【定义】
typedef enum{
OT_MP3_BPS_32K = 32000,
OT_MP3_BPS_40K = 40000,
OT_MP3_BPS_48K = 48000,
OT_MP3_BPS_56K = 56000,
OT_MP3_BPS_64K = 64000,
OT_MP3_BPS_80K = 80000,
OT_MP3_BPS_96K = 96000,
OT_MP3_BPS_112K = 112000,
OT_MP3_BPS_128K = 128000,
OT_MP3_BPS_160K = 160000,
OT_MP3_BPS_192K = 192000,
OT_MP3_BPS_224K = 224000,
OT_MP3_BPS_256K = 256000,
OT_MP3_BPS_320K = 320000,
} ot_mp3_bps;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aenc_attr_mp3
【说明】
定义MP3编码协议属性结构体。
【定义】
typedef struct{
ot_audio_sample_rate sample_rate;
ot_audio_bit_width bit_width;
ot_audio_snd_mode sound_mode
ot_mp3_bps bit_rate;
td_u32 quality;
} ot_aenc_attr_mp3;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_adec_attr_mp3
【说明】
定义MP3解码协议属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_opus_bps
【说明】
定义OPUS音频码率。
【定义】
typedef enum {
OT_OPUS_BPS_16K = 16000,
OT_OPUS_BPS_22K = 22000,
OT_OPUS_BPS_24K = 24000,
OT_OPUS_BPS_32K = 32000,
OT_OPUS_BPS_44K = 44000,
OT_OPUS_BPS_48K = 48000,
OT_OPUS_BPS_64K = 64000,
OT_OPUS_BPS_96K = 96000,
OT_OPUS_BPS_128K = 128000,
OT_OPUS_BPS_132K = 132000,
OT_OPUS_BPS_144K = 144000,
OT_OPUS_BPS_192K = 192000,
OT_OPUS_BPS_256K = 256000,
OT_OPUS_BPS_288K = 288000,
OT_OPUS_BPS_320K = 320000,
OT_OPUS_BPS_BUTT
} ot_opus_bps;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_opusenc_app
【说明】
定义OPUS编码模式。
【定义】
typedef enum {
OT_OPUSENC_APP_VOIP = 2048,
OT_OPUSENC_APP_AUDIO = 2049,
OT_OPUSENC_APP_RESTRICTED_LOWDELAY = 2051,
} ot_opusenc_app;
【成员】
对于大多数非语音信号,如音乐,它在给定的比特率下提供了最好的质量。该模式适用于音乐和混合(音乐/语音)内容、广播以及需要少于15毫秒编码延迟的应用程序。 |
|
【注意事项】
无。
【相关数据类型及接口】
无。
ot_aenc_attr_opus
【说明】
定义OPUS编码协议属性结构体。
【定义】
typedef struct {
ot_audio_sample_rate sample_rate;
ot_audio_bit_width bit_width;
ot_audio_snd_mode snd_mode;
ot_opus_bps bit_rate;
ot_opusenc_app app;
} ot_aenc_attr_opus;
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
ot_adec_attr_opus
【说明】
定义OPUS解码协议属性结构体。
【定义】
【成员】
【注意事项】
无。
【相关数据类型及接口】
无。
错误码
音频编码错误码
音频编码API错误码如表 1所示。
表 1 音频编码API错误码
音频解码错误码
音频解码API错误码如表 1所示。
表 1 音频解码API错误码




