Поставщики метаданных оболочки
Начиная с Windows 7 Microsoft Media Foundation предоставляет метаданные через интерфейс IPropertyStore .
Метаданные, полученные с помощью процесса, определенного в этом разделе, следует использовать только для доступа только для чтения. Запись данных с помощью этого процесса не поддерживается. Вы можете создать объект IPropertyStore для записи с помощью идентификатора класса (CLSID), полученного из PSLookupPropertyHandlerCLSID.
Чтение метаданных
Чтобы прочитать метаданные из источника мультимедиа, выполните следующие действия.
- Получите указатель на интерфейс IMFMediaSource источника мультимедиа. Чтобы получить указатель IMFMediaSourceSource, можно использовать интерфейс IMFSourceResolver.
- Вызовите MFGetService в источнике мультимедиа, чтобы получить указатель на интерфейс IPropertyStore . В параметре guidServiceMFGetService укажите значение MF_PROPERTY_HANDLER_SERVICE. Если источник не поддерживает интерфейс IPropertyStore , MFGetService возвращает MF_E_UNSUPPORTED_SERVICE.
- Вызовите методы IPropertyStore для перечисления свойств метаданных.
Эти шаги показаны в следующем коде. Предположим, что DisplayProperty
является функцией, отображающей значение PROPVARIANT .
HRESULT EnumerateMetadata(IMFMediaSource *pSource)
{
IPropertyStore *pProps = NULL;
HRESULT hr = MFGetService(
pSource, MF_PROPERTY_HANDLER_SERVICE, IID_PPV_ARGS(&pProps));
if (FAILED(hr))
{
goto done;
}
DWORD cProps;
hr = pProps->GetCount(&cProps);
if (FAILED(hr))
{
goto done;
}
for (DWORD i = 0; i < cProps; i++)
{
PROPERTYKEY key;
hr = pProps->GetAt(i, &key);
if (FAILED(hr))
{
goto done;
}
PROPVARIANT pv;
hr = pProps->GetValue(key, &pv);
if (FAILED(hr))
{
goto done;
}
DisplayProperty(key, pv);
PropVariantClear(&pv);
}
done:
SafeRelease(&pProps);
return hr;
}
Список ключей свойств метаданных см. в разделе Свойства метаданных для файлов мультимедиа.
Связанные темы