Condividi tramite


Gestori di schemi e gestori di Byte-Stream

In questo argomento vengono descritti 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 IMFByteStream). A tale scopo, usa oggetti helper denominati gestori . Per gli URL, il resolver di origine usa i gestori dello schema . Per i flussi di byte, usa gestori del flusso di byte.

Un gestore di schemi 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 lo passerà a un gestore del flusso di byte, che crea l'origine multimediale. L'immagine seguente illustra questo processo.

diagramma che mostra il processo di risoluzione dell'origine

Gestori di schemi

I gestori dello schema vengono usati quando l'applicazione chiama IMFSourceResolver::CreateObjectFromURL o il relativo equivalente asincrono, BeginCreateObjectFromURL.

Il sistema di risoluzione di origine cerca i gestori dello schema nel Registro di sistema. I gestori dello schema sono elencati in base allo 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 che il gestore è progettato per l'analisi. Lo schema include il carattere finale ':'; ad esempio "http:".

Per registrare un nuovo gestore di schemi, 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 "My Scheme Handler". 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 IMFSchemeHandler. Se il resolver di origine trova un gestore di schemi che corrisponde allo schema URL, il resolver di origine chiama IMFSchemeHandler::BeginCreateObject, passando l'URL originale. Il gestore dello schema aprirà l'URL e tenterà di analizzare il contenuto. A questo 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 del flusso di byte appropriato, come descritto nella sezione successiva.

gestori Byte-Stream

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

Come per i gestori dello schema, i gestori del flusso di byte sono elencati nel Registro di sistema. Sono elencati in base all'estensione del 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 del flusso di byte, aggiungere una voce il cui nome è il 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 un tipo MIME.

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

resolver di origine