Provider di metadati personalizzati per file multimediali
Questo argomento descrive come scrivere un gestore di proprietà Shell personalizzato per un'origine multimediale di Microsoft Media Foundation.
Nota
Per informazioni in background sui provider di metadati in Media Foundation, vedere Metadati multimediali. Questo argomento illustra i gestori delle proprietà shell; non descrive l'interfaccia dei metadati della versione 1, FMMetadata.
I metadati sono strettamente collegati al formato del file. In Media Foundation i formati di file sono rappresentati da origini multimediali. Se si desidera supportare i metadati per un formato non supportato in modo nativo in Media Foundation, è necessario implementare un'origine multimediale personalizzata con un gestore delle proprietà. Il gestore delle proprietà consente al sistema delle proprietà Shell di leggere e scrivere metadati in modo efficiente.
Un gestore delle proprietà è un oggetto COM che implementa le interfacce seguenti:
Facoltativamente, può anche esporre l'interfaccia seguente:
Se il sistema di proprietà Shell deve ottenere metadati per un file, chiama CoCreateInstance per creare il gestore delle proprietà e quindi chiama i metodi di lettura e scrittura appropriati nell'interfaccia IPropertyStore .
La pipeline di Media Foundation usa un meccanismo leggermente diverso, perché la pipeline ottiene il gestore delle proprietà direttamente dall'origine multimediale. Anziché chiamare CoCreateInstance per creare il gestore delle proprietà, la pipeline chiama IMFGetService::GetService nell'origine multimediale, come descritto nell'argomento Provider di metadati della shell.
Per creare un gestore di proprietà personalizzato, eseguire le operazioni seguenti:
- Implementare l'interfaccia IMFGetService per esporre IPropertyStore. Il GUID del servizio è MF_PROPERTY_HANDLER_SERVICE.
- Se l'origine multimediale verrà usata in remoto, deve anche esporre l'interfaccia IPropertyStore tramite il metodo QueryInterface dell'origine multimediale, oltre a IMFGetService.
- Per rendere disponibile il gestore delle proprietà per il sistema delle proprietà Shell, registrare la DLL per il gestore delle proprietà, come descritto in Registrazione e distribuzione dei gestori delle proprietà.
- L'origine multimediale viene registrata separatamente, come descritto in Gestori schemi e gestori di Byte-Stream.
Suggerimenti per l'implementazione
Per un elenco delle chiavi delle proprietà dei metadati, vedere Proprietà dei metadati per file multimediali.
I gestori delle proprietà devono essere veloci; devono fornire un accesso efficiente in lettura e scrittura ai metadati. Si consideri che shell può recuperare i metadati da centinaia di file. Pertanto, non chiamare MFStartup dal gestore delle proprietà. La funzione MFStartup introduce la latenza di avvio, perché crea più thread di coda di lavoro e alloca memoria globale.
In un'implementazione tipica, il gestore delle proprietà e l'origine multimediale condivideranno alcuni degli stessi codici di analisi. Tuttavia, un'origine multimediale usa chiamate FMByteStream asincrone per I/O, mentre il gestore delle proprietà usa l'interfaccia IStream . Media Foundation fornisce un oggetto helper che esegue il wrapping di un flusso basato su IStream e lo espone come flusso FMByteStream . Per creare il wrapper, chiamare MFCreateMFByteStreamOnStream.
Quando si aggiornano i metadati, è consigliabile scrivere i dati direttamente nel flusso originale. Questa raccomandazione differisce dal comportamento di copia in scrittura della maggior parte dei gestori delle proprietà, in cui viene modificata una copia dei dati. I file multimediali possono essere molto grandi, quindi la copia in scrittura è in genere troppo lenta per un'implementazione efficiente. Per disabilitare la scrittura di copia, impostare l'impostazione del Registro di sistema ManualSafeSave , come descritto in Registrazione e distribuzione dei gestori delle proprietà.
Argomenti correlati