0

我正在尝试将带有 g726 和 h264 的实时流转换为 mp4。我将 g726 解码为 pcm,然后使用 faac 将 pcm 编码为 aac。我收到的每个 g726 音频包都是 320 字节。解码后 pcm 大小为 1280 字节,因此样本数为 640。但 faacEncOpen 给我的 inputSamples 是 1024,而我的 inputFormat 是 FAAC_INPUT_16BIT。当我将 640 传递给 faacEncEncode 时,声音一点都不好。有谁知道如何解决这一问题。提前致谢!

// (1) Open FAAC engine
hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes); // nInputSamples the function returns is 1024

if(hEncoder == NULL)
{
    printf("[ERROR] Failed to call faacEncOpen()\n");
    return -1;
}

nInputSamples = 640;// here overwrites the input samples returned from faacEncOpen
nPCMBufferSize = nInputSamples * nPCMBitSize / 8; // nPCMBitSize is 16
pbPCMBuffer = new BYTE [nPCMBufferSize];
pbAACBuffer = new BYTE [nMaxOutputBytes];

// (2.1) Get current encoding configuration
pConfiguration = faacEncGetCurrentConfiguration(hEncoder);
pConfiguration->inputFormat = FAAC_INPUT_16BIT;

// (2.2) Set encoding configuration
nRet = faacEncSetConfiguration(hEncoder, pConfiguration);

for(int i = 0; 1; i++)
{
    nBytesRead = fread(pbPCMBuffer, 1, nPCMBufferSize, fpIn);

    nInputSamples = nBytesRead * 8 / nPCMBitSize;

    // (3) Encode
    nRet = faacEncEncode(
    hEncoder, (int*) pbPCMBuffer, nInputSamples, pbAACBuffer, nMaxOutputBytes);

    fwrite(pbAACBuffer, 1, nRet, fpOut);

    printf("%d: faacEncEncode returns %d\n", i, nRet);

    if(nBytesRead <= 0)
    {
        break;
    }
}
4

0 回答 0