Настраиваемые поставщики метаданных для файлов мультимедиа
В этом разделе описывается написание пользовательского обработчика свойств оболочки для источника мультимедиа 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 , как описано в разделе Регистрация и распространение обработчиков свойств.
Связанные темы