Registrieren eines benutzerdefinierten Dateityps
In diesem Artikel wird beschrieben, wie der Graph-Manager einen Quellfilter bei einem Dateinamen sucht. Sie können diesen Mechanismus verwenden, um Ihre eigenen benutzerdefinierten Dateitypen zu registrieren. Sobald der Dateityp registriert ist, wird von DirectShow automatisch der richtige Quellfilter geladen, wenn eine Anwendung IGraphBuilder::RenderFile oder IGraphBuilder::AddSourceFilter aufruft.
- Übersicht
- Protokolle
- Dateierweiterungen
- Bytes überprüfen
- Laden des Quellfilters
- Benutzerdefinierte Dateitypen in Windows Media Player
- Zugehörige Themen
Übersicht
Um einen Quellfilter aus einem bestimmten Dateinamen zu suchen, versucht der Filter-Graph-Manager folgende Schritte in der angegebenen Reihenfolge:
- Übereinstimmung mit dem Protokoll, falls dies der Fall ist.
- Übereinstimmung mit der Dateierweiterung.
- Übereinstimmungsmuster von Bytes in der Datei, die als Prüfbytes bezeichnet werden.
Protokolle
Protokollnamen wie "ftp" oder "http" werden unter registriert.
HKEY _ CLASSES _ ROOT
key mit der folgenden Struktur:
HKEY_CLASSES_ROOT
<protocol>
Source Filter = <Source filter CLSID>
Extensions
<.ext1> = <Source filter CLSID>
<.ext2> = <Source filter CLSID>
Wenn der Dateiname oder die URL einen Doppelpunkt (':') enthält, versucht der Filter-Graph-Manager, den Teil vor dem ":" als Protokollnamen zu verwenden. Wenn der Name beispielsweise "myprot://myfile.ext" ist, wird nach einem Registrierungsschlüssel namens myprot gesucht. Wenn dieser Schlüssel vorhanden ist und einen Unterschlüssel namens "Extensions" enthält, sucht der Filter Graph Manager innerhalb dieses Unterschlüssels nach Einträgen, die mit der Dateierweiterung übereinstimmen. Der Wert des Schlüssels muss eine GUID in Zeichenfolgenform sein. Beispiel: " {00000000-0000-0000-0000-000000000000} ". Wenn der Filter Graph-Manager keine Übereinstimmungen innerhalb des Unterschlüssels Erweiterungen finden kann, sucht er nach einem Unterschlüssel mit dem Namen Quellfilter, der ebenfalls eine GUID in Zeichenfolgenform sein muss.
Wenn der Filter Graph Manager eine übereinstimmende GUID findet, verwendet er diese als CLSID des Quellfilters und versucht, den Filter zu laden. Wenn keine Übereinstimmung findet, wird der Filter Dateiquelle (URL) verwendet, der den Dateinamen als URL behandelt.
Es gibt zwei Ausnahmen für diesen Algorithmus:
- Um Treiberbuchstaben auszuschließen, werden Zeichenfolgen mit nur einem Zeichen nicht als Protokolle betrachtet.
- Wenn die Zeichenfolge "file:" oder "file://" ist, wird sie nicht als Protokoll behandelt.
Dateierweiterungen
Wenn der Dateiname kein Protokoll enthält, sucht der Filter-Graph-Manager in der Registrierung nach Einträgen mit dem Schlüssel HKEY _ CLASSES ROOT Media Type _ \ \ Extensions \.ext \ , wobei .ext ist die Dateierweiterung. Wenn dieser Schlüssel vorhanden ist, enthält der Wert Quellfilter die CLSID des Quellfilters in Zeichenfolgenform. Optional kann der Schlüssel Werte für Medientyp und Untertyp enthalten, die den Haupttyp und die Untertyp-GUIDs enthalten.
Bytes überprüfen
Einige Dateitypen können durch bestimmte Bitmuster identifiziert werden, die an bestimmten Byteoffsets in der Datei auftreten. Der Filter Graph Manager sucht in der Registrierung nach Schlüsseln im folgenden Formular:
HKEY _ CLASSES _ ROOT \ MediaType \{ Haupttyp } \ { Untertyp }
Dabei sind Haupttyp und Untertyp GUIDs, die den Medientyp für den Bytestream definieren. Jeder Schlüssel enthält einen oder mehrere Unterschlüssel( normalerweise mit den Namen 1, 2 und so weiter), die die Überprüfungsbytes definieren. und einen Unterschlüssel mit dem Namen Quellfilter, der die CLSID des Quellfilters in Zeichenfolgenform angibt. Die Check-Byte-Unterschlüssel sind Zeichenfolgen, die ein oder mehrere Quads von Zahlen namens enthalten:
offset, cb, mask, val
Um eine Übereinstimmung mit der Datei zu finden, liest Graph-Manager cb-Bytes, beginnend mit dem Bytezahlenoffset. Anschließend wird ein bitweises AND für den Wert in der Maske verwendet. Wenn das Ergebnis gleich val ist, entspricht die Datei diesem Quader. Die Werte mask und val werden im Hexadezimalformat angegeben. Ein leerer Eintrag für mask wird als Zeichenfolge der Länge 1 von cb behandelt. Ein negativer Wert für offset gibt einen Offset vom Ende der Datei an. Um mit dem Schlüssel zu übereinstimmen, muss die Datei mit allen Quads in einem der Unterschlüssel übereinstimmen.
Angenommen, die Registrierung enthält die folgenden Schlüssel unter \ HKCR-Medientyp:
{e436eb83-524f-11ce-9f53-0020af0ba770}
{7364696D-0000-0010-8000-00AA00389B71}
0 "0,4,,52494646,8,4,,524D4944"
1 "0,4,,4D546864"
Source Filter "{E436EBB5-524F-11CE-9F53-0020AF0BA770}"
Der erste Schlüssel entspricht dem Haupttyp MEDIATYPE _ Stream. Der untere Unterschlüssel, der dem Untertyp MEDIATYPE _ Format entspricht. Der Wert für den Unterschlüssel Quellfilter ist CLSID _ AsyncReader, die CLSID des Dateiquellenfilters (Async).
Jeder Eintrag kann mehrere Vierfache haben. alle müssen übereinstimmen. Im folgenden Beispiel müssen die ersten 4 Bytes der Datei 0xAB, 0xCD, 0x12, 0x34; und die letzten 4 Bytes der Datei müssen 0xAB, 0xAB, 0x00, 0xAB:
0, 4, , ABCD1234, -4, 4, , ABAB00AB
Darüber hinaus können mehrere Einträge unter einem einzelnen Medientyp aufgeführt sein. Eine Übereinstimmung mit einer dieser Beiden ist ausreichend. Dieses Schema ermöglicht eine Reihe alternativer Masken. Beispiel: WAV-Dateien, die möglicherweise über einen HEADER VOM-Header verfügen oder nicht.
Hinweis
Dieses Schema ähnelt dem Schema, das von der GetClassFile-Funktion verwendet wird.
Laden des Quellfilters
Angenommen, der Filter-Graph-Manager findet einen übereinstimmenden Quellfilter für die Datei, fügt diesen Filter dem Diagramm hinzu, fragt den Filter nach der IFileSourceFilter-Schnittstelle ab und ruft IFileSourceFilter::Load auf. Die Argumente für die Load-Methode sind der Dateiname und der Medientyp, wie von der Registrierung festgelegt.
Wenn der Filter Graph-Manager keine Informationen aus der Registrierung finden kann, wird standardmäßig der Filter asynchrone Dateiquelle verwendet. In diesem Fall wird der Medientyp auf MEDIATYPE _ Stream, MEDIASUBTYPE _ None festgelegt.
Benutzerdefinierte Dateitypen in Windows Media Player
Windows Media Player verwendet einen zusätzlichen Satz von Registrierungseinträgen. Weitere Informationen finden Sie unter File Name Extension Registry Einstellungen im Windows Media Player SDK.