DirectShow .
DirectShow er en multimedie- og streaming-arkitektur udviklet af Microsoft og er del af alle Windows-versioner fra 98 og til og med Vista. Det opdeler behandlingen af medie-filer (lyd og billede) i adskillige trin kaldet filtre. Disse filtre er COM- (Component Object Model) objekter og søger for en række COM-interfaces (IBaseFilter interface). Interfacet foregår mellem såkaldte ”pins” og hver objekt kan have et vist antal output- og input-pins.
Når 2 filtres pins forbindes, afgør de hvilke media-type, der skal definere den data der udveksles.
Når en medie-afspiller (se ovenfor) skal afspille en medie-fil, sker der altså en bagvedliggende behandling i adskillige filter-trin. Disse trin benævnes ofte som en filter-graf og styres af et komponent kaldet Filter Graph Manager.
Typisk flyder dataet fra en medie-fil gennem filter-grafen til en anordning (ex. et lydkort) eller vindue, hvori medie-afspilleren kan kontrollere afspilningen.
Nedenfor er en typisk afspilningsgraf for en video-fil. Den viser (fra venstre mod højre):
En kildefil-filter - her MPEG fra en DVD.
En parser, som har til formål at analysere kildefilen og hvis det er nødvendigt, som her, at splitte datastreamen op i en video- og lyd-stream.
Video- og lyd-decodere som dekomprimerer dataen.
Rendering-filtere som tager den dekomprimerede data og sender det til lydkort og til afspilning på display.
Hver filter har således en specifik opgave at udføre.
NB.: Betegnelserne filter, codec og decoder kan alle bruges til at beskrive den samme ting.
DirectShow-filtre bærer filnavnet .ax eller .dll.
Alle DirectShow-filtre i et system har en såkaldt ”merit” tilknyttet. Disse merits bestemmer hvilke filtre, som skal anvendes for at bygge en filter-graf. Merits-ordenen er som følger:
MERIT_PREFERRED = 0x800000
MERIT_NORMAL = 0x600000
MERIT_UNLIKELY = 0x400000
MERIT_DO_NOT_USE = 0x200000
MERIT_SW_COMPRESSOR = 0x100000
MERIT_HW_COMPRESSOR = 0x100050
Nogle medie-afspillere tilsidesætter dog merits-ordenen, men i de fleste tilfælde er dette ikke tilfældet.
Man kan også helt afregistrere eller registrere filtre på følgende måde:
Registrering: Klik ”Start” -> ”Kør…” -> skriv ”regsvr32.exe C:\Placeringen\på\filteret\filter.ax/.dll“ -> Tryk enter.
Afregistrering: Klik ”Start” -> ”Kør…” -> skriv ”regsvr32.exe /u C:\Placeringen\på\filteret\filter.ax/.dll“ -> Tryk enter.
Som oftest er filtrene placeret i C:\Windows\System32 eller C:\Program Files\\.
Når man kører regsvr32.exe skal man anvende den gamle DOS 8-filnavngivning eller sætte den fulde sti i gåseøjne. Så C:\Program Files = C:\Progra~1 (Note: Progra~1 er 6 bogstaver langt, efterfulgt af ~1 således at det gir’ 8 totalt.) Et andet eksempel er C:\Program Files\Movie Maker. Det skal være C:\Progra~1\MovieM~1\, læg mærke til at jeg har taget mellemrummet væk. Som du kan se, er det ikke sjovt, hvis man ikke ved hvad man laver, så bare sæt alt i gåseøjne og det vil gå lettere.
Efterhånden er der flere programmer, som kan være behjælpelig med administrationen af filter-grafen:
· Vista Media Center Decoder Utility (se ovenfor).
· DECCHECK (Windows XP Video Decoder Checkup Utility) – Gør det let at ændre den “preferred” video-decoder, men erfaring viser, at den programmet ikke håndterer lyd-decoderen lige så smertefrit.
· DirectShow Filter Manager – Et lille værktøj til at ændre merits samt registrere og afregistrere filtre.
· Radlight Filter Manager - Et lille værktøj til at ændre merits samt registrere og afregistrere filtre.
· GraphEdit – Det bedste og mest omfattende filterværktøj. Det er en del af Microsofts DirectX SDK, men linket henviser til Doom9 hvor du kan downloade programmet alene.
Med GraphEdit kan du bygge og teste forskellige filter-grafer for at se, om de virker som tiltænkt. Man kan endda se en filter-graf bygget af et andet program, som kører i en anden proces.