Freigeben über


Shell-Metadatenanbieter

Ab Windows 7 macht Microsoft Media Foundation Metadaten über die IPropertyStore- Schnittstelle verfügbar.

Metadaten, die mithilfe des in diesem Thema definierten Prozesses abgerufen wurden, sollten nur für schreibgeschützten Zugriff verwendet werden. Das Schreiben von Daten mithilfe dieses Prozesses wird nicht unterstützt. Sie können ein IPropertyStore--Objekt für Schreibzwecke mithilfe eines Klassenbezeichners (CLSID) erstellen, der von PSLookupPropertyHandlerCLSIDabgerufen wird.

Lesen von Metadaten

Führen Sie die folgenden Schritte aus, um Metadaten aus einer Medienquelle zu lesen:

  1. Rufen Sie einen Zeiger auf die IMFMediaSource Schnittstelle der Medienquelle ab. Sie können die IMFSourceResolver Schnittstelle verwenden, um einen IMFMediaSource Zeiger abzurufen.
  2. Rufen Sie MFGetService- auf der Medienquelle auf, um einen Zeiger auf die IPropertyStore--Schnittstelle abzurufen. Geben Sie im guidService Parameter von MFGetServiceden Wert MF_PROPERTY_HANDLER_SERVICEan. Wenn die Quelle die IPropertyStore- Schnittstelle nicht unterstützt, gibt MFGetService-MF_E_UNSUPPORTED_SERVICEzurück.
  3. Rufen Sie IPropertyStore- Methoden auf, um die Metadateneigenschaften auflisten zu können.

Der folgende Code zeigt diese Schritte. Angenommen, DisplayProperty ist eine Funktion, die einen PROPVARIANT Wert anzeigt.

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;
}

Eine Liste der Metadateneigenschaftenschlüssel finden Sie unter Metadateneigenschaften für Mediendateien.

Medienmetadaten