table的专栏

首先FAAC和FAAD的下载地址在前面的博文里有。

FAAC和FAAD有win32的编译工程,相对其他开源项目来说,win32的编译很简单了

FAAC,FAAD的编码和解码也封装的非常好,使用上很简单。

打开FAAC编码器

m_faacHandle = faacEncOpen(isamplerate, ichannels, &m_uSampleInput, &m_uOutputBytes);

if( 0 == m_faacHandle )return false ;

faacEncConfigurationPtr faacCfg;

faacCfg = faacEncGetCurrentConfiguration(m_faacHandle);

if (faacCfg->version != FAAC_CFG_VERSION){return false ;}

//* 设置配置参数faacCfg->aacObjectType = LOW; //LC编码faacCfg->mpegVersion = MPEG4;//faacCfg->useTns = 1 ;//时域噪音控制,大概就是消爆音faacCfg->allowMidside =0 ;//faacCfg->bitRate = m_nBitRate/m_uChannelNums;faacCfg->bandWidth = 0 ; //频宽faacCfg->outputFormat = isADTS; //输出是否包含ADTS头faacCfg->inputFormat = FAAC_INPUT_16BIT;//faacCfg->shortctl = 0 ;faacCfg->quantqual = 50 ;

//* 获取解码信息.//unsigned char* ucBuffer = NULL;//unsigned long ulDecoderSpecificInfoSize;//faacEncGetDecoderSpecificInfo(m_faacHandle, &ucBuffer, &ulDecoderSpecificInfoSize);

if (!faacEncSetConfiguration(m_faacHandle, faacCfg)){return false ;}

m_uSampleInput这个参数要注意,需要在编码时使用。是faac所使用的音频样片数量

随后就可以解码了

int iBytesWritten = faacEncEncode(m_faacHandle, (int32_t*)input, m_uSampleInput , output, outlen );

判断下iBytesWritten初始编码的几帧数据会返回0,,0是数据被缓冲,并不是错误。

解码相对编码更简单。

但是遇到个问题,就是编码单声道的数据,解码会返回双声道,这对打开播放设备播放时造成了一定的

困扰。因为前期是将音频编码参数优先发送出来,接收端收到参数后会打开播放设备,现在得在数据解码后再打开

播放设备。

每一天都不可追回,所以更要珍惜每一寸光阴,

table的专栏

相关文章:

你感兴趣的文章:

标签云: