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


Создание приемника файлов ASF

Приемник файлов ASF — это реализация IMFMediaSink , предоставляемая Media Foundation, которую приложение может использовать для архивации данных мультимедиа ASF в файл. Сведения об объектной модели приемников мультимедиа ASF и общем использовании см. в разделе Приемники мультимедиа ASF.

Существует два способа создания экземпляра приемника файлов ASF. Вы можете вызвать MFCreateASFMediaSink или MFCreateASFMediaSinkActivate.

При вызове MFCreateASFMediaSink необходимо указать поток байтов для выходного файла, в который приемник будет записывать содержимое ASF во время сеанса кодирования. Указанный поток байтов должен иметь возможности поиска и записи, в противном случае вызов MFCreateASFMediaSink завершается сбоем с кодом ошибки E_FAIL. Этот вызов создает внутрипроцессный объект приемника файла и возвращает указатель на интерфейс IMFMediaSink приемника файлов.

При вызове MFCreateASFMediaSinkActivate необходимо указать URL-адрес выходного файла, в который приемник файла будет записывать данные мультимедиа. В этом случае приемник файла внутренне создает поток байтов. Функция возвращает указатель на интерфейс IMFActivate приемника файлов. Кому

Рассмотрим MFCreateASFMediaSinkActivate вместо MFCreateASFMediaSink, если топология кодирования разработана следующим образом:

  • Топология кодирования используется для защищенного пути к мультимедиа (PMP), а приемник файлов используется вне процесса.

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

    Примечание

    Вы можете активировать приемник файлов, вызвав IMFActivate::ActivateObject. Однако активировать объект не нужно. Сеанс мультимедиа отслеживает объект активации и автоматически активирует приемник файла во время сеанса кодирования.

     

  • Сведения о потоке настраиваются в объекте ContentInfo. Дискуцируется в следующем подразделе.

После создания приемника файлов ASF его необходимо настроить перед построением топологии. Чтобы создать выходной файл, приемник файла должен знать следующие сведения.

  • Основные сведения о потоке
  • Сведения о режиме кодирования
  • Метаданные

Приемник файлов реализует объект ContentInfo ASF и предоставляет интерфейс IMFASFContentInfo , чтобы приложение пользовалось им для задания сведений, связанных с потоками и кодировкой. В зависимости от функции, вызванной для создания приемника файлов, существует два способа получения ссылки на интерфейс IMFASFContentInfo .

  • При вызове функции MFCreateASFMediaSink приложение должно запросить интерфейс IMFASFContentInfo , вызвав IMFMediaSink::QueryInterface в возвращенном приемнике файла.
  • Если вы решили вызвать MFCreateASFMediaSinkActivate, эта функция ожидает, что перед вызовом у вас будет полностью настроенный объект ContentInfo. Для этого необходимо создать пустой объект ContentInfo, вызвав MFCreateASFContentInfo , а затем настроить его со всеми необходимыми сведениями. Передайте настроенный объект ContentInfo в MFCreateASFMediaSinkActivate , чтобы получить указатель на объект активации приемника. Вы не можете активировать приемник файлов с помощью возвращенного объекта активации, а затем изменить поток или сведения о кодировке.

Сведения о настройке потоков приемников и конкретных свойств см. в следующих разделах:

Приемники мультимедиа ASF

Компоненты ASF уровня конвейера

Поддержка ASF в Media Foundation