Декодер AAC

Декодер Microsoft Media Foundation AAC — это преобразование Media Foundation , которое декодирует следующие профили Расширенного аудиокодирования (AAC) и Высокой эффективности AAC (HE-AAC):

  • Профиль mpeg-2 AAC Low Complexity (LC) (multichannel).
  • MPEG-4 HE-AAC v1 (multichannel) с ядром AAC-LC.
  • MPEG-4 HE-AAC v2 (стерео) с ядром AAC-LC.

Декодер AAC поддерживает как необработанные потоки AAC без заголовков, так и AAC в потоке передачи аудиоданных (ADTS).

Начиная с Windows 8 декодер AAC также поддерживает декодирование транспортных аудиопотоков MPEG-4 с помощью мультиплексного слоя (LATM) и уровня синхронизации (LOAS). Он также может преобразовать поток LATM/LOAS в ADTS.

Идентификатор класса

Идентификатор класса (CLSID) кодировщика AAC CLSID_CMSAACDecMFT, определенный в файле заголовка wmcodecdsp.h.

Типы мультимедиа

Декодер AAC поддерживает следующие типы мультимедиа.

Типы входных данных

Декодер AAC поддерживает следующие подтипы звука:

Subtype Описание Header
MFAudioFormat_AAC Необработанные AAC или ADTS AAC.
Для этого подтипа тип носителя предоставляет частоту выборки и количество каналов до применения инструментов репликации спектрального диапазона (SBR) и параметрического стерео (PS), если они есть. Результатом использования средства SBR является удвоение декодированного частоты дискретизации относительно частоты дискретизации основного AAC-LC. Средство PS позволяет декодировать стерео из основного потока AAC-LC с моноканальной кодировкой.
Этот подтип эквивалентен MEDIASUBTYPE_MPEG_HEAAC, определенному в wmcodecdsp.h. См. раздел Идентификаторы GUID подтипа аудио.
Источник файлов MPEG-4 и средство синтаксического анализа ADTS выводят этот подтип.
mfapi.h
MEDIASUBTYPE_RAW_AAC1 Необработанный AAC.
Этот подтип используется для AAC, содержащегося в файле AVI с тегом аудиоформата, равным WAVE_FORMAT_RAW_AAC1 (0x00FF).
Для этого подтипа тип мультимедиа предоставляет частоту выборки и количество каналов после применения средств SBR и PS, если они имеются.
wmcodecdsp.h

Чтобы настроить декодер AAC, задайте следующие атрибуты для типа входного носителя.

attribute Описание Remarks
MF_MT_MAJOR_TYPE Основной тип. Должен быть MFMediaType_Audio.
MF_MT_SUBTYPE Подтип звука. Дополнительные сведения см. в предыдущем описании.
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION Профиль и уровень звука.
Необязательный элемент. Применяется только к MFAudioFormat_AAC.
Значением этого атрибута является поле audioProfileLevelIndication , как определено в СТАНДАРТЕ ISO/IEC 14496-3.
Если он неизвестен, задайте значение ноль или 0xFE ("не указан звуковой профиль").
MF_MT_AAC_PAYLOAD_TYPE Тип полезных данных.
Применяется только к MFAudioFormat_AAC. Декодер поддерживает следующие типы полезных данных:
  • 0: необработанный AAC. Поток содержит только элементы raw_data_block(), как определено в MPEG-2.
  • 1: ADTS. Поток содержит adts_sequence(), как определено в MPEG-2. Допускается только один raw_data_block() на adts_frame().
  • 3. Транспортный поток аудио с уровнем синхронизации (LOAS) и мультиплексным слоем (LATM). Из трех типов LOAS поддерживается только AudioSyncStream . Мультиплексный слой — Это AudioMuxElement, ограниченный одной звуковой программой и одним слоем.
MF_MT_AAC_PAYLOAD_TYPE является необязательным. Если этот атрибут не указан, используется значение по умолчанию 0, указывающее, что поток содержит только raw_data_block элементов.
MF_MT_AUDIO_BITS_PER_SAMPLE Требуемая битовая глубина декодированного звука PCM.
MF_MT_AUDIO_CHANNEL_MASK Задает назначение звуковых каналов позициям говорящего. Необязательный элемент. Дополнительные сведения см. в разделе Ограничения формата.
MF_MT_AUDIO_NUM_CHANNELS Количество каналов, включая низкочастотный канал (LFE), если он имеется.
Интерпретация этого значения зависит от подтипа мультимедиа, как описано выше.
MF_MT_AUDIO_SAMPLES_PER_SECOND Частота выборки в выборках в секунду.
Интерпретация этого значения зависит от подтипа мультимедиа, как описано выше.
MF_MT_USER_DATA Дополнительные сведения о форматировании. Значение этого атрибута зависит от подтипа.
  • MFAudioFormat_AAC: содержит часть структуры HEAACWAVEINFO , которая отображается после структуры WAVEFORMATEX (то есть после элемента wfx ). Затем следуют данные AudioSpecificConfig(), как определено в ISO/IEC 14496-3.
  • MEDIASUBTYPE_RAW_AAC1: содержит данные AudioSpecificConfig(). Эти данные должны отображаться; В противном случае декодер отклоняет тип носителя.
Длина данных AudioSpecificConfig() составляет 2 байта для AAC-LC или HE-AAC с неявной сигнализацией SBR/PS. Это более 2 байт для HE-AAC с явной сигнализацией SBR/PS.
Значение audioObjectType , определенное в AudioSpecificConfig(), должно быть равно 2, что указывает на AAC-LC. Значение extensionAudioObjectType должно быть равно 5 для SBR или 29 для PS.

Типы вывода

Декодер поддерживает следующие типы выходных данных:

Subtype Описание
MFAudioFormat_Float Звук с плавающей запятой IEEE.
MFAudioFormat_PCM 16-разрядный звук PCM.
MFAudioFormat_AAC Требуется Windows 8.
Этот тип выходных данных можно использовать для преобразования потока AAC в формате LOAS/LATM в формат ADTS.
Чтобы преобразовать поток LOAS/LATM в поток ADTS, задайте тип входных данных MFAudioFormat_AAC с типом полезных данных 3 (LOAS). Затем задайте тип вывода MFAudioFormat_AAC с типом полезных данных 1 (ADTS). Декодер переформатирует conainter без декодирования битового потока.
Примечание: Декодер не регистрирует MFAudioFormat_AAC в качестве типа вывода. Однако если приложение задает тип входных данных, как описано выше, метод IMFTransform::GetOutputAvailableType возвращает MFAudioFormat_AAC в списке доступных типов выходных данных.

Если входной поток содержит более двух каналов, декодер AAC предоставляет два варианта для формата вывода:

  • Та же конфигурация канала, что и тип входных данных.
  • Стерео свертывания.

Ограничения формата

Частота дискретизации декодированного звука должна быть одной из следующих после применения SBR (при наличии):

  • 8 кГц
  • 11,025 кГц
  • 12 кГц
  • 16 кГц
  • 22,05 кГц
  • 24 кГц
  • 32 кГц
  • 44,1 кГц
  • 48 кГц

Частота выборки выше 48 кГц не поддерживается.

Декодер поддерживает до 6 звуковых каналов. Для каждой конфигурации говорящего декодер ожидает, что синтаксические элементы AAC будут отображаться в определенном порядке. В следующей таблице перечислены поддерживаемые конфигурации говорящего. В третьем столбце таблицы перечислены ожидаемые синтаксические элементы и их порядок, используя следующую нотацию:

  • <SCE1>: single_channel_element (SCE), связанный с передним центральным динамиком.
  • <SCE2>: SCE, связанный с динамиком заднего центра.
  • <CPE1>: channel_pair_element (CPE), связанный с передними динамиками.
  • <CPE2>: CPE, связанный с задними (или боковыми) динамиками
  • <LFE>: lfe_channel_element (LFE).

Дополнительные сведения об этих синтаксических элементах см. в статье ISO/IEC 13818-7.

Конфигурация Маска канала Синтаксические элементы AAC
Mono SPEAKER_FRONT_CENTER <SCE1>
Стерео или двойной моно | SPEAKER_FRONT_LEFTSPEAKER_FRONT_RIGHT <CPE1>
2/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_BACK_CENTER <CPE1><SCE1>
2/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <CPE1><CPE2>
3/0 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHTSPEAKER_FRONT_CENTER <SCE1><CPE1>
3/1 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTERSPEAKER_BACK_CENTER <SCE1><CPE1><SCE2>
3/2 | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2>
3/2 + LFE | SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFTSPEAKER_BACK_RIGHT <SCE1><CPE1><CPE2><LFE>

Для необработанных AAC каждый входной пример должен содержать ровно один полный сжатый кадр AAC.

Для ADTS каждый входной пример может содержать несколько аудиокадров, а также частичные кадры, то есть кадры могут охватывать границы выборки. За каждым заголовком ADTS должен следовать один кадр AAC.

Декодер AAC не поддерживает следующее:

  • Основной профиль, профиль Sample-Rate масштабируемый профиль (SRS) или профиль долгосрочного прогнозирования (LTP).
  • Формат обмена аудиоданными (ADIF).
  • Транспортные потоки LATM/LAOS.
  • Элементы канала связи (CCE). Декодер пропускает аудиокадры с cces.
  • AAC-LC с размером кадра 960 выборок. Поддерживаются только кадры с 1024 образцами.

Атрибуты преобразования

Декодер AAC реализует метод IMFTransform::GetAttributes . Приложения могут использовать этот метод для получения или задания следующих атрибутов.

attribute Описание
CODECAPI_AVDecAudioDualMono Указывает, кодируется ли двухканальный звук как стерео или двойной моно. Обрабатывать как доступный только для чтения.
CODECAPI_AVDecAudioDualMonoReproMode Указывает, как декодер воспроизводит двойной монофонический звук. Значение по умолчанию — eAVDecAudioDualMonoReproMode_LEFT_MONO: вывод ch1 на левый и правый динамики.
Приложения могут задать это свойство, чтобы изменить поведение по умолчанию.
MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE Декодер AAC не обрабатывает динамические изменения формата и должен быть сброшен или слит перед настройкой нового типа входного носителя. Рассматривайте этот атрибут как доступный только для чтения.
Примечание: Декодер AAC неправильно сообщает значение TRUE для этого атрибута.
В Windows 7 декодер неправильно сообщает значение TRUE для этого атрибута. В Windows 8 декодер сообщает false, что является правильным значением

Примеры типов мультимедиа

Ниже приведен пример типа входного носителя, необходимого для 6-канального потока AAC-LC с частотой 48 кГц с использованием необработанных полезных данных AAC:

attribute Значение
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_AAC
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AAC_PAYLOAD_TYPE 0
MF_MT_USER_DATA {0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xb0}
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x2a (необязательно)

Первые 12 байтов MF_MT_USER_DATA соответствуют следующим членам структуры HEAACWAVEINFO :

  • wPayloadType = 0 (необработанный AAC)
  • wAudioProfileLevelIndication = 0x2a (профиль AAC, уровень 4)
  • wStructType = 0

Последние два байта MF_MT_USER_DATA содержат значение AudioSpecificConfig(), как определено в MPEG-4.

  • AudioSpecificConfig.audioObjectType = 2 (AAC LC) (5 бит)
  • AudioSpecificConfig.samplingFrequencyIndex = 3 (4 бита)
  • AudioSpecificConfig.channelConfiguration = 6 (4 бита)
  • GASpecificConfig.frameLengthFlag = 0 (1 бит)
  • GASpecificConfig.dependsOnCoreCoder = 0 (1 бит)
  • GASpecificConfig.extensionFlag = 0 (1 бит)

Учитывая этот тип входных данных, используйте следующий выходной тип носителя, чтобы получить 6-канальный 32-разрядный звук PCM с плавающей запятой из декодера:

attribute Значение
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_Float
MF_MT_AUDIO_BITS_PER_SAMPLE 32
MF_MT_AUDIO_SAMPLES_PER_SECOND 48000
MF_MT_AUDIO_NUM_CHANNELS 6
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 1152000 (необязательно)
MF_MT_AUDIO_BLOCK_ALIGNMENT 24 (необязательно)
MF_MT_AUDIO_CHANNEL_MASK 0x3f (необязательно)

Если установлено дополнение к обновлению платформы для Windows Vista, декодер аудио AAC доступен в Windows Vista, но доступен в Windows Vista только с помощью средства чтения исходного кода.

Требования

Требование Значение
Минимальная версия клиента
Windows 7 [только классические приложения]
Минимальная версия сервера
Windows Server 2008 R2 [только классические приложения]
DLL
Msmpeg2adec.dll в Windows 7;
MSAudDecMFT.dll в Windows 8

См. также раздел

Объекты кодека

Типы мультимедиа AAC

Типы звуковых носителей

Декодер аудио Microsoft MPEG-1/DD/AAC

Поддержка MPEG-4 в Media Foundation

Поддерживаемые форматы мультимедиа в Media Foundation