Я кодирую исходный звук в AAC с помощью API MediaCodec для Android. Проблема: мне нужно отправить на сервер поток AAC в кусках одной секунды. Поэтому мне нужно разделить поток. Прямо сейчас, поскольку кадр AAC составляет 1024 образца, я принимаю round(SAMPLE_RATE/1024)
AAC кадры для каждого фрагмента. Однако из-за «пробных образцов» эта простая резка потока AAC не работает. Подробнее см. Ниже. После отправки фрагмента на сервер клиент получает его в веб-браузере Chrome, а с помощью API Web Audio воспроизводит все полученные фрагменты. Воспроизведение выполняется таким образом, чтобы быть бесщелочным: изначально выделяется большой аудиоблокер, полученные фрагменты декодируются и копируются в аудиобуфере, воспроизводится аудиокнига. Теперь это не работает с AAC (хотя он работает с Ogg/Vorbis). С AAC у меня есть артефакты в сгенерированном звуке. В конце каждой секунды начало следующей секунды равно нулю, затем постепенно, форма волны растет до тех пор, пока она не будет иметь нормальный размер. Это длится 10, 20 миллисекунд. Я считаю, что проблема вызвана отсутствием "priming samples". Возможно, Web Audio API ожидает «пробных образцов» в начале каждого фрагмента AAC, он не находит их и, таким образом, изменяет фактический звук.Разделение потока AAC, проблемы с загрунтованием/заполнением образцов (безщелезное воспроизведение)
Вопрос: как я могу разделить исходный поток AAC и отправить «хорошие» AAC куски одной секунды? Из того, что я понял, я должен включить в начале каждого фрагмента предыдущие два кадра (последние два кадра предыдущего фрагмента). Однако это число должно меняться, и документации не так много. Некоторые советы экспертов приветствуются.