[faac] 音频解码常用函数

221 阅读2分钟

libfaac库提供了一系列函数,用于将PCM音频数据编码为AAC格式的音频数据。


FAAC 库的使用场景包括但不限于以下几个方面:

  1. 音频流媒体传输

FAAC 库可以用于将音频流压缩为 AAC 格式,并进行网络传输。因为 AAC 格式具有高压缩比和高音质,所以在音频流媒体传输中被广泛应用,如网络电话、网络电视、网络广播等。

  1. 音频文件编码

FAAC 库可以用于将音频文件编码为 AAC 格式,并进行存储。因为 AAC 格式具有高压缩比和高音质,所以在音频文件编码中被广泛应用,如 MP4、M4A、3GP 等格式的文件。

  1. 音频转码

FAAC 库可以用于将不同格式的音频数据转码为 AAC 格式。对于需要将 PCM、MP3、WAV 等格式的音频数据转码为 AAC 格式的应用场景,可以使用 FAAC 库进行音频转码。

  1. 音频处理

FAAC 库可以用于音频处理,如音频降噪、音频增益、音频混音等。在音频处理过程中,使用 FAAC 库将处理后的音频数据编码为 AAC 格式,可以获得更高的压缩比和音质。

头文件定义


/*
   Allows an application to get FAAC version info. This is intended
   purely for informative purposes.

   Returns FAAC_CFG_VERSION.
*/
int FAACAPI faacEncGetVersion(char **faac_id_string,
                              char **faac_copyright_string);


faacEncConfigurationPtr FAACAPI faacEncGetCurrentConfiguration(faacEncHandle hEncoder);


/**
 * FAAC编码器的配置参数
 * @param hEncoder
 * @param config  编码器配置参数
 * @return
 */
int FAACAPI faacEncSetConfiguration(faacEncHandle hEncoder, faacEncConfigurationPtr config);


/**
 * 初始化FAAC编码器,并返回一个编码器句柄
 * @param sampleRate
 * @param numChannels
 * @param inputSamples
 * @param maxOutputBytes
 * @return
 */
faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,
                                  unsigned int numChannels,
                                  unsigned long *inputSamples,
                                  unsigned long *maxOutputBytes);


/**
 * 获取 AAC 编码器参数中 decoder specific info
 * @param hEncoder
 * @param ppBuffer   ppBuffer 是指针的指针,用于存储 decoder specific info
 * @param pSizeOfDecoderSpecificInfo  ,pSizeOfDecoderSpecificInfo 用于存储 decoder specific info 的长度
 * @return   函数返回解码器特定信息的长度
 */
int FAACAPI faacEncGetDecoderSpecificInfo(faacEncHandle hEncoder, unsigned char **ppBuffer,
                                          unsigned long *pSizeOfDecoderSpecificInfo);


/**
 * 将PCM音频数据编码为AAC格式的音频数据
 * @param hEncoder      编码器句柄
 * @param inputBuffer   输入PCM音频数据的缓冲区指针
 * @param samplesInput  输入PCM音频数据的样本数
 * @param outputBuffer  输出AAC格式音频数据的缓冲区指针
 * @param bufferSize    输出AAC格式音频数据的缓冲区大小
 * @return     编码后的字节数,如果返回0表示编码失败。
 */
int FAACAPI faacEncEncode(faacEncHandle hEncoder, int32_t *inputBuffer, unsigned int samplesInput,
                          unsigned char *outputBuffer,
                          unsigned int bufferSize);


/**
 * 关闭FAAC编码器
 * @param hEncoder  编码器句柄
 * @return
 */
int FAACAPI faacEncClose(faacEncHandle hEncoder);