Поделиться через


Кодировщик AAC

Кодировщик Microsoft Media Foundation AAC — это преобразование Media Foundation , которое кодирует профиль Advanced Audio Coding (AAC) Low Complexity (LC), как определено в ISO/IEC 13818-7 (MPEG-2 Audio Part 7).

Кодировщик AAC не поддерживает кодировку для других профилей AAC, таких как Main, SSR или LTP.

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

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

Типы носителей

Кодировщик AAC поддерживает следующие типы мультимедиа. Типы можно задать либо в порядке, либо в первом порядке, либо в первом типе вывода.

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

Задайте следующие атрибуты для типа входного носителя.

attribute Описание Remarks
MF_MT_MAJOR_TYPE Основной тип. Должен быть MFMediaType_Audio.
MF_MT_SUBTYPE Подтип. Должен быть MFAudioFormat_PCM.
MF_MT_AUDIO_BITS_PER_SAMPLE Биты на выборку. Должно быть 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Выборки в секунду. Поддерживаются следующие значения.
  • 44100 (44,1 КГц)
  • 48000 (48 кГц)
MF_MT_AUDIO_NUM_CHANNELS Количество каналов. Значение должно быть 1 (моно) или 2 (стерео) или 6 (5.1). Примечание: Поддержка 6 аудиоканалов появилась в Windows 10 и недоступна для более ранних версий Windows.

После установки входного типа кодировщик получает следующие значения и добавляет их к типу носителя:

Типы вывода

Задайте следующие атрибуты для выходного типа носителя.

attribute Описание Remarks
MF_MT_MAJOR_TYPE Основной тип. Должен быть MFMediaType_Audio.
MF_MT_SUBTYPE Подтип аудио. Должен быть MFAudioFormat_AAC.
MF_MT_AUDIO_BITS_PER_SAMPLE Биты на выборку. Должно быть 16.
MF_MT_AUDIO_SAMPLES_PER_SECOND Выборки в секунду. Должен соответствовать типу входных данных.
MF_MT_AUDIO_NUM_CHANNELS Количество каналов. Должен соответствовать типу входных данных.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Скорость закодированного потока AAC в байтах в секунду. Поддерживаются следующие значения.
  • 12000
  • 16000
  • 20 000
  • 24 000
При использовании 6 каналов умножьте эти значения на 6.
Значение по умолчанию для моно и стерео — 12000 (96 Кбит/с). Значение по умолчанию для 6 каналов — 60 000.
MF_MT_AAC_PAYLOAD_TYPE Тип полезных данных AAC. Необязательный элемент. Если задано значение , значение должно быть равно нулю, указывая, что поток содержит только raw_data_block элементов.
Необязательный элемент. Если атрибут не задан, значение по умолчанию равно нулю, указывая на то, что поток содержит только raw_data_block элементов (необработанные элементы AAC).
В Windows 7, если этот атрибут задан, значение должно быть равно нулю.
Начиная с Windows 8, значение может быть равно 0 (необработанный AAC) или 1 (ADTS AAC).
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION Профиль и уровень звука AAC. Необязательный элемент. Поддерживаются следующие значения.
  • 0x29 (по умолчанию)
  • 0x2A
  • 0x2B
  • 0x2C
  • 0x2E
  • 0x2F
  • 0x30
  • 0x31
  • 0x32
  • 0x33

В следующей таблице перечислены значения, которые можно использовать для атрибута MF_MT_AAC_PROFILE_LEVEL_INDICATION.

значение MF_MT_AAC_PROFILE_LEVEL_INDICATION Профиль
0x29 Профиль AAC L2
0x2A Профиль AAC L4
0x2B Профиль AAC L5
0x2C Высокопроизводительный профиль AAC версии 1 L2
0x2E Профиль AAC версии 1 с высокой эффективностью L4
0x2F Профиль AAC версии 1 с высокой эффективностью L5
0x30 Профиль AAC версии 2 с высокой эффективностью L2
0x31 Профиль AAC версии 2 с высокой эффективностью L3
0x32 Профиль AAC версии 2 с высокой эффективностью L4
0x33 Профиль AAC версии 2 с высокой эффективностью L5

После установки типа выходных данных кодировщик AAC обновляет тип, добавляя атрибут MF_MT_USER_DATA . Этот атрибут содержит часть структуры HEAACWAVEINFO , которая отображается после структуры WAVEFORMATEX (то есть после элемента wfx ). Затем следуют данные AudioSpecificConfig(), как определено в ISO/IEC 14496-3.

Каждый выходной пример содержит один сжатый кадр AAC без заголовка. Этот формат эквивалентен элементу raw_data_block(), определенному MPEG-2. Атрибут MF_MT_AAC_PAYLOAD_TYPE , если он присутствует в выходном типе, должен иметь нулевое значение, чтобы указать этот тип полезных данных.

Каждый выходной пример содержит один сжатый кадр AAC, соответствующий 1024 примерам PCM. Например, при частоте выборки 48 кГц длительность одного сжатого кадра составляет 21,33 мс.

Если MF_MT_AAC_PAYLOAD_TYPE равно нулю (значение по умолчанию), каждый выходной пример содержит один элемент raw_data_block() в соответствии с iso/IEC 13818-7.

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

Ниже приведен пример типов мультимедиа, необходимых для кодирования стереофонического звука со скоростью 44,1 кГц и 160 Кбит/с в формат AAC

Тип входного носителя:

attribute Значение
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_PCM
MF_MT_AUDIO_BITS_PER_SAMPLE 16
MF_MT_AUDIO_SAMPLES_PER_SECOND 44100
MF_MT_AUDIO_NUM_CHANNELS 2
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 176400 (необязательно)
MF_MT_AUDIO_BLOCK_ALIGNMENT 4 (необязательно)
MF_MT_ALL_SAMPLES_INDEPENDENT 1 (необязательно)
MF_MT_AVG_BITRATE 1411200 (необязательно)
MF_MT_FIXED_SIZE_SAMPLES 1 (необязательно)

Тип выходного носителя:

attribute Значение
MF_MT_MAJOR_TYPE MFMediaType_Audio
MF_MT_SUBTYPE MFAudioFormat_AAC
MF_MT_AUDIO_BITS_PER_SAMPLE 16
MF_MT_AUDIO_SAMPLES_PER_SECOND 44100
MF_MT_AUDIO_NUM_CHANNELS 2
MF_MT_AUDIO_AVG_BYTES_PER_SECOND 20 000
MF_MT_AAC_PAYLOAD_TYPE 0 (необязательно)
MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION 0x29 (необязательно)
MF_MT_AUDIO_BLOCK_ALIGNMENT 1 (необязательно)
MF_MT_ALL_SAMPLES_INDEPENDENT 0 (необязательно)
MF_MT_AVG_BITRATE 160000 (необязательно)
MF_MT_USER_DATA {0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x10} (необязательно)

Комментарии

В текущей реализации каждый входной пример должен иметь допустимое время и длительность. Чтобы задать время выборки, вызовите IMFSample::SetSampleTime. Чтобы задать длительность выборки, вызовите IMFSample::SetSampleDuration.

Если время выборки не задано, метод IMFTransform::P rocessInput кодировщика возвращает MF_E_NO_SAMPLE_TIMESTAMP. Если длительность выборки не задана, метод ProcessInput возвращает MF_E_NO_SAMPLE_DURATION.

Длительность выборки можно вычислить следующим образом:

LONGLONG hnsSampleDuration = 
    ( nAudioSamplesPerChannel * (LONGLONG)10000000 )/nSamplesPerSec;

где nAudioSamplesPerChannel — количество выборок звука PCM на канал во входном буфере, а nSamplesPerSec — частота выборки в секунду.

Примечание

Из-за ошибки в текущей реализации, если длительность выборки равна нулю, вызов ProcessInput завершается успешно, но последующий вызов IMFTransform::P rocessOutput вызовет исключение деления на ноль. Чтобы избежать этой ошибки, задайте допустимую ненулевое время для каждого входного примера.

Требования

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

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

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

Декодер AAC

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

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

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

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