Direktshow

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 .

Historik

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]

Funktioner

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.

Strukturdiagram

Kritik

Svårighet

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 helvete

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:

Se även

Anteckningar

  1. 1 2 Core Media Technology i Windows XP ger dig möjlighet att skapa anpassade ljud-/videobearbetningskomponenter (död länk) . MSDN Magazine . Microsoft (juli 2002). Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  2. 1 2 3 DirectShow-dokumentation (nedlänk) . MSDN . Microsoft. Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  3. Microsoft tillkännager ActiveMovie (nedlänk) . Microsoft (5 mars 1996). Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  4. Microsoft avslöjar den första Unified Multimedia API-strategin (länk ej tillgänglig) . Microsoft (31 mars 1997). Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  5. Microsoft och Progressive Networks samarbetar om strömmande media (länk ej tillgänglig) . Microsoft (21 juli 1997). Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  6. 12 Mark D. Pesce . Exempelkapitel // Programmering av Microsoft DirectShow för digital video och TV . - Microsoft Press, 2003. - ISBN 0-7356-1821-6 .
  7. DirectShow FAQ (nedlänk) . MSDN . Microsoft. Datum för åtkomst: 28 maj 2008. Arkiverad från originalet 13 mars 2012. 
  8. Format som stöds som standard i DirectShow (nedlänk) . MSDN . Microsoft. Hämtad 30 maj 2008. Arkiverad från originalet 13 mars 2012. 
  9. Använda DirectShow med Media Center Edition (nedlänk) (5 januari 2006). Hämtad 22 januari 2012. Arkiverad från originalet 13 mars 2012. 
  10. Grunderna för att använda DirectShow (nedlänk) (13 mars 2001). Hämtad 22 januari 2012. Arkiverad från originalet 13 mars 2012. 
  11. LEAD Technologies: DirectShow definierad (länk ej tillgänglig) . Hämtad 22 januari 2012. Arkiverad från originalet 13 mars 2012. 
  12. Codec Hell: Home Video 101 blogg (nedlänk) . ??? (???). Hämtad 16 juni 2008. Arkiverad från originalet 13 mars 2012. 
  13. Codecs = New Age DLL Hell? Hell Yes - Chris Laniers blogg (länk ej tillgänglig) . ??? (???). Hämtad 16 juni 2008. Arkiverad från originalet 13 mars 2012. 
  14. GSpot Codec Information Appliance (nedlänk) . Hämtad 22 januari 2012. Arkiverad från originalet 13 mars 2012. 

Länkar