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


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

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

Заметка

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

 

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

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

Кроме того, он может предоставить следующий интерфейс:

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

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

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

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

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

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

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

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

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

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

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