Dela via


Introduktion till DirectShow-programmering

[Funktionen som är associerad med den här sidan, DirectShow, är en äldre funktion. Det har ersatts av MediaPlayer, IMFMediaEngineoch Audio / Video Capture i Media Foundation. Dessa funktioner har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder MediaPlayer, IMFMediaEngine och Audio/Video Capture i Media Foundation i stället för DirectShow, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

Den här artikeln beskriver grundläggande terminologi och begrepp som används i DirectShow. När du har läst det här avsnittet är du redo att skriva ditt första DirectShow-program.

filter och filterdiagram

Byggblocket i DirectShow är en programvarukomponent som kallas filter. Ett filter är en programvarukomponent som utför en viss åtgärd på en multimediaström. DirectShow-filter kan till exempel

  • läsa filer
  • hämta video från en videoinspelningsenhet
  • avkoda olika strömformat, till exempel MPEG-1-video
  • skicka data till grafik- eller ljudkortet

Filter tar emot indata och producerar utdata. Om ett filter till exempel avkodar MPEG-1-video är indata den MPEG-kodade strömmen och utdata är en serie okomprimerade videorutor.

I DirectShow utför ett program alla uppgifter genom att koppla ihop filterkedjor så att utdata från ett filter blir indata för ett annat. En uppsättning anslutna filter kallas för ett filterdiagram. I följande diagram visas till exempel ett filterdiagram för att spela upp en AVI-fil.

filterdiagram för att spela upp en avi-fil

Filtret Filkälla läser AVI-filen från hårddisken. AVI Splitter-filtret parsar filen i två strömmar, en komprimerad videoström och en ljudström. AVI-dekomprimeringsfiltret avkodar videoramarna. Filtret Videoåtergivning ritar bildrutorna på skärmen med hjälp av DirectDraw eller GDI. Filtret för standardenheten DirectSound spelar upp ljudströmmen med DirectSound.

Programmet behöver inte hantera hela det här dataflödet. I stället styrs filtren av en komponent på hög nivå som kallas Filter Graph Manager. Programmet gör API-anrop på hög nivå, till exempel "Kör" (för att flytta data genom grafen) eller "Stop" (för att stoppa dataflödet). Om du behöver mer kontroll över strömåtgärderna kan du komma åt filtren direkt via COM-gränssnitt. Filter Graph Manager skickar även händelsemeddelanden till programmet.

Filter Graph Manager tjänar också ett annat syfte: Det innehåller metoder för programmet att skapa filterdiagrammet genom att koppla ihop filtren. (DirectShow innehåller också olika hjälpobjekt som förenklar den här processen. Dessa beskrivs noggrant i dokumentationen.)

Skriva ett DirectShow-program

I stora drag finns det tre uppgifter som alla DirectShow-program måste utföra. Dessa illustreras i följande diagram.

typiska directshow-applikation

  1. Programmet skapar en instans av Filter Graph Manager.
  2. Programmet använder Filter Graph Manager för att skapa ett filterdiagram. Den exakta uppsättningen filter i diagrammet beror på programmet.
  3. Programmet använder Filter Graph Manager för att styra filterdiagrammet och strömma data via filtren. Under hela den här processen svarar programmet också på händelser från Filter Graph Manager.

När bearbetningen är klar släpper programmet Filter Graph Manager och alla filter.

DirectShow baseras på COM; Filter Graph Manager och filtren är alla COM-objekt. Du bör ha en allmän förståelse för COM-klientprogrammering innan du börjar programmera DirectShow. Det finns många böcker om COM-programmering.

För att komma igång med DirectShow läser du artikeln How To Play a File, som presenterar ett enkelt konsolprogram för att spela upp en videofil. Avsnittet Om DirectShow- förklarar DirectShow-arkitekturen mer detaljerat, medan avsnittet Using DirectShow undersöker de viktigaste scenarier som stöds av DirectShow, till exempel inspelning, videoredigering, DVD-uppspelning och TV.