Как настроить размер входного и выходного буферов, используемых Android MediaCodec? - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь обрабатывать данные аудиосигнала во время потоковой передачи, используя API-интерфейсы Android AudioTrack / MediaCodec.

Аудиоданные должны быть разрезаны на фреймы (окна) определенных размеров (в моем случае 1024), прежде чем я сделаю какой-либо дополнительный анализ, поэтому я пытался изменить размер входных и выходных буферов, поступающих в MediaCodec, так что они имеют одинаковый размер или кратны размерам кадра.

readBuffer = ByteBuffer.allocate(2048);
writeBuffer = ByteBuffer.allocate(2048);

Приведенный выше код распределяет байтовые буферы емкостью 2048 * readBuffer и writeBuffer , как я проверял, регистрируя readBuffer.capacity () .

Однако эти две строки кода, похоже, освобождают входной буфер с гораздо большей емкостью ( readBuffer.capacity () : 196608):

inputBufIndex = codec.dequeueInputBuffer(1000);
readBuffer = codec.getInputBuffer(inputBufIndex);

У меня три вопроса:

  1. Как определяется размер результирующего буфера codec.getInputBuffer () ? Зависит ли это от используемого формата медиа?

  2. Как описано выше, правильно ли сопоставлять размер буфера с размером кадра, если я хочу передавать и анализировать аудиоданные одновременно?

  3. Как бы вы изменили размер входных и выходных буферов, которые проходят через MediaCodec?

...