Использование модуля записи приемника

Общие сведения

Типы контейнеров файлов

Модуль записи приемника имеет встроенную поддержку нескольких типов контейнеров файлов. Полный список см. в разделе MF_TRANSCODE_CONTAINERTYPE. Вы можете поддерживать дополнительные типы контейнеров, написав пользовательский приемник мультимедиа. Контейнер файлов указывается при создании нового экземпляра модуля записи приемника.

Форматы потоков

Для каждого потока приложение должно указать следующее.

  • Формат входных данных — это формат, который приложение отправляет в модуль записи приемника.
  • Формат выходных данных — это формат, который будет записан в файл.

Форматы входных и выходных данных могут быть сжаты или несжаты. Модуль записи приемника поддерживает следующие сочетания:

  • Несжатые входные данные со сжатыми выходными данными. Это типичный случай, который используется для сценариев кодирования или перекодирования. Должен быть доступен кодировщик Microsoft Media Foundation, который принимает входной тип и кодирует тип вывода.
  • Сжатые входные данные с идентичными выходными данными. Используйте это сочетание для реминга файла без перекодирования.
  • Несжатые входные данные с идентичными выходными данными. Используйте это сочетание для записи несжатого звука или видео в контейнер файлов.

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

Создание модуля записи приемника

Существует две функции, которые создают модуль записи приемника:

  • MFCreateSinkWriterFromURL принимает URL-адрес выходного файла или указатель на поток байтов. Эта функция создает приемник мультимедиа внутри системы.
  • MFCreateSinkWriterFromMediaSink принимает указатель на приемник мультимедиа, который уже был создан приложением.

Если вы используете один из встроенных приемников мультимедиа, предпочтительнее использовать функцию MFCreateSinkWriterFromURL , так как вызывающей стороны не нужно настраивать приемник мультимедиа.

Метод MFCreateSinkWriterFromURL предоставляет несколько вариантов для указания типа контейнера файлов. В простейшем случае функция использует расширение имени файла в URL-адресе для выбора контейнера файлов. Дополнительные сведения см. на странице справочника по функциям.

Например, следующий код указывает имя файла output.wmv для URL-адреса. В зависимости от расширения имени файла модуль записи приемника загрузит приемник мультимедиа ASF для создания файла ASF в формате Advanced Systems Format (ASF).

    HRESULT hr = MFCreateSinkWriterFromURL(L"output.wmv", NULL, NULL, &pSinkWriter);

В случае MFCreateSinkWriterFromMediaSink тип файла определяется приемником мультимедиа.

Модуль записи приемника