Dela via


Anpassade metadataprovidrar för mediafiler

Det här avsnittet beskriver hur du skriver en anpassad Shell-egenskapshanterare för en Microsoft Media Foundation-mediekälla.

Not

Bakgrundsinformation om metadataprovidrar i Media Foundation finns i Media Metadata. I det här avsnittet beskrivs Shell-egenskapshanterare. det beskriver inte metadatagränssnittet version 1 IMFMetadata.

 

Metadata är nära knutna till filens format. I Media Foundation representeras filformat av mediekällor. Om du vill stödja metadata för ett format som inte stöds internt i Media Foundation måste du implementera en anpassad mediekälla med en egenskapshanterare. Egenskapshanteraren gör det möjligt för Shell-egenskapssystemet att läsa och skriva metadata effektivt.

En egenskapshanterare är ett COM-objekt som implementerar följande gränssnitt:

Du kan också exponera följande gränssnitt:

Om Shell-egenskapssystemet behöver hämta metadata för en fil anropas CoCreateInstance- för att skapa egenskapshanteraren och anropar sedan lämpliga läs- och skrivmetoder i IPropertyStore--gränssnittet.

Media Foundation-pipelinen använder en något annorlunda mekanism eftersom pipelinen hämtar egenskapshanteraren direkt från mediekällan. I stället för att anropa CoCreateInstance för att skapa egenskapshanteraren anropar pipelinen IMFGetService::GetService på mediekällan enligt beskrivningen i avsnittet Shell Metadata Providers.

Gör följande för att skapa en anpassad egenskapshanterare:

Implementeringstips

En lista över metadataegenskapsnycklar finns i Metadataegenskaper för Media Files.

Egenskapshanterare måste vara snabba. de måste ge effektiv läs- och skrivåtkomst till metadata. (Tänk på att Gränssnittet kan hämta metadata från hundratals filer.) Anropa därför inte MFStartup- från egenskapshanteraren. Funktionen MFStartup introducerar startsvarstid eftersom den skapar flera arbetskötrådar och allokerar globalt minne.

I en typisk implementering delar egenskapshanteraren och mediekällan en del av samma parsningskod. En mediekälla använder dock asynkrona IMFByteStream- anrop för I/O, medan egenskapshanteraren använder gränssnittet IStream. Media Foundation tillhandahåller ett hjälpobjekt som omsluter en IStream--baserad ström och exponerar den som en IMFByteStream- ström. Om du vill skapa omslutningen anropar du MFCreateMFByteStreamOnStream.

När du uppdaterar metadata rekommenderar vi att du skriver data direkt till den ursprungliga dataströmmen. Den här rekommendationen skiljer sig från det beteendet för de flesta egenskapshanterare, där en kopia av data ändras. Mediefiler kan vara mycket stora, så kopiering vid skrivning är vanligtvis för långsamt för en effektiv implementering. Om du vill inaktivera kopiering vid skrivning anger du registerinställningen ManualSafeSave enligt beskrivningen i Registrera och distribuera egenskapshanterare.

mediametadata

mediekällor

Skriva en anpassad mediekälla