Provider di metadati della shell
A partire da Windows 7, Microsoft Media Foundation espone i metadati tramite l'interfaccia IPropertyStore .
I metadati ottenuti usando il processo definito in questo argomento devono essere usati solo per l'accesso in sola lettura. La scrittura di dati con questo processo non è supportata. È possibile creare un oggetto IPropertyStore a scopo di scrittura usando un identificatore di classe (CLSID) ottenuto da PSLookupPropertyHandlerCLSID.
Lettura dei metadati
Per leggere i metadati da un'origine multimediale, seguire questa procedura:
- Ottenere un puntatore all'interfaccia IMFMediaSource dell'origine multimediale. È possibile usare l'interfaccia IMFSourceResolver per ottenere un puntatore IMFMediaSource .
- Chiamare MFGetService nell'origine multimediale per ottenere un puntatore all'interfaccia IPropertyStore . Nel parametro guidService di MFGetService specificare il valore MF_PROPERTY_HANDLER_SERVICE. Se l'origine non supporta l'interfaccia IPropertyStore , MFGetService restituisce MF_E_UNSUPPORTED_SERVICE.
- Chiamare i metodi IPropertyStore per enumerare le proprietà dei metadati.
Il codice seguente illustra questi passaggi. Si supponga che DisplayProperty
sia una funzione che visualizza un valore 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;
}
Per un elenco delle chiavi delle proprietà dei metadati, vedere Proprietà dei metadati per file multimediali.
Argomenti correlati