Shell 中繼資料提供者
從 Windows 7 開始,Microsoft Media Foundation 會透過 IPropertyStore 介面公開中繼資料。
使用本主題中定義之程式取得的中繼資料應該只用于唯讀存取。 不支援使用此程式寫入資料。 您可以使用從PSLookupPropertyHandlerCLSID取得的類別識別碼 (CLSID) ,建立IPropertyStore物件以供撰寫之用。
讀取中繼資料
若要從媒體來源讀取中繼資料,請執行下列步驟:
- 取得媒體來源之 IMFMediaSource 介面的指標。 您可以使用 IMFSourceResolver 介面來取得 IMFMediaSource 指標。
- 在媒體來源上呼叫 MFGetService ,以取得 IPropertyStore 介面的指標。 在MFGetService的guidService參數中,指定值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;
}
如需中繼資料屬性索引鍵的清單,請參閱 媒體檔案的中繼資料屬性。
相關主題