閱讀英文

共用方式為


Shell 元數據提供者

從 Windows 7 開始,Microsoft Media Foundation 會透過 IPropertyStore 介面公開元數據。

使用本主題中所定義之進程取得的元數據,只能用於唯讀存取。 不支援使用此程式寫入數據。 您可以使用從 PSLookupPropertyHandlerCLSID取得的類別標識碼 (CLSID) 來建立 IPropertyStore 物件。

讀取元數據

若要從媒體來源讀取元數據,請執行下列步驟:

  1. 取得媒體來源 IMFMediaSource 介面的指標。 您可以使用 IMFSourceResolver 介面來取得 IMFMediaSource 指標。
  2. 在媒體來源上呼叫 MFGetService,以取得 IPropertyStore 介面的指標。 在 MFGetServiceguidService 參數中,指定值 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;
}

如需元資料屬性索引鍵的清單,請參閱 媒體檔案的元資料屬性

媒體元數據