Поставщики метаданных оболочки
Начиная с Windows 7 Microsoft Media Foundation предоставляет метаданные через интерфейс IPropertyStore.
Метаданные, полученные с помощью процесса, определенного в этом разделе, должны использоваться только для доступа только для чтения. Запись данных с помощью этого процесса не поддерживается. Для записи можно создать объект IPropertyStore с помощью идентификатора класса (CLSID), полученного из PSLookupPropertyHandlerCLSID.
Чтение метаданных
Чтобы считывать метаданные из источника мультимедиа, выполните следующие действия.
- Получите указатель на интерфейс IMFMediaSource источника мультимедиа. Вы можете использовать интерфейс IMFSourceResolver для получения указателя IMFMediaSource.
- Вызовите MFGetService в источнике мультимедиа, чтобы получить указатель на интерфейс IPropertyStore. В параметре guidService MFGetServiceукажите значение 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;
}
Список ключей свойств метаданных см. в разделе Свойства метаданных для файлов мультимедиа.
Связанные разделы