Partilhar via


Manipuladores de esquema e manipuladores de Byte-Stream

Este tópico descreve os detalhes internos de como o resolvedor de origem cria uma fonte de mídia. Leia este tópico se você estiver implementando uma fonte de mídia personalizada para o Media Foundation e quiser que a fonte de mídia esteja disponível para aplicativos por meio do resolvedor de origem.

O resolvedor de origem pode criar uma fonte de mídia a partir de uma URL ou de um fluxo de bytes (ou seja, um ponteiro IMFByteStream ). Para fazer isso, ele usa objetos auxiliares chamados manipuladores. Para URLs, o resolvedor de origem usa manipuladores de esquema. Para fluxos de bytes, ele usa manipuladores de fluxo de bytes.

Um manipulador de esquema usa uma URL como entrada e cria uma fonte de mídia ou um fluxo de bytes. Se ele criar um fluxo de bytes, o resolvedor de origem passará isso para um manipulador de fluxo de bytes, que cria a fonte de mídia. A imagem a seguir ilustra esse processo.

diagrama mostrando o processo de resolução de origem

Manipuladores de esquema

Manipuladores de esquema são usados quando o aplicativo chama IMFSourceResolver::CreateObjectFromURL ou seu equivalente assíncrono, BeginCreateObjectFromURL.

O resolvedor de origem pesquisa manipuladores de esquema no registro. Os manipuladores de esquema são listados pelo esquema de URL, sob as seguintes chaves:

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

em <que esquema> é o esquema de URL que o manipulador foi projetado para analisar. O esquema inclui o caractere ':' à direita; por exemplo, "http:".

Para registrar um novo manipulador de esquema, adicione uma entrada cujo nome é CLSID do manipulador de esquema, no formato de cadeia de caracteres canônica: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. O valor da entrada é uma cadeia de caracteres (REG_SZ) que contém uma breve descrição do manipulador, como "Meu Manipulador de Esquema". A parte importante da entrada é o CLSID. O resolvedor de origem cria o manipulador chamando CoCreateInstance com esse CLSID.

Manipuladores de esquema expõem a interface IMFSchemeHandler . Se o resolvedor de origem encontrar um manipulador de esquema que corresponda ao esquema de URL, o resolvedor de origem chamará IMFSchemeHandler::BeginCreateObject, passando a URL original. O manipulador de esquema abrirá a URL e tentará analisar o conteúdo. Nesse ponto, o manipulador de esquema tem duas opções:

  • Crie uma fonte de mídia.
  • Criar um fluxo de bytes.

Se ele criar uma fonte de mídia, o resolvedor de origem retornará a fonte de mídia para o aplicativo. Se ele criar um fluxo de bytes, o resolvedor de origem tentará encontrar um manipulador de fluxo de bytes apropriado, conforme descrito na próxima seção.

Manipuladores de Byte-Stream

Manipuladores de fluxo de bytes são usados quando o aplicativo chama IMFSourceResolver::CreateObjectFromByteStream ou seu equivalente assíncrono, BeginCreateObjectFromByteStream. Eles também são usados quando um manipulador de esquema retorna um fluxo de bytes, conforme descrito anteriormente.

Assim como acontece com manipuladores de esquema, os manipuladores de fluxo de bytes são listados no registro. Eles são listados por extensão de nome de arquivo ou tipo MIME (ou ambos), sob as seguintes chaves:

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

em que <ExtensionOrMimeType> é a extensão de nome de arquivo ou tipo MIME. As extensões de arquivo incluem o caractere '.' inicial; por exemplo, ".wmv".

A extensão de nome de arquivo faz parte da URL, fornecida pelo aplicativo. O tipo MIME pode estar disponível por meio do atributo MF_BYTESTREAM_CONTENT_TYPE no fluxo de bytes.

Para registrar um novo manipulador de fluxo de bytes, adicione uma entrada cujo nome é CLSID do manipulador, no formato de cadeia de caracteres canônica. O valor da entrada é uma cadeia de caracteres (REG_SZ) que contém uma breve descrição do manipulador, como "Meu manipulador de Byte-Stream". O resolvedor de origem chama CoCreateInstance para criar o manipulador do CLSID. Você pode registrar o mesmo manipulador em mais de uma extensão ou tipo MIME.

Manipuladores de fluxo de bytes expõem a interface IMFByteStreamHandler . Se o resolvedor de origem encontrar um manipulador de fluxo de bytes correspondente, ele chamará IMFByteStreamHandler::BeginCreateObject. A entrada para esse método é um ponteiro para o fluxo de bytes, além da URL original, se disponível. O manipulador de fluxo de bytes lê do fluxo de bytes até analisar dados suficientes para criar a fonte de mídia.

Resolvedor de Origem