Schemahandler und Byte-Stream Handler
In diesem Thema werden die internen Details zur Erstellung einer Medienquelle durch den Quellre resolver beschrieben. Lesen Sie dieses Thema, wenn Sie eine benutzerdefinierte Medienquelle für Media Foundation implementieren und möchten, dass die Medienquelle für Anwendungen über den Quell resolver verfügbar ist.
Der Quelllöser kann eine Medienquelle aus einer URL oder aus einem Bytestream (d. b. einem POINTERByteStream-Zeiger) erstellen. Dazu werden Hilfsobjekte verwendet, die als Handler bezeichnet werden. Für URLs verwendet der Quell resolver Schemahandler. Für Bytestreams werden Bytestreamhandler verwendet.
Ein Schemahandler verwendet eine URL als Eingabe und erstellt entweder eine Medienquelle oder einen Bytestream. Wenn ein Bytestream erstellt wird, übergibt der Quell resolver diesen an einen Bytestreamhandler, der die Medienquelle erstellt. Die folgende Abbildung veranschaulicht diesen Prozess.

Schemahandler
Schemahandler werden verwendet, wenn die Anwendung DEN SOURCESourceResolver::CreateObjectFromURL oder die asynchrone Entsprechung BeginCreateObjectFromURLaufruft.
Der Quell resolver sucht schema handlers in der Registrierung. Schemahandler werden nach URL-Schema unter den folgenden Schlüsseln aufgelistet:
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
Dabei ist < scheme > das URL-Schema, das der Handler analysieren soll. Das Schema enthält das nachfolgende Zeichen ":". Beispiel: "http:".
Um einen neuen Schemahandler zu registrieren, fügen Sie einen Eintrag hinzu, dessen Name die CLSID des Schemahandlers ist, in kanonischer Zeichenfolgenform: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} . Der Wert des Eintrags ist eine Zeichenfolge (REG _ SZ), die eine kurze Beschreibung des Handlers enthält, z. B. "Mein Schemahandler". Der wichtige Teil des Eintrags ist die CLSID. Der Quellre resolver erstellt den Handler durch Aufrufen von CoCreateInstance mit dieser CLSID.
Schemahandler machen die HANDLERSchemeHandler-Schnittstelle verfügbar. Wenn der Quellre resolver einen Schemahandler findet, der dem URL-Schema entspricht, ruft der Quellre resolver DENSCHEMEHandler::BeginCreateObjectauf und übergibt die ursprüngliche URL. Der Schemahandler öffnet die URL und versucht, den Inhalt zu analysieren. An diesem Punkt verfügt der Schemahandler über zwei Optionen:
- Erstellen Sie eine Medienquelle.
- Erstellen Sie einen Bytestream.
Wenn eine Medienquelle erstellt wird, gibt der Quell resolver die Medienquelle an die Anwendung zurück. Wenn ein Bytestream erstellt wird, versucht der Quell resolver, einen geeigneten Bytestreamhandler zu finden, wie im nächsten Abschnitt beschrieben.
Byte-Stream Handler
Bytestreamhandler werden verwendet, wenn die Anwendung DEN SOURCESourceResolver::CreateObjectFromByteStream oder die asynchrone Entsprechung BeginCreateObjectFromByteStreamaufruft. Sie werden auch verwendet, wenn ein Schemahandler einen Bytestream zurückgibt, wie zuvor beschrieben.
Wie bei Schemahandlern werden byte-stream-Handler in der Registrierung aufgeführt. Sie werden entweder nach Dateinamenerweiterung oder MIME-Typ (oder beidem) unter den folgenden Schlüsseln aufgeführt:
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
< dabei ist ExtensionOrMimeType > die Dateinamenerweiterung oder der MIME-Typ. Dateierweiterungen enthalten das anfängliche Zeichen ".". Beispiel: ".wmv".
Die Dateinamenerweiterung ist Teil der URL, die von der Anwendung bereitgestellt wird. Der MIME-Typ kann über das MF _ BYTESTREAM _ CONTENT _ TYPE-Attribut im Bytestream verfügbar sein.
Um einen neuen Bytestreamhandler zu registrieren, fügen Sie in kanonischer Zeichenfolgenform einen Eintrag hinzu, dessen Name die CLSID des Handlers ist. Der Wert des Eintrags ist eine Zeichenfolge (REG _ SZ), die eine kurze Beschreibung des Handlers enthält, z. B. "My Byte-Stream Handler". Der Quellre resolver ruft CoCreateInstance auf, um den Handler aus der CLSID zu erstellen. Sie können denselben Handler unter mehreren Erweiterungen oder MIME-Typen registrieren.
Bytestreamhandler machen die INTERFACESByteStreamHandler-Schnittstelle verfügbar. Wenn der Quellre resolver einen übereinstimmenden Bytestreamhandler findet, ruft er DENBYTEStreamHandler::BeginCreateObjectauf. Die Eingabe für diese Methode ist ein Zeiger auf den Bytestream sowie ggf. die ursprüngliche URL. Der Bytestreamhandler liest aus dem Bytestream, bis er genügend Daten analysiert, um die Medienquelle zu erstellen.