Gestionnaires de schémas et gestionnaires de Byte-Stream

Cette rubrique décrit les détails internes de la façon dont le programme de résolution source crée une source multimédia. Lisez cette rubrique si vous implémentez une source multimédia personnalisée pour Media Foundation et que vous souhaitez que la source multimédia soit disponible pour les applications via le programme de résolution source.

Le programme de résolution source peut créer une source multimédia à partir d’une URL ou d’un flux d’octets (c’est-à-dire, un pointeur IMFByteStream ). Pour ce faire, il utilise des objets d’assistance appelés gestionnaires. Pour les URL, le programme de résolution source utilise des gestionnaires de schéma. Pour les flux d’octets, il utilise des gestionnaires de flux d’octets.

Un gestionnaire de schéma prend une URL comme entrée et crée une source multimédia ou un flux d’octets. S’il crée un flux d’octets, le programme de résolution source le transmet à un gestionnaire de flux d’octets, qui crée la source multimédia. L’image suivante illustre ce processus.

diagramme montrant le processus de résolution source

Gestionnaires de schémas

Les gestionnaires de schéma sont utilisés lorsque l’application appelle IMFSourceResolver::CreateObjectFromURL ou son équivalent asynchrone, BeginCreateObjectFromURL.

Le programme de résolution source recherche les gestionnaires de schémas dans le Registre. Les gestionnaires de schéma sont répertoriés par schéma d’URL, sous les clés suivantes :

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            SchemeHandlers
               <scheme>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

<schéma> est le schéma d’URL que le gestionnaire est conçu pour analyser. Le schéma inclut le caractère de fin « : » ; par exemple, « http: ».

Pour inscrire un nouveau gestionnaire de schémas, ajoutez une entrée dont le nom est le CLSID du gestionnaire de schéma, sous forme de chaîne canonique : {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. La valeur de l’entrée est une chaîne (REG_SZ) contenant une brève description du gestionnaire, telle que « Mon gestionnaire de schéma ». La partie importante de l’entrée est le CLSID. Le programme de résolution source crée le gestionnaire en appelant CoCreateInstance avec ce CLSID.

Les gestionnaires de schéma exposent l’interface IMFSchemeHandler . Si le programme de résolution source trouve un gestionnaire de schéma qui correspond au schéma d’URL, le programme de résolution source appelle IMFSchemeHandler::BeginCreateObject, en passant l’URL d’origine. Le gestionnaire de schéma ouvre l’URL et tente d’analyser le contenu. À ce stade, le gestionnaire de schéma dispose de deux options :

  • Créez une source multimédia.
  • Créez un flux d’octets.

S’il crée une source multimédia, le programme de résolution source retourne la source multimédia à l’application. S’il crée un flux d’octets, le programme de résolution source tente de trouver un gestionnaire de flux d’octets approprié, comme décrit dans la section suivante.

gestionnaires de Byte-Stream

Les gestionnaires byte-stream sont utilisés lorsque l’application appelle IMFSourceResolver::CreateObjectFromByteStream ou son équivalent asynchrone, BeginCreateObjectFromByteStream. Ils sont également utilisés lorsqu’un gestionnaire de schéma retourne un flux d’octets, comme décrit précédemment.

Comme pour les gestionnaires de schémas, les gestionnaires de flux d’octets sont répertoriés dans le Registre. Ils sont répertoriés par extension de nom de fichier ou par type MIME (ou les deux), sous les clés suivantes :

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows Media Foundation
            ByteStreamHandlers
               <ExtensionOrMimeType>
                  {00000000-0000-0000-0000-000000000000} = REG_SZ

<ExtensionOrMimeType> est l’extension de nom de fichier ou le type MIME. Les extensions de fichier incluent le caractère initial « . » ; par exemple, .wmv ».

L’extension de nom de fichier fait partie de l’URL fournie par l’application. Le type MIME peut être disponible via l’attribut MF_BYTESTREAM_CONTENT_TYPE sur le flux d’octets.

Pour inscrire un nouveau gestionnaire de flux d’octets, ajoutez une entrée dont le nom est le CLSID du gestionnaire, sous forme de chaîne canonique. La valeur de l’entrée est une chaîne (REG_SZ) contenant une brève description du gestionnaire, telle que « Mon gestionnaire Byte-Stream ». Le programme de résolution source appelle CoCreateInstance pour créer le gestionnaire à partir du CLSID. Vous pouvez inscrire le même gestionnaire sous plusieurs extensions ou types MIME.

Les gestionnaires byte-stream exposent l’interface IMFByteStreamHandler . Si le programme de résolution source trouve un gestionnaire de flux d’octets correspondant, il appelle IMFByteStreamHandler::BeginCreateObject. L’entrée de cette méthode est un pointeur vers le flux d’octets, plus l’URL d’origine, si disponible. Le gestionnaire de flux d’octets lit à partir du flux d’octets jusqu’à ce qu’il analyse suffisamment de données pour créer la source multimédia.

Programme de résolution source