Как использовать определяемые пользователем inputSamples для преобразования pcm в aac с помощью facc

Я пытаюсь преобразовать живой поток с g726 и h264 в mp4. Я декодирую g726 в pcm, затем использую faac для кодирования pcm в aac. Каждый аудиопакет g726, который я получаю, составляет 320 байтов. После декодирования размер pcm составляет 1280 байт, поэтому номер образца равен 640. Но inputSamples, которые дает мне faacEncOpen, равен 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;
    }
}

0 ответов

Другие вопросы по тегам