Настраиваемые поставщики метаданных для файлов мультимедиа

В этом разделе описывается написание пользовательского обработчика свойств оболочки для источника мультимедиа Microsoft Media Foundation.

Примечание

Общие сведения о поставщиках метаданных в Media Foundation см. в разделе Метаданные мультимедиа. В этом разделе рассматриваются обработчики свойств оболочки; Он не описывает интерфейс метаданных версии 1 , IMFMetadata.

 

Метаданные тесно связаны с форматом файла. В Media Foundation форматы файлов представлены источниками мультимедиа. Если требуется поддержка метаданных для формата, который изначально не поддерживается в Media Foundation, необходимо реализовать пользовательский источник мультимедиа с обработчиком свойств. Обработчик свойств позволяет системе свойств оболочки эффективно считывать и записывать метаданные.

Обработчик свойств — это COM-объект, реализующий следующие интерфейсы:

При необходимости он также может предоставлять следующий интерфейс:

Если системе свойств оболочки необходимо получить метаданные для файла, она вызывает CoCreateInstance для создания обработчика свойств, а затем вызывает соответствующие методы чтения и записи в интерфейсе IPropertyStore .

Конвейер Media Foundation использует немного другой механизм, так как конвейер получает обработчик свойств непосредственно из источника мультимедиа. Вместо вызова CoCreateInstance для создания обработчика свойств конвейер вызывает IMFGetService::GetService в источнике мультимедиа, как описано в разделе Поставщики метаданных оболочки.

Чтобы создать пользовательский обработчик свойств, сделайте следующее:

  • Реализуйте интерфейс IMFGetService для предоставления доступа к IPropertyStore. Идентификатор GUID службы MF_PROPERTY_HANDLER_SERVICE.
  • Если источник мультимедиа будет использоваться удаленно, он также должен предоставлять интерфейс IPropertyStore с помощью метода QueryInterface источника мультимедиа в дополнение к IMFGetService.
  • Чтобы сделать обработчик свойств доступным для системы свойств оболочки, зарегистрируйте библиотеку DLL для обработчика свойств, как описано в разделе Регистрация и распространение обработчиков свойств.
  • Источник мультимедиа регистрируется отдельно, как описано в разделе Обработчики схем и обработчики Byte-Stream.

Советы по реализации

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

Обработчики свойств должны быть быстрыми; они должны предоставлять эффективный доступ на чтение и запись к метаданным. (Учтите, что оболочка может извлекать метаданные из сотен файлов.) Поэтому не вызывайте MFStartup из обработчика свойств. Функция MFStartup обеспечивает задержку при запуске, так как она создает несколько потоков рабочей очереди и выделяет глобальную память.

В типичной реализации обработчик свойств и источник мультимедиа будут совместно использовать один и тот же код синтаксического анализа. Однако источник мультимедиа использует асинхронные вызовы IMFByteStream для ввода-вывода, а обработчик свойств использует интерфейс IStream . Media Foundation предоставляет вспомогательный объект, который создает оболочку для потока на основе IStream и предоставляет его в виде потока IMFByteStream . Чтобы создать оболочку, вызовите MFCreateMFByteStreamOnStream.

При обновлении метаданных рекомендуется записывать данные непосредственно в исходный поток. Эта рекомендация отличается от поведения копирования при записи большинства обработчиков свойств, в которых изменяется копия данных. Файлы мультимедиа могут быть очень большими, поэтому копирование при записи обычно слишком медленно для эффективной реализации. Чтобы отключить копирование при записи, задайте параметр реестра ManualSafeSave , как описано в разделе Регистрация и распространение обработчиков свойств.

Метаданные мультимедиа

Источники мультимедиа

Создание пользовательского источника мультимедиа