Schemahandler und Byte-Stream Handler
In diesem Thema werden die internen Details beschrieben, wie der Quelllöser eine Medienquelle erstellt. Lesen Sie dieses Thema, wenn Sie eine benutzerdefinierte Medienquelle für Media Foundation implementieren und die Medienquelle über den Quelllöser für Anwendungen verfügbar sein soll.
Der Quelllöser kann eine Medienquelle aus einer URL oder aus einem Bytedatenstrom (d. a. einem IMFByteStream Zeiger) erstellen. Dazu werden Hilfsobjekte verwendet, die als -Handlerbezeichnet werden. Für URLs verwendet der Quelllöser Schemahandler. Für Bytedatenströme werden Bytestreamhandlerverwendet.
Ein Schemahandler akzeptiert eine URL als Eingabe und erstellt entweder eine Medienquelle oder einen Bytestream. Wenn ein Bytedatenstrom erstellt wird, übergibt der Quelllöser dies an einen Bytestreamhandler, der die Medienquelle erstellt. Die folgende Abbildung zeigt diesen Prozess.
Schemahandler
Schemahandler werden verwendet, wenn die Anwendung IMFSourceResolver::CreateObjectFromURL oder die asynchrone Entsprechung aufruft, BeginCreateObjectFromURL.
Der Quelllöser sucht Schemahandler 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
wobei <Schema> das URL-Schema ist, das der Handler für die Analyse entwickelt hat. 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 Quelllöser erstellt den Handler durch Aufrufen CoCreateInstance- mit dieser CLSID.
Schemahandler machen die IMFSchemeHandler Schnittstelle verfügbar. Wenn der Quelllöser einen Schemahandler findet, der dem URL-Schema entspricht, ruft der Quelllöser IMFSchemeHandler::BeginCreateObjectauf, wobei die ursprüngliche URL übergeben wird. 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 Bytedatenstrom.
Wenn eine Medienquelle erstellt wird, gibt der Quelllöser die Medienquelle an die Anwendung zurück. Wenn ein Bytedatenstrom erstellt wird, versucht der Quelllöser, einen geeigneten Bytestreamhandler zu finden, wie im nächsten Abschnitt beschrieben.
Byte-Stream Handler
Byte-Stream-Handler werden verwendet, wenn die Anwendung IMFSourceResolver::CreateObjectFromByteStream oder seine asynchrone Entsprechung aufruft, BeginCreateObjectFromByteStream. Sie werden auch verwendet, wenn ein Schemahandler einen Bytedatenstrom 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 beides) 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 ist möglicherweise über das attribut MF_BYTESTREAM_CONTENT_TYPE im Bytestream verfügbar.
Um einen neuen Bytestream-Handler zu registrieren, fügen Sie einen Eintrag hinzu, dessen Name die CLSID des Handlers ist, in kanonischer Zeichenfolgenform. Der Wert des Eintrags ist eine Zeichenfolge (REG_SZ), die eine kurze Beschreibung des Handlers enthält, z. B. "My Byte-Stream Handler". Der Quelllöser ruft CoCreateInstance- auf, um den Handler aus der CLSID zu erstellen. Sie können denselben Handler unter mehreren Erweiterungs- oder MIME-Typen registrieren.
Byte-Stream-Handler machen die IMFByteStreamHandler Schnittstelle verfügbar. Wenn der Quelllöser einen übereinstimmenden Byte-Stream-Handler findet, wird IMFByteStreamHandler::BeginCreateObjectaufgerufen. Die Eingabe für diese Methode ist ein Zeiger auf den Bytestream sowie die ursprüngliche URL, falls verfügbar. Der Bytestreamhandler liest aus dem Bytedatenstrom, bis er genügend Daten analysiert, um die Medienquelle zu erstellen.
Verwandte Themen