Я пытаюсь обрабатывать данные аудиосигнала во время потоковой передачи, используя 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);
У меня три вопроса:
Как определяется размер результирующего буфера codec.getInputBuffer () ? Зависит ли это от используемого формата медиа?
Как описано выше, правильно ли сопоставлять размер буфера с размером кадра, если я хочу передавать и анализировать аудиоданные одновременно?
Как бы вы изменили размер входных и выходных буферов, которые проходят через MediaCodec?