0

我从设备中对原始 PCM 数据进行采样,通过 libfaac 将其编码为“.aac”格式(ADTS 格式)的音频文件,当我以 16KHZ 或 41KHZ 对其进行采样时,编码的“.aac”文件播放速度比正常速度快。什么原因?

参数配置如下:

    pConfiguration->inputFormat = FAAC_INPUT_16BIT;
    pConfiguration->outputFormat = 1; /*0 - raw; 1 - ADTS*/
    pConfiguration->bitRate = 16000; 
    pConfiguration->useTns = 0;
    pConfiguration->allowMidside = 1;
    pConfiguration->shortctl = SHORTCTL_NORMAL;
    pConfiguration->aacObjectType = LOW;
    pConfiguration->mpegVersion = MPEG4;
    //pConfiguration->useLfe = 1;
4

1 回答 1

0

问题已解决:

我丢失了一些数据帧的原始PCM数据,我使用HISI3516EV100处理器,使用HISI SDK,问题是我配置PCM数据的参数,采样率在16000HZ的情况下,PCM数据帧采样点设置为160个采样/帧,这会导致每秒产生16000/160 = 100帧,帧率太高,每个PCM数据帧我都需要调用AAC编码的处理函数,会导致堆栈中的很多函数,几乎1000 /100 = 10ms需要完成一帧PCM数据调用AAC编码接口,频率太高,而且libfaac库有点CPU消耗,导致丢帧(原始PCM数据帧部分丢失),这样在原始 PCM 数据部分丢失的情况下,编码后的 AAC 数据会比平时播放得更快。

解决方法:将PCM帧的帧长加长到160samples/frame--->480samples/frame

于 2019-01-24T01:20:57.810 回答