Proveedores de metadatos de Shell
A partir de Windows 7, Microsoft Media Foundation expone metadatos a través de la interfaz IPropertyStore .
Los metadatos obtenidos mediante el proceso definido en este tema solo deben usarse para el acceso de solo lectura. No se admite la escritura de datos mediante este proceso. Puede crear un objeto IPropertyStore con fines de escritura mediante un identificador de clase (CLSID) obtenido de PSLookupPropertyHandlerCLSID.
Lectura de metadatos
Para leer metadatos de un origen multimedia, realice los pasos siguientes:
- Obtenga un puntero a la interfaz IMFMediaSource del origen multimedia. Puede usar la interfaz IMFSourceResolver para obtener un puntero IMFMediaSource .
- Llame a MFGetService en el origen multimedia para obtener un puntero a la interfaz IPropertyStore . En el parámetro guidService de MFGetService, especifique el valor MF_PROPERTY_HANDLER_SERVICE. Si el origen no admite la interfaz IPropertyStore , MFGetService devuelve MF_E_UNSUPPORTED_SERVICE.
- Llame a los métodos IPropertyStore para enumerar las propiedades de metadatos.
En el código siguiente se muestran estos pasos. Supongamos que DisplayProperty
es una función que muestra un valor 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;
}
Para obtener una lista de las claves de propiedad de metadatos, vea Propiedades de metadatos para archivos multimedia.
Temas relacionados