Использование API Transcode
В этом разделе описано, как использовать API транскодировки для кодирования файла мультимедиа.
- Обзор
- Создание источника мультимедиа
- Создание профиля Транскода
- Создание топологии Транскода
- Запуск сеанса кодирования
- Связанные разделы
Обзор
Перед использованием API транскода приложение должно иметь следующие сведения:
- Путь или URL-адрес существующего файла мультимедиа, который будет перекодирован.
- Имя выходного файла.
- Тип контейнера для выходного файла, например MP4 или расширенный формат потоковой передачи (ASF).
- Формат кодировки параметра. Эти сведения включают типы мультимедиа, описывающие закодированные аудио- и видеопотоки.
Чтобы использовать API транскодирования, приложение выполняет следующие действия.
- Создайте источник мультимедиа для чтения исходного файла.
- Создайте профиль транскода. Добавьте атрибуты, описывающие аудиопоток, видеопоток и контейнер файлов.
- Используйте профиль транскода для создания топологии кодирования. (Дополнительные сведения о топологиях см. в разделе "Сведения о топологиях".)
- Задайте топологию в сеансе мультимедиа.
- Запустите сеанс мультимедиа и дождитесь события MESessionEnded .
В оставшейся части этого раздела более подробно описаны эти шаги.
Создание источника мультимедиа
Источник мультимедиа — это объект, который считывает и анализирует исходный файл. Чтобы создать источник мультимедиа, используйте сопоставитель исходного кода. Пример кода можно найти в разделе с помощью сопоставителя исходного кода.
Создание профиля Транскода
Профиль транскода описывает формат и параметры, используемые для кодирования выходного файла. Профиль транскода содержит три набора атрибутов:
- Атрибуты звука: описание целевого формата звука и параметров кодировщика звука.
- Атрибуты видео: описание целевого формата видео и параметров кодировщика видео.
- Атрибуты контейнера: определите тип контейнера файлов, а также некоторые глобальные параметры кодирования.
Чтобы создать профиль транскода, вызовите функцию MFCreateTranscodeProfile . Эта функция возвращает указатель на интерфейс IMFTranscodeProfile . Исходный объект профиля пуст; он не содержит атрибутов. Следующим шагом является добавление атрибутов, определяющих профиль.
Звуковые атрибуты
Чтобы добавить атрибуты для звукового потока, вызовите IMFTranscodeProfile::SetAudioAttributes. Эти атрибуты указывают, как кодируется звуковой поток. Если выходной файл не будет содержать аудиопоток, опустите эти атрибуты.
Звуковые атрибуты делятся на две категории:
- Атрибуты, определяющие формат закодированного потока
- Атрибуты, определяющие другие параметры кодирования.
Атрибуты формата — это просто атрибуты типа мультимедиа, как описано в разделе "Типы мультимедиа". Точный набор атрибутов формата зависит от кодировщика. (См. поддерживаемые форматы мультимедиа в Media Foundation.) Ниже приведен список типичных атрибутов формата звука:
Атрибут Format | Описание: |
---|---|
MF_MT_SUBTYPE | Подтип. См. идентификаторы GUID подтипа звука. |
MF_MT_AUDIO_NUM_CHANNELS | Количество аудиоканалов. |
MF_MT_AUDIO_SAMPLES_PER_SECOND | Количество примеров звука в секунду. |
MF_MT_AUDIO_BLOCK_ALIGNMENT | Выравнивание блока. |
MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Среднее число байтов в секунду (закодированная скорость передачи). |
Определены следующие параметры кодирования.
Параметр кодировки | Описание: |
---|---|
MF_TRANSCODE_DONOT_INSERT_ENCODER | Запрещает API транскодирования вставлять кодировщик для звукового потока. |
MF_TRANSCODE_ENCODINGPROFILE | Указывает шаблон соответствия устройств. (Применяется только к файлам ASF.) |
MF_TRANSCODE_QUALITYVSSPEED | Задает компромисс между качеством кодирования и скоростью. |
Необходимо задать атрибуты формата. Параметры кодирования являются необязательными.
Один из способов найти формат, совместимый с кодировщиком, — вызвать функцию MFTranscodeGetAudioOutputAvailableTypes . Требуемый кодировщик задается подтипом. Функция возвращает коллекцию типов мультимедиа для этого кодировщика. Вы можете выбрать тип из списка и скопировать атрибуты в профиль. Пример кода, использующего этот подход, см. в руководстве по кодированию WMA-файла.
Атрибуты видео
Чтобы добавить атрибуты для видеопотока, вызовите IMFTranscodeProfile::SetVideoAttributes. Эти атрибуты указывают, как кодируется видеопоток. Если выходной файл не будет содержать видеопоток, опустите эти атрибуты.
Как и в случае с звуковыми атрибутами, атрибуты видео делятся на две категории:
- Атрибуты, определяющие формат закодированного потока
- Атрибуты, определяющие другие параметры кодирования.
Атрибуты формата — это атрибуты типа мультимедиа, как описано в разделе " Типы мультимедиа видео". Ниже приведен список типичных атрибутов формата видео:
Атрибут Format | Описание: |
---|---|
MF_MT_SUBTYPE | Подтип. См. идентификаторы GUID подтипа видео. |
MF_MT_FRAME_RATE | Частота кадров. |
MF_MT_FRAME_SIZE | Размер кадра. |
MF_MT_AVG_BITRATE | Средняя скорость передачи данных. |
MF_MT_PIXEL_ASPECT_RATIO | Пропорции пикселей. |
Определены следующие параметры кодирования.
Параметр кодирования | Описание: |
---|---|
MF_TRANSCODE_DONOT_INSERT_ENCODER | Запрещает API транскодирования вставлять кодировщик для видеопотока. |
MF_TRANSCODE_ENCODINGPROFILE | Указывает шаблон соответствия устройств. (Применяется только к файлам ASF.) |
MF_TRANSCODE_QUALITYVSSPEED | Задает компромисс между качеством кодирования и скоростью. |
Необходимо задать атрибуты формата. Параметры кодирования являются необязательными.
Атрибуты контейнера
Атрибуты контейнера определяют характеристики уровня файла выходного файла. Чтобы задать атрибуты контейнера, вызовите IMFTranscodeProfile::SetContainerAttributes. Определены следующие атрибуты.
attribute | Описание: |
---|---|
MF_TRANSCODE_ADJUST_PROFILE | Определяет параметры потока, используемые для топологии транскода. Вы можете задать флаги, чтобы использовать параметры источника ввода или использовать настраиваемые атрибуты потока. |
MF_TRANSCODE_CONTAINERTYPE | Задает формат выходного файла, например MP4 или ASF. На основе этого значения в топологию добавляется соответствующий приемник мультимедиа. |
MF_TRANSCODE_SKIP_METADATA_TRANSFER | Указывает, копируются ли метаданные из источника в выходной файл. |
MF_TRANSCODE_TOPOLOGYMODE | Указывает, могут ли аппаратные кодеки использоваться во время перекодирования. |
MFT_FIELDOFUSE_UNLOCK_Attribute | Разблокирует кодек с ограничениями на использование полей. Дополнительные сведения см. в разделе "Поле ограничений использования". |
Атрибут MF_TRANSCODE_CONTAINERTYPE является обязательным. Другие атрибуты контейнера являются необязательными.
Создание топологии транскода
Топология транскода — это частичная топология, содержащая источник мультимедиа, соответствующие кодеки и приемник мультимедиа. Чтобы создать топологию транскода, вызовите функцию MFCreateTranscodeTopology . Эта функция принимает следующие параметры в качестве входных данных:
- Указатель на интерфейс IMFMediaSource источника мультимедиа.
- Имя выходного файла.
- Указатель на интерфейс IMFTranscodeProfile профиля транскода.
Функция возвращает указатель на интерфейс IMFTopology .
Запуск сеанса кодирования
После создания топологии можно закодировать файл. Вы можете отменить профиль на этом этапе.
- Вызовите MFCreateMediaSession , чтобы создать сеанс мультимедиа.
- Вызовите IMFMediaSession::SetTopology, чтобы задать топологию в сеансе мультимедиа.
- Вызовите IMFMediaSession::Start, чтобы начать сеанс кодирования.
- Дождитесь события MESessionEnded .
- Позвоните IMFMediaSession::Close , чтобы закрыть сеанс сми.
- Дождитесь события MESessionClosed .
- Вызов IMFMediaSource::Shutdown.
- Вызов IMFMediaSession::Shutdown.
Большая часть времени, затраченного на кодирование, происходит между шагами 3 и 4.
Связанные темы