Schemahandler und Byte-Stream Handler

In diesem Thema werden die internen Details dazu 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 für Anwendungen über den Quelllöser verfügbar sein soll.

Der Quelllöser kann eine Medienquelle aus einer URL oder einem Bytedatenstrom (d. a. einem IMFByteStream-Zeiger ) erstellen. Dazu werden Hilfsobjekte verwendet, die als Handler bezeichnet werden. Für URLs verwendet der Quelllöser Schemahandler. Für Bytedatenströme werden Bytestreamhandler verwendet.

Ein Schemahandler akzeptiert eine URL als Eingabe und erstellt entweder eine Medienquelle oder einen Bytestream. Wenn ein Bytedatenstrom erstellt wird, übergibt der Quelllöser diesen an einen Bytestreamhandler, der die Medienquelle erstellt. Die folgende Abbildung veranschaulicht diesen Vorgang.

Diagramm des Quellauflösungsprozesses

Schemahandler

Schemahandler werden verwendet, wenn die Anwendung IMFSourceResolver::CreateObjectFromURL oder die asynchrone Entsprechung BeginCreateObjectFromURL aufruft.

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

Dabei <ist schema> das URL-Schema, für das der Handler analysiert werden soll. Das Schema umfasst 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 Quellrelöser erstellt den Handler durch Aufrufen von CoCreateInstance mit dieser CLSID.

Schemahandler machen die IMFSchemeHandler-Schnittstelle verfügbar. Wenn der Quellrelöser einen Schemahandler findet, der mit dem URL-Schema übereinstimmt, ruft der Quellrelöser IMFSchemeHandler::BeginCreateObject auf 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 Quelllöser die Medienquelle an die Anwendung zurück. Wenn ein Bytedatenstrom erstellt wird, versucht der Quellrelöser, einen geeigneten Bytestreamhandler zu finden, wie im nächsten Abschnitt beschrieben.

Byte-Stream-Handler

Bytestreamhandler werden verwendet, wenn die Anwendung IMFSourceResolver::CreateObjectFromByteStream oder die asynchrone Entsprechung BeginCreateObjectFromByteStream aufruft. Sie werden auch verwendet, wenn ein Schemahandler einen Bytedatenstrom zurückgibt, wie zuvor beschrieben.

Wie bei Schemahandlern werden Bytestreamhandler in der Registrierung aufgeführt. Sie werden entweder nach Dateierweiterung oder MIME-Typ (oder beides) unter den folgenden Schlüsseln aufgelistet:

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 Bytedatenstrom verfügbar.

Um einen neuen Bytestreamhandler zu registrieren, fügen Sie einen Eintrag hinzu, dessen Name die CLSID des Handlers in kanonischer Zeichenfolgenform 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 Quellrelöser ruft CoCreateInstance auf, um den Handler aus der CLSID zu erstellen. Sie können denselben Handler unter mehreren Erweiterungs- oder MIME-Typen registrieren.

Bytestreamhandler machen die IMFByteStreamHandler-Schnittstelle verfügbar. Wenn der Quellrelöser einen übereinstimmenden Bytestreamhandler findet, ruft er IMFByteStreamHandler::BeginCreateObject auf. Die Eingabe für diese Methode ist ein Zeiger auf den Bytedatenstrom sowie die ursprüngliche URL, sofern verfügbar. Der Bytestreamhandler liest aus dem Bytedatenstrom, bis er genügend Daten analysiert, um die Medienquelle zu erstellen.

Quellkonfliktlöser