Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
[Funkcja skojarzona z tą stroną, DirectShow, jest starszą funkcją. Został zastąpiony przez MediaPlayer, IMFMediaEnginei Audio/Video Capture w Media Foundation. Te funkcje zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Firma Microsoft zdecydowanie zaleca, aby nowy kod używał MediaPlayer, IMFMediaEngine i Audio/Video Capture w programie Media Foundation zamiast DirectShow, jeśli to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
W tym artykule opisano, jak Menedżer filtrów programu Graph lokalizuje filtr źródłowy, podając nazwę pliku. Tego mechanizmu można użyć do rejestrowania własnych niestandardowych typów plików. Po zarejestrowaniu typu pliku program DirectShow automatycznie załaduje prawidłowy filtr źródłowy za każdym razem, gdy aplikacja wywołuje IGraphBuilder::RenderFile lub IGraphBuilder::AddSourceFilter.
- Przegląd
- Protokołów
- rozszerzenia plików
- Sprawdź bajty
- Ładowanie filtru źródłowego
- niestandardowe typy plików w usłudze Windows Media Player
- Tematy pokrewne
Przegląd
Aby zlokalizować filtr źródłowy z podanej nazwy pliku, menedżer filtru programu Graph próbuje wykonać następujące czynności w następującej kolejności:
- Dopasuj protokół, jeśli istnieje.
- Dopasuj rozszerzenie pliku.
- Dopasuj wzorce bajtów w pliku, zwane bajtami kontrolnymi.
Protokoły
Nazwy protokołów, takie jak "ftp" lub "http", są rejestrowane w ramach
HKEY_CLASSES_ROOT
klucz z następującą strukturą:
HKEY_CLASSES_ROOT
<protocol>
Source Filter = <Source filter CLSID>
Extensions
<.ext1> = <Source filter CLSID>
<.ext2> = <Source filter CLSID>
Jeśli nazwa pliku lub adres URL zawiera dwukropek (':'), Menedżer Graph filtru próbuje użyć części przed dwukropkiem jako nazwę protokołu. Jeśli na przykład nazwa to "myprot://myfile.ext", wyszukuje klucz rejestru o nazwie myprot. Jeśli ten klucz istnieje i zawiera podklucz o nazwie "Extensions", filtr Graph Manager wyszukuje w tym podkluczu wpisy zgodne z rozszerzeniem pliku. Wartość klucza musi być identyfikatorem GUID w postaci ciągu; na przykład "{00000000-0000-0000-0000-000000000000}". Jeśli Menedżer grafu filtrów nie może dopasować niczego w podkluczu Rozszerzenia, szuka podklucza o nazwie Filtr źródłowy, który również musi być identyfikatorem GUID w postaci ciągu.
Jeśli menedżer grafu filtrów znajdzie pasujący identyfikator GUID, używa go jako CLSID filtru źródłowego i próbuje załadować filtr. Jeśli nie znajdzie dopasowania, używa filtru File Source (URL), który traktuje nazwę pliku jako adres URL.
Istnieją dwa wyjątki od tego algorytmu:
- Aby wykluczyć litery oznaczające dyski, ciągi jednoznakowe nie są uznawane za protokoły.
- Jeśli ciąg to "file:" lub "file://", nie jest traktowany jako protokół.
Rozszerzenia plików
Jeśli w nazwie pliku nie ma protokołu, Menedżer filtru programu Graph wyszukuje w rejestrze wpisy z kluczem HKEY_CLASSES_ROOT\Media Type\Extensions\.ext\, gdzie .ext jest rozszerzeniem pliku. Jeśli ten klucz istnieje, wartość Filtr źródłowy zawiera identyfikator CLSID filtru źródłowego w postaci ciągu. Opcjonalnie klucz może mieć wartości Typ nośnika i Podtyp, które dają identyfikatory GUID typu głównego i podtypu.
Sprawdzanie bajtów
Niektóre typy plików mogą być identyfikowane przez określone wzorce bitów występujących przy określonych przesunięciach bajtów w pliku. Menedżer filtru programu Graph wyszukuje w rejestrze klucze z następującym formularzem:
HKEY_CLASSES_ROOT\MediaType\{ typ główny }\{ podtyp }
gdzie typ główny i podtyp są identyfikatorami GUID definiującymi typ nośnika dla strumienia bajtów. Każdy klucz zawiera co najmniej jeden podklucz, zwykle nazwany 1, 2 itd., który definiuje bajty kontrolne; i podklucz o nazwie Filtr źródłowy, który daje CLSID filtru źródłowego w postaci ciągu. Podklucze check-byte są ciągami zawierającymi jedną lub więcej czwórek liczb zwanych:
przesunięcie, cb, maska, val
Aby dopasować plik, Menedżer filtru programu Graph odczytuje bajty cb, począwszy od przesunięcia liczby bajtów. Następnie wykonuje bitową operację AND na wartości w masce. Jeśli wynik jest równy val, plik jest dopasowaniem dla tego kwadratu. Wartości maski i val są podane w systemie szesnastkowym. Pusty wpis maski jest traktowany jako ciąg o długości 1 cb. Wartość ujemna przesunięcia wskazuje przesunięcie od końca pliku. Aby dopasować klucz, plik musi być zgodny ze wszystkimi czworokątami w dowolnym podkluczu.
Załóżmy na przykład, że rejestr zawiera następujące klucze w HKCR\Media Type:
{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}"
Pierwszy klucz odpowiada głównemu typowi MEDIATYPE_Stream. Podklucz poniżej odpowiadający podtypowi MEDIATYPE_Midi. Wartością podklucza dla filtru źródłowego jest CLSID_AsyncReader, CLSID filtru File Source (Async).
Każdy wpis może mieć wiele czwórek; wszystkie z nich muszą być zgodne. W poniższym przykładzie pierwsze 4 bajty pliku muszą być 0xAB, 0xCD, 0x12, 0x34; a ostatnie 4 bajty pliku muszą być 0xAB, 0xAB, 0x00, 0xAB:
0, 4, , ABCD1234, -4, 4, , ABAB00AB
Ponadto może istnieć wiele wpisów wymienionych w jednym typie nośnika. Dopasowanie do dowolnego z nich jest wystarczające. Ten schemat umożliwia korzystanie z zestawu alternatywnych masek; na przykład plików .wav, które mogą mieć lub nie mieć nagłówka RIFF.
Uwaga
Ten schemat jest podobny do tego, który jest używany przez funkcję GetClassFile.
Ładowanie filtru źródłowego
Zakładając, że Menedżer Grafu Filtrów znajduje pasujący filtr źródłowy dla pliku, dodaje ten filtr do grafu, sporządza zapytanie do filtru dla interfejsu IFileSourceFilter i wywołuje IFileSourceFilter::Load. Argumenty metody Load są nazwą pliku i typem nośnika określonym w rejestrze.
Jeśli Menedżer filtrów programu Graph nie może odnaleźć niczego z rejestru, domyślnie używa filtru Async File Source. W takim przypadku ustawia typ nośnika na MEDIATYPE_Stream, MEDIASUBTYPE_None.
Niestandardowe typy plików w programie Windows Media Player
Program Windows Media Player używa dodatkowego zestawu wpisów rejestru. Aby uzyskać więcej informacji, zobacz Ustawienia rejestru rozszerzeń nazw plików w zestawie SDK programu Windows Media Player.
Tematy pokrewne