Поставщики метаданных оболочки

Начиная с Windows 7 Microsoft Media Foundation предоставляет метаданные через интерфейс IPropertyStore .

Метаданные, полученные с помощью процесса, определенного в этом разделе, следует использовать только для доступа только для чтения. Запись данных с помощью этого процесса не поддерживается. Вы можете создать объект IPropertyStore для записи с помощью идентификатора класса (CLSID), полученного из PSLookupPropertyHandlerCLSID.

Чтение метаданных

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

  1. Получите указатель на интерфейс IMFMediaSource источника мультимедиа. Чтобы получить указатель IMFMediaSourceSource, можно использовать интерфейс IMFSourceResolver.
  2. Вызовите MFGetService в источнике мультимедиа, чтобы получить указатель на интерфейс IPropertyStore . В параметре guidServiceMFGetService укажите значение MF_PROPERTY_HANDLER_SERVICE. Если источник не поддерживает интерфейс IPropertyStore , MFGetService возвращает MF_E_UNSUPPORTED_SERVICE.
  3. Вызовите методы 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;
}

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

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