DirectShow (ibland DS , eller DShow ; kodnamn Quartz ) är ett multimediaramverk och applikationsprogrammeringsgränssnitt ( API ) släppt av Microsoft till mjukvaruutvecklare som tillåter Windows -applikationer att styra ett brett utbud av ljud/video I/O-enheter, inklusive DV och webbkameror , DVD - enheter, TV-tuners , etc.
Den stöder också olika filformat, från WAV och AVI till Windows Media . Det är en ersättning för Microsofts tidigare Video for Windows -teknik . [1] Baserat på Microsoft Windows Component Object Model (COM), erbjuder DirectShow ett gemensamt mediegränssnitt som stöds av de flesta programmeringsspråk . Dessutom kan DirectShow utökas för att stödja tredjepartsenheter, format och bearbetningskomponenter. Utvecklarverktygen och dokumentationen distribuerades tidigare som en del av DirectX SDK, men distribueras nu med Platform SDK , som i sin tur ingår i Windows SDK . [2] Microsoft planerar att ersätta DirectShow med Media Foundation i framtiden .
I början av 1990-talet, efter lanseringen av Windows 3.1 , kom ett antal digitala videoenheter (nu kända som webbkameror ) in på den amerikanska marknaden . Vanligtvis var dessa enheter anslutna via en parallellport (LPT-skrivarport). Med tiden blev dessa enheter mer populära och Microsoft bestämde sig för att utveckla en teknik för att arbeta med multimediadata för utvecklare. Denna teknik kallas Video for Windows (VFW). Men sedan dess födelse hade VFW en stor nackdel - komplexiteten i att arbeta med MPEG -video. [ett]
Före lanseringen av Windows 95 startade Microsoft ett nytt ActiveMovie- projekt [3] (kodnamnet Quartz) för att stödja MPEG , 32-bitars arkitektur och video/ljuddataströmning. Det nya projektet kännetecknas av att det använde Microsoft Corporations nya utvecklingar, nämligen Component Object Model (COM). Endast i Quartz är det vanligt att kalla objekt för filter, som liksom LEGO- block kombineras till en filtergraf. Tack vare COM-arkitekturen är ett separat filter ett självförsörjande objekt som kan skapas av en tredjepartsutvecklare för sina egna behov (till exempel: för att upprätthålla funktionaliteten hos sin enhet).
1997 integrerade Microsoft ActiveMovie i DirectX och bytte namn till DirectShow. [4] [5] 1998 kom DirectShow som standard med DVD- stöd . År 2000 lades dataströmsredigeringsfunktioner till och DirectShow-integreringen i DirectX är äntligen klar. Utvecklare kan nu projicera inspelad video i sina 3D- scener. I releasen av DirectX 9 lade DirectShow till möjligheten att kombinera videoströmmar till en för videomixning. [6]
I oktober 2004 togs DirectShow bort från den officiella DirectX-distributionen och portades till DirectX-tillägg. I april 2005 togs DirectShow helt bort från officiella DirectX-distributioner och flyttades till Windows Server 2003 SP1-versionen av Microsoft Platform SDK. [2] Men vissa dokumentationsexempel kräver fortfarande DirectX SDK för att kompilera. [7] Men med lanseringen av Windows Vista börjar dokumentationen levereras tillsammans med Windows SDK. [2]
Ett bra exempel på DirectShows funktioner är programmet Windows Movie Maker . De flesta medieredigeringsapplikationer från tredje part för Windows -operativsystemet använder också DirectShow. [6] Eftersom DirectShow-filter är indelade i tre typer, kan DirectShow-funktioner klassificeras därefter.
Capture-filter är utformade för att mata in multimediadata i programströmmen från olika fysiska enheter. En enhets roll kan vara både olika typer av videoenheter (bärbara videokameror, webbkameror, TV-tuners) och ljudenheter ( mikrofon , modemlinje ), och data kan också erhållas från en fil ( AVI , MPEG , MP3 ). DirectShow låter dig använda flera fångstfilter samtidigt, till exempel: för att fånga video från en webbkamera och ljud från en mikrofon samtidigt. Antalet infångningsfilter som används samtidigt begränsas endast av kraften hos den dator som används .
Transformationsfilter - utformade för att behandla inkommande data från programströmmen och sedan skicka den konverterade datan tillbaka till strömmen till nästa typ av filter. Den här typen av filter kan utföra dataanalys, helt manipulera ljud- och videodata för att skapa komplexa visuella effekter, eller helt enkelt slå samman (eller ta bort) ljud- och videokanaler. I standardleveransen, tillsammans med operativsystemet Windows, tillhandahåller Microsoft ett litet antal färdiga filter: codecs ( MPEG-1 , MP3, WMA , WMV , MIDI ), behållare (AVI, ASF , WAV ), flera splitters ( eller demultiplexorer) och multiplexorer . [8] Andra populära filter: codec ( MPEG-4 , AAC , H.264 , Vorbis ) och behållare ( Ogg , .mov , MP4 ) installeras med olika tredjepartsprogram.
Visualiseringsfilter ( rendering ) är utformade för att mata ut data från en ström till en vanlig fysisk utmatningsenhet, till exempel till en bildskärm , ljudkort eller fil . I analogi med fångstfilter kan det också finnas flera visualiseringsfilter, till exempel för att samtidigt visa video på skärmen och spela in samma video till en fil.
Att spela upp en vanlig videofil är en ganska enkel uppgift att implementera med DirectShow. Att skriva ett program med alla DirectShow-mekanismer (till exempel implementera ditt eget filter av vilken typ som helst) är en ganska svår uppgift och kräver goda färdigheter. [9] [10] [11]
Utvecklare skapar sällan DirectShow-filter från början, oftare använder de basklasser. Dessa klasser förenklar vanligtvis utvecklingen genom att tillåta programmeraren att kringgå vissa uppgifter. Processen kan dock fortfarande vara ganska komplicerad, eftersom mängden kod i basklasserna är ungefär hälften så stor som MFC- biblioteket . Och antalet objekt baserat på basklasser förbluffar många utvecklare. Dessutom, i vissa fall skiljer sig DirectShow API-reglerna från de vanliga reglerna för COM-objekt, detta är särskilt märkbart i metodparametrarna. För att komma runt dessa komplexiteter använder utvecklare ofta en högre nivå: Windows Media Player SDK , som är baserad på ett ActiveX-objekt och använder vanliga COM-regler.
Codec hell (en term inspirerad av DLL hell ) är en konflikt som uppstår mellan olika filter som försöker utföra samma uppgift. Faktum är att nu producerar ett stort antal företag codecs i form av DirectShow-filter, som ofta utför liknande uppgifter med samma typ av mediedata. [12] [13]
Verktyg som kan hjälpa till i kampen mot Codec Hell: