接口协议适用平台:(Windows&Linux&ARM)

1. SDK描述

EasyAACEncoder-arm 是一款商用音频转码到AAC的工具库,目前支持G711a/G711u/G726/PCM等音频格式的转码,跨平台,支持Windows(32&64)/Linux(32&64)/ARM各平台,相比于其他普通类型的音频转码库,音频转码CPU效率有极大提升;在类似于hisi海思芯片的大部分ARM系统中,对浮点运算的支持都不是很好,效率非常低,导致在ARM设备中直接将PCM类型音频转成AAC时,效率非常低,于是我们根据特定的ARM平台定制整理出了一套商用版本的音频转码EasyAACEncoder SDK,目前海思(hisiv100、hisiv200、hisiv300、hisiv400)全系列均已支持,CPU占用率极低,能非常好地满足ARM平台的AAC音频转码需求!

2. API接口函数定义

2.1 SDK激活

函数:
Easy_API int Easy_APICALL Easy_AACEncoder_activate(char *license);

参数:
license: SDK激活码,可在 www.pvale.com 在线获取,或联系我们。

返回:
返回值为第三节的EASY_ACTIVATE_ERR_CODE_ENUM枚举类型

2.2 创建AAC Encoder句柄

函数:
Easy_API EasyAACEncoder_Handle Easy_APICALL Easy_AACEncoder_Init(InitParam initPar);

参数:
initPar: 指定原始音频编码格式、采样率、通道数、位深度

返回:
本次AAC Encoder Session的句柄

2.3 AAC编码

函数:
Easy_API int Easy_APICALL Easy_AACEncoder_Encode(EasyAACEncoder_Handle handle, unsigned char inbuf, unsigned int inlen, unsigned char outbuf, unsigned int* outlen);

参数:
handle: Easy_AACEncoder_Init接口返回的句柄
inbuf: 输入的原始音频数据
inlen: 输入的原始音频数据大小
outbuf: 输出的AAC数据
outlen: 输出的AAC数据大小, 如果本次输入的原始数据不能编码成一个完整的AAC帧,这里返回0,库里会等待后面的数据再返回一个完整的AAC帧

2.4 释放AAC Encoder句柄

函数:
Easy_API void Easy_APICALL Easy_AACEncoder_Release(EasyAACEncoder_Handle handle);

参数:
handle: Easy_AACEncoder_Init接口返回的句柄

3. 结构体描述

typedef enum __EASY_ACTIVATE_ERR_CODE_ENUM
{
EASY_ACTIVATE_INVALID_KEY = -1, /* 无效Key */
EASY_ACTIVATE_TIME_ERR = -2, /* 时间错误 */
EASY_ACTIVATE_PROCESS_NAME_LEN_ERR = -3, /* 进程名称长度不匹配 */
EASY_ACTIVATE_PROCESS_NAME_ERR = -4, /* 进程名称不匹配 */
EASY_ACTIVATE_VALIDITY_PERIOD_ERR= -5, /* 有效期校验不一致 */
EASY_ACTIVATE_PLATFORM_ERR = -6, /* 平台不匹配 */
EASY_ACTIVATE_COMPANY_ID_LEN_ERR= -7, /* 授权使用商不匹配 */
EASY_ACTIVATE_SUCCESS = 0, /* 激活成功 */
}EASY_ACTIVATE_ERR_CODE_ENUM;
/* 视频编码 */
#define EASY_SDK_VIDEO_CODEC_H264 0x1C /* H.264 */
#define EASY_SDK_VIDEO_CODEC_H265 0x48323635 /* H.265 */
#define EASY_SDK_VIDEO_CODEC_MJPEG 0x08 /* MJPEG */
#define EASY_SDK_VIDEO_CODEC_MPEG4 0x0D /* MPEG4 */
/* 音频编码 */
#define EASY_SDK_AUDIO_CODEC_AAC 0x15002 /* AAC */
#define EASY_SDK_AUDIO_CODEC_G711U 0x10006 /* G711 ulaw*/
#define EASY_SDK_AUDIO_CODEC_G711A 0x10007 /* G711 alaw*/
#define EASY_SDK_AUDIO_CODEC_G726 0x1100B /* G726 */
#define EASY_SDK_EVENT_CODEC_ERROR 0x63657272 /* ERROR */
#define EASY_SDK_EVENT_CODEC_EXIT 0x65786974 /* EXIT */
/* 音视频帧标识 */
#define EASY_SDK_VIDEO_FRAME_FLAG 0x00000001 /* 视频帧标志 */
#define EASY_SDK_AUDIO_FRAME_FLAG 0x00000002 /* 音频帧标志 */
#define EASY_SDK_EVENT_FRAME_FLAG 0x00000004 /* 事件帧标志 */
#define EASY_SDK_RTP_FRAME_FLAG 0x00000008 /* RTP帧标志 */
#define EASY_SDK_SDP_FRAME_FLAG 0x00000010 /* SDP帧标志 */
#define EASY_SDK_MEDIA_INFO_FLAG 0x00000020 /* 媒体类型标志*/
/* 视频关键字标识 */
#define EASY_SDK_VIDEO_FRAME_I 0x01 /* I帧 */
#define EASY_SDK_VIDEO_FRAME_P 0x02 /* P帧 */
#define EASY_SDK_VIDEO_FRAME_B 0x03 /* B帧 */
#define EASY_SDK_VIDEO_FRAME_J 0x04 /* JPEG */
/* 连接类型 */
typedef enum __EASY_RTP_CONNECT_TYPE
{
EASY_RTP_OVER_TCP = 0x01, /* RTP Over TCP */
EASY_RTP_OVER_UDP /* RTP Over UDP */
}EASY_RTP_CONNECT_TYPE;
/* 媒体信息 */
typedef struct __EASY_MEDIA_INFO_T
{
Easy_U32 u32VideoCodec; /* 视频编码类型 */
Easy_U32 u32VideoFps; /* 视频帧率 */
Easy_U32 u32VideoQueueSize; /* 视频缓存大小 */
Easy_U32 u32AudioCodec; /* 音频编码类型 */
Easy_U32 u32AudioSamplerate; /* 音频采样率 */
Easy_U32 u32AudioChannel; /* 音频通道数 */
Easy_U32 u32AudioBitsPerSample; /* 音频采样精度 */
Easy_U32 u32AudioQueueSize; /* 音频缓存大小 */
Easy_U32 u32VpsLength; /* H.265格式VPS长度 */
Easy_U32 u32SpsLength; /* SPS数据长度 */
Easy_U32 u32PpsLength; /* PPS数据长度 */
Easy_U32 u32SeiLength; /* SEI信息数据长度 */
Easy_U8 u8Vps[255]; /* VPS数据内容 */
Easy_U8 u8Sps[255]; /* SPS数据内容 */
Easy_U8 u8Pps[128]; /* PPS数据内容 */
Easy_U8 u8Sei[128]; /* SEI数据内容 */
}EASY_MEDIA_INFO_T;
typedef struct __EASY_AV_Frame
{
Easy_U32 u32AVFrameFlag; /* 帧标志 视频 or 音频 */
Easy_U32 u32AVFrameLen; /* 帧的长度 */
Easy_U32 u32VFrameType; /* 视频的类型,I帧或P帧 */
Easy_U8 *pBuffer; /* 数据 */
Easy_U32 u32TimestampSec; /* 时间戳(秒)*/
Easy_U32 u32TimestampUsec; /* 时间戳(微秒) */
}EASY_AV_Frame;
///* Audio Codec */
enum Law
{
Law_ULaw = 0, /**< U law */
Law_ALaw = 1, /**< A law */
Law_PCM16 = 2, /**< 16 bit uniform PCM values. original pcm data */
Law_G726 = 3 /**< G726 */
};
///* Rate Bits */
enum Rate
{
Rate16kBits=2, /**< 16k bits per second (2 bits per ADPCM sample) */
Rate24kBits=3, /**< 24k bits per second (3 bits per ADPCM sample) */
Rate32kBits=4, /**< 32k bits per second (4 bits per ADPCM sample) */
Rate40kBits=5 /**< 40k bits per second (5 bits per ADPCM sample) */
};
typedef struct _g711param
{
;
}G711Param;
typedef struct _g726param
{
unsigned char ucRateBits;//Rate16kBits Rate24kBits Rate32kBits Rate40kBits
}G726Param;
typedef struct _initParam
{
unsigned char ucAudioCodec; // Law_uLaw Law_ALaw Law_PCM16 Law_G726
unsigned char ucAudioChannel; //1
unsigned int u32AudioSamplerate; //8000
unsigned int u32PCMBitSize; //16
union
{
G711Param g711param;
G726Param g726param;
};
}InitParam;