Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описано, как использовать API транскодирования для кодирования файла мультимедиа.
- Обзор
- создание источника мультимедиа
- создание профиля транскодирования
- Создание топологии транскода
- запуск сеанса кодирования
- Связанные темы
Обзор
Перед использованием API транскодирования приложение должно иметь следующие фрагменты информации:
- Путь или URL-адрес существующего файла мультимедиа, который будет перекодирован.
- Имя выходного файла.
- Тип контейнера для выходного файла, например MP4 или Расширенный формат потоковой передачи (ASF).
- Формат кодирования. Эти сведения включают типы носителей, описывающие закодированные аудиопотоки и видеопотоки.
Чтобы использовать API транскодирования, приложение выполняет следующие действия.
- Создайте источник мультимедиа для чтения исходного файла.
- Создайте профиль транскодирования. Добавьте атрибуты, описывающие аудиопоток, видеопоток и контейнер файлов.
- Используйте профиль транскода для создания топологии кодирования. (Дополнительные сведения о топологиях см. в разделе о топологиях.)
- Установите топологию на мультимедийном сеансе .
- Запустите сеанс мультимедиа и дождитесь события MESessionEnded.
Остальная часть этого раздела подробно описывает эти действия.
Создание источника мультимедиа
Источник мультимедиа — это объект, который считывает и анализирует исходный файл. Чтобы создать источник мультимедиа, используйте разрешение источников. Пример кода можно найти в разделе с помощьюсопоставителя источника.
Создание профиля Транскода
Профиль транскода задаёт формат и параметры, используемые для кодирования выходного файла. Профиль транскода содержит три набора атрибутов:
- Атрибуты звука: описание целевого формата звука и параметров кодировщика звука.
- Атрибуты видео: описание целевого формата видео и параметров кодировщика видео.
- Атрибуты контейнера: определите тип контейнера файлов, а также некоторые глобальные параметры кодирования.
Чтобы создать профиль транскода, вызовите функцию MFCreateTranscodeProfile. Эта функция возвращает указатель на интерфейс IMFTranscodeProfile. Исходный объект профиля пуст; Он не содержит атрибутов. Далее необходимо добавить атрибуты, определяющие профиль.
Атрибуты звука
Чтобы добавить атрибуты для звукового потока, вызовите IMFTranscodeProfile::SetAudioAttributes. Эти атрибуты указывают, как кодируется звуковой поток. Если выходной файл не будет содержать аудиопоток, опустите эти атрибуты.
Атрибуты звука делятся на две категории:
- Атрибуты, определяющие формат закодированного потока
- Атрибуты, указывающие другие параметры кодирования.
Атрибуты формата — это просто атрибуты типа мультимедиа, как описано в разделе Типы аудиофайла. Точный набор атрибутов формата зависит от кодировщика. (См. поддерживаемые форматы мультимедиа в Media Foundation.) Ниже приведен список типичных атрибутов формата звука:
Атрибут форматирования | Описание |
---|---|
MF_MT_SUBTYPE | Подтип. См. идентификаторы графического интерфейса аудио. |
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. Эти атрибуты указывают, как кодируется видеопоток. Если выходной файл не будет содержать видеопоток, опустите эти атрибуты.
Как и в случае с атрибутами звука, атрибуты видео делятся на две категории:
- Атрибуты, определяющие формат закодированного потока
- Атрибуты, указывающие другие параметры кодирования.
Атрибуты формата — это атрибуты типа мультимедиа, как описано в разделе Типы мультимедиа видео. Ниже приведен список типичных атрибутов формата видео:
Атрибут форматирования | Описание |
---|---|
MF_MT_SUBTYPE | Подтип. См. идентификаторы GUIDs подтипов видео. |
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. Определены следующие атрибуты.
Атрибут | Описание |
---|---|
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.
Связанные разделы