Кодировщик 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 | Выборки в секунду. | Поддерживаются следующие значения.
|
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 (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. | Необязательный элемент. Поддерживаются следующие значения.
|
В следующей таблице перечислены значения, которые можно использовать для атрибута 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 |
|