Аудио AAC - задержка кодера и синхронизация
Это Техническое примечание обсуждает задержку кодера AAC и как это касается синхронизации с другими носителями, такими как видео.
Введение
AAC требует дополнительных данных, чтобы правильно закодировать и декодировать аудиосэмплы. Во время процесса кодирования кодер AAC потребует некоторого числа аудиосэмплов при вводе, прежде чем это сможет генерировать устройство доступа AAC (также называемый аудио пакетом). Во время декодирования зависимости по данным, существующие между устройствами доступа AAC, требуют, чтобы декодер AAC видел «предшествующее» устройство доступа AAC, для корректного декодирования текущего устройства доступа AAC.
Задержка кодера является термином, использованным для описания задержки, понесенной в, кодируют для создания должным образом закодированных пакетов. Это - число тихих демонстрационных кадров (также названный кадрами воспламенения) добавленный к передней стороне AAC закодированный поток битов.
Термин Остаток относится к числу тихих выборок (дополнение), добавленное до конца потока битов AAC окружить к размеру устройства доступа AAC.
Задержка кодера
В исходных реализациях AAC установившаяся практика должна была распространить задержку кодирования предоставленного потока битов AAC. С этими исходными реализациями наиболее распространенная используемая задержка была 2 112 аудиосэмплами. Поэтому поток битов AAC обычно был бы 3 устройствами доступа AAC, более крупными, чем, что теоретически требовалось исходным сигналом.
Поскольку эта задержка кодирования представлена в потоке битов AAC, первый фактический аудиосэмпл является 2 112 выборками (длина задержки кодирования) в декодируемый вывод.
Другими словами, первые и вторые декодируемые устройства доступа AAC были бы, каждый произвести 1 024 выборки тишины и третьего декодируемого устройства доступа AAC произвел бы первые 960 выборок данных первоисточника. 960 являющийся 1 024 выборками минус оставление 64 выборками задержки кодирования.
Реализация воспроизведения должна была бы тогда отбросить эти первые 2 112 тихих выборок от декодируемого вывода, так как они не содержат ни одни из аудиоданных первоисточника; эти выборки являются артефактом процесса кодирования/декодирования.
2 112 выборок были выбраны, потому что в то время это было общей задержкой кодирования, используемой большинством поставляющих реализаций кодеров AAC (коммерческий и иначе).


В вышеупомянутой схеме исходное аудио, которое будет закодировано показанная, поскольку синяя форма волны является 5 389 выборками долго.
Эти данные будут представлены в 8 устройствах доступа AAC, где каждое устройство доступа представляет 1 024 аудиосэмпла. Общая продолжительность, представленная этими 8 устройствами доступа AAC, является 8 192 выборками (обратите внимание на то, что это более длинно, чем продолжительность исходного аудио).
Результат разламывает на следующие значения:
2 112 выборок воспламенения в запуске - требуемый правильно закодировать запуск аудио.
5 389 выборок фактического аудио.
691 выборка остатка - требуемый окружить последние выборки к размеру пакета.
Поэтому для корректного извлечения исходных 5389 выборок исходного аудио первые 2 112 выборок воспламенения и последняя 691 выборка остатка должны быть удалены.
8192 - 2112 - 691 = 5 389 выборок первоисточника.
Синхронизация
Если система воспроизведения аудио, пытающаяся синхронизировать AAC, закодировала аудио, и видео не компенсирует эту задержку (т.е. не отбрасывает эти тихие выборки), аудио и видео будут вне синхронизации 2 112 выборками - аудио будет 2 112 выборками позади видео, так как первый реальный аудиосэмпл является фактически 2 112 выборками мимо начала декодируемых данных.
Поэтому система воспроизведения должна обрезать эти данные для сохранения корректной синхронизации.
Эта обрезка системой воспроизведения должна быть сделана в двух местах:
Когда сначала начинается воспроизведение.
Когда позиция воспроизведения перемещена в другое расположение - например, пользователь переходит непосредственно или назад к другой части носителей и начинает воспроизведение с того нового расположения.
2 112 демонстрационных предположений
Как не было никакого явного понятия с первыми реализациями этой задержки кодирования потока битов AAC, Apple принял решение предположить, что поток битов AAC всегда содержал задержку кодирования 2 112 выборок.
С MPEG 4 и ADTS/MPEG-2 передает поток битов и контейнеры файла, нет все еще никакого удовлетворительного и явного сигнального механизма или для задержки кодирования или для дополнения остатка. Поэтому нет никаких средних значений явного для корректного определения расположения первого и последнего фактического аудиосэмпла (ов) в потоке битов. Формат файла Core Audio (.caf) спецификация содержит явную запись в пакетном табличном блоке для получения обоих из этих значений.
Рекомендация задержки кодера
Apple рекомендует сторонние продукты, и устройства, генерирующие потоки битов AAC, делают так учитывая, что система воспроизведения будет всегда предполагать, что существует задержка кодирования 2 112 выборок в произведенном потоке битов. Нужно также предположить, что без явного значения, система воспроизведения обрежет 2 112 выборок от вывода декодера AAC при запуске воспроизведения с любой точки в bistream.
Во всех этих случаях поведение как описано выше; неявное, не - сообщенный, предположение сделано о размере этой задержки, и механизм воспроизведения требуется, чтобы обрезать это определяемое число выборок от его вывода в начале воспроизведения.
QuickTime и Core Audio APIs
Настройка по умолчанию для воспламенения AAC является 2 112 выборками, и настройка по умолчанию для выборок остатка 0.
MovieAudioExtraction и воспроизведение фильма
При воспроизведении QuickTime Movie или при использовании MovieAudioExtraction APIs для декодирования аудиосэмплов от a Movie, воспламенение по умолчанию и выборки остатка удалены из декодируемого потока битов. Когда создание файла, никакого воспламенения или информации об остатке добавляется к любому контейнеру файла в это время.
Аудио преобразователь
При использовании AudioConverter возразите непосредственно, настройка по умолчанию для воспламенения используется для кодирования и декодирования.
Во время декодирования они принимают значение по умолчанию, может быть переопределен с kAudioConverterPrimeInfo свойство и набор к любым значениям являются надлежащими.
Во время кодируют, значение может быть установлено, однако определенный используемый кодер может не поддерживать Ваши требуемые настройки.
Расширенный аудиофайл
С ExtAudioFile, воспламенение и значения остатка читаются из файла (если есть), и те выборки удалены из декодируемого потока битов автоматически от имени клиента. Если эти значения не присутствуют в файле, значения по умолчанию используются.
Аудио-очередь
AudioQueue объекты не обрабатывают воспламенение или выборки остатка для Вас, это - клиентская ответственность указать воспламенение и значения остатка если применимо.
Например, при «постановке в очередь» первых буферов от потока битов AAC клиент должен указать 2 112 выборок обрезки в начале того первого буфера (при отсутствии в частности сообщенных выборок воспламенения). Для последнего буфера клиент должен также обрезать выборки остатка (если известный).
Обратитесь к документации для AudioQueueEnqueueBufferWithParameters и Вопросы и ответы 1636 для получения дополнительной информации.
Аудиофайл
При создании файла с помощью AudioFile API, воспламенение и значения файла остатка будут записаны, если указано с kAudioFilePropertyPacketTableInfo свойство и тип файла, записанный поддержки эти значения. В настоящее время, только Формат файла Core Audio (.caf) и аудио MPEG 4 (.m4a) контейнеры имеют описанные средние значения для переноса этой информации.
ExtAudioFile выполнит эту работу от имени клиента; автоматически получая информацию о воспламенении из AudioConverter и вычисление кадров остатка.
Ссылка
Технические вопросы и ответы QA1636, 'аудио-очередь - цикличное выполнение сжатое аудио'
История версии документа
| Дата | Примечания |
|---|---|
| 19.11.2009 | Новый документ, обсуждающий задержку кодера AAC и эффекты на синхронизацию с другими носителями, такими как видео. |