Shellmetadatenanbieter

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

Metadaten, die mithilfe des in diesem Thema definierten Prozesses erhalten werden, sollten nur für den schreibgeschützten Zugriff verwendet werden. Das Schreiben von Daten mit diesem Prozess wird nicht unterstützt. Sie können ein IPropertyStore-Objekt zu Schreibzwecken erstellen, indem Sie einen Klassenbezeichner (CLSID) verwenden, der aus PSLookupPropertyHandlerCLSID ermittelt wurde.

Lesen von Metadaten

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

  1. Sie erhalten einen Zeiger auf die BENUTZEROBERFLÄCHEMediaSource-Schnittstelle der Medienquelle. Sie können die BENUTZEROBERFLÄCHESourceResolver-Schnittstelle verwenden, um einen NSMEDIASource-Zeiger zu erhalten.
  2. Rufen Sie MFGetService für die Medienquelle auf, um einen Zeiger auf die IPropertyStore-Schnittstelle zu erhalten. Geben Sie im guidService-Parameter von MFGetService den Wert MF PROPERTY HANDLER SERVICE _ _ _ an. Wenn die Quelle die IPropertyStore-Schnittstelle nicht unterstützt, gibt MFGetService MF E _ _ UNSUPPORTED _ SERVICE zurück.
  3. Rufen Sie IPropertyStore-Methoden auf, um die Metadateneigenschaften aufzählen.

Der folgende Code zeigt diese Schritte. Angenommen, DisplayProperty es handelt sich um 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 Metadateneigenschaftsschlüssel finden Sie unter Metadateneigenschaften für Mediendateien.

Medienmetadaten