Как использовать определяемые пользователем 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;
}
}