Gestori schemi e gestori di Byte-Stream

Questo argomento descrive i dettagli interni relativi al modo in cui il resolver di origine crea un'origine multimediale. Leggere questo argomento se si implementa un'origine multimediale personalizzata per Media Foundation e si vuole che l'origine multimediale sia disponibile per le applicazioni tramite il resolver di origine.

Il resolver di origine può creare un'origine multimediale da un URL o da un flusso di byte, ovvero un puntatore FMByteStream . A tale scopo, usa oggetti helper denominati gestori. Per gli URL, il resolver di origine usa gestori di schemi. Per i flussi di byte, usa gestori di byte-stream.

Un gestore dello schema accetta un URL come input e crea un'origine multimediale o un flusso di byte. Se crea un flusso di byte, il resolver di origine passerà tale flusso a un gestore di flusso byte, che crea l'origine multimediale. L'immagine seguente illustra questo processo.

diagramma che mostra il processo di risoluzione dell'origine

Gestori schemi

I gestori di schemi vengono usati quando l'applicazione chiama FMSourceResolver::CreateObjectFromURL o il relativo equivalente asincrono BeginCreateObjectFromURL.

Il resolver di origine cerca gestori schemi nel Registro di sistema. I gestori di schemi sono elencati dallo schema URL, sotto le chiavi seguenti:

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

dove <schema è lo schema> URL progettato per l'analisi del gestore. Lo schema include il carattere ':' finale; ad esempio "http:".

Per registrare un nuovo gestore dello schema, aggiungere una voce il cui nome è CLSID del gestore dello schema, in formato stringa canonico: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Il valore della voce è una stringa (REG_SZ) contenente una breve descrizione del gestore, ad esempio "Gestore schemi personali". La parte importante della voce è CLSID. Il resolver di origine crea il gestore chiamando CoCreateInstance con questo CLSID.

I gestori di schemi espongono l'interfaccia FMSchemeHandler . Se il resolver di origine trova un gestore di schemi corrispondente allo schema URL, il resolver di origine chiama FMSchemeHandler::BeginCreateObject, passando l'URL originale. Il gestore dello schema aprirà l'URL e tenterà di analizzare il contenuto. A quel punto, il gestore dello schema ha due opzioni:

  • Creare un'origine multimediale.
  • Creare un flusso di byte.

Se crea un'origine multimediale, il resolver di origine restituisce l'origine multimediale all'applicazione. Se crea un flusso di byte, il resolver di origine tenta di trovare un gestore di byte-stream appropriato, come descritto nella sezione successiva.

gestori Byte-Stream

I gestori di byte-stream vengono usati quando l'applicazione chiama FMSourceResolver::CreateObjectFromByteStream o il relativo equivalente asincrono BeginCreateObjectFromByteStream. Vengono usati anche quando un gestore dello schema restituisce un flusso di byte, come descritto in precedenza.

Come per i gestori dello schema, i gestori di byte-stream sono elencati nel Registro di sistema. Sono elencati in base all'estensione del nome file o al tipo MIME (o entrambi), nelle chiavi seguenti:

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

dove <ExtensionOrMimeType> è l'estensione del nome file o il tipo MIME. Le estensioni di file includono il carattere '.' iniziale; ad esempio, ".wmv".

L'estensione del nome file fa parte dell'URL, fornita dall'applicazione. Il tipo MIME potrebbe essere disponibile tramite l'attributo MF_BYTESTREAM_CONTENT_TYPE nel flusso di byte.

Per registrare un nuovo gestore di flusso byte, aggiungere una voce il cui nome è CLSID del gestore, in formato stringa canonico. Il valore della voce è una stringa (REG_SZ) contenente una breve descrizione del gestore, ad esempio "My Byte-Stream Handler". Il resolver di origine chiama CoCreateInstance per creare il gestore da CLSID. È possibile registrare lo stesso gestore in più di un'estensione o di un tipo MIME.

I gestori di flusso byte espongono l'interfaccia IMFByteStreamHandler . Se il resolver di origine trova un gestore di byte-stream corrispondente, chiama FMByteStreamHandler::BeginCreateObject. L'input di questo metodo è un puntatore al flusso di byte, oltre all'URL originale, se disponibile. Il gestore di flusso byte legge dal flusso di byte fino a quando non analizza dati sufficienti per creare l'origine multimediale.

Resolver di origine