Controladores de esquema y controladores de Byte-Stream

En este tema se describen los detalles internos de cómo el solucionador de origen crea un origen multimedia. Lea este tema si va a implementar un origen multimedia personalizado para Media Foundation y desea que el origen multimedia esté disponible para las aplicaciones a través de la resolución de origen.

El solucionador de origen puede crear un origen multimedia a partir de una dirección URL o de una secuencia de bytes (es decir, un puntero IMFByteStream ). Para ello, usa objetos auxiliares denominados controladores. En el caso de las direcciones URL, el solucionador de origen usa controladores de esquema. En el caso de las secuencias de bytes, usa controladores de secuencia de bytes.

Un controlador de esquema toma una dirección URL como entrada y crea un origen multimedia o una secuencia de bytes. Si crea una secuencia de bytes, el solucionador de origen lo pasará a un controlador de secuencia de bytes, que crea el origen multimedia. En la imagen siguiente se muestra este proceso.

diagrama que muestra el proceso de resolución de origen

Controladores de esquema

Los controladores de esquema se usan cuando la aplicación llama a IMFSourceResolver::CreateObjectFromURL o su equivalente asincrónico , BeginCreateObjectFromURL.

El solucionador de origen busca controladores de esquema en el Registro. Los controladores de esquema se enumeran por esquema de dirección URL, en las siguientes claves:

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

donde <scheme> es el esquema de dirección URL que el controlador está diseñado para analizar. El esquema incluye el carácter final ':'; por ejemplo, "http:".

Para registrar un nuevo controlador de esquema, agregue una entrada cuyo nombre sea clSID del controlador de esquema, en forma de cadena canónica: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. El valor de la entrada es una cadena (REG_SZ) que contiene una breve descripción del controlador, como "Mi controlador de esquema". La parte importante de la entrada es clSID. El solucionador de origen crea el controlador llamando a CoCreateInstance con este CLSID.

Los controladores de esquema exponen la interfaz IMFSchemeHandler . Si el solucionador de origen encuentra un controlador de esquema que coincide con el esquema de dirección URL, el solucionador de origen llama a IMFSchemeHandler::BeginCreateObject, pasando la dirección URL original. El controlador de esquema abrirá la dirección URL e intentará analizar el contenido. En ese momento, el controlador de esquemas tiene dos opciones:

  • Cree un origen multimedia.
  • Cree una secuencia de bytes.

Si crea un origen multimedia, el solucionador de origen devuelve el origen multimedia a la aplicación. Si crea una secuencia de bytes, el solucionador de origen intenta buscar un controlador de secuencia de bytes adecuado, como se describe en la sección siguiente.

controladores de Byte-Stream

Los controladores de secuencia de bytes se usan cuando la aplicación llama a IMFSourceResolver::CreateObjectFromByteStream o su equivalente asincrónico , BeginCreateObjectFromByteStream. También se usan cuando un controlador de esquema devuelve una secuencia de bytes, como se ha descrito anteriormente.

Al igual que con los controladores de esquema, los controladores de secuencia de bytes se enumeran en el Registro. Se muestran por extensión de nombre de archivo o tipo MIME (o ambos), en las siguientes claves:

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

donde <ExtensionOrMimeType> es la extensión de nombre de archivo o el tipo MIME. Las extensiones de archivo incluyen el carácter inicial '.'; por ejemplo, ".wmv".

La extensión de nombre de archivo forma parte de la dirección URL, proporcionada por la aplicación. El tipo MIME puede estar disponible a través del atributo MF_BYTESTREAM_CONTENT_TYPE en la secuencia de bytes.

Para registrar un nuevo controlador de secuencia de bytes, agregue una entrada cuyo nombre sea el CLSID del controlador, en forma de cadena canónica. El valor de la entrada es una cadena (REG_SZ) que contiene una breve descripción del controlador, como "My Byte-Stream Handler". El solucionador de origen llama a CoCreateInstance para crear el controlador a partir del CLSID. Puede registrar el mismo controlador en más de una extensión o tipo MIME.

Los controladores de secuencias de bytes exponen la interfaz IMFByteStreamHandler . Si el solucionador de origen encuentra un controlador de secuencia de bytes coincidente, llama a IMFByteStreamHandler::BeginCreateObject. La entrada de este método es un puntero a la secuencia de bytes, además de la dirección URL original, si está disponible. El controlador de secuencia de bytes lee desde la secuencia de bytes hasta que analiza suficientes datos para crear el origen multimedia.

Solucionador de origen