Intelligent Connect
[A laphoz társított funkció, DirectShowegy régi funkció. MediaPlayer, IMFMediaEngineés Audio/Video Capture a Media Foundation. Ezek a funkciók Windows 10-hez és Windows 11-hez lettek optimalizálva. A Microsoft határozottan javasolja, hogy az új kód MediaPlayer, IMFMediaEngine és Audio/Video Capture eszközt használja a Media FoundationDirectShowhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]
Az Intelligent Connect az a mechanizmus, amelyet a Filter Graph Manager használ a szűrődiagramok létrehozásához. Több kapcsolódó algoritmusból áll, amelyek szűrőket választanak ki, és hozzáadják őket a szűrőgráfhoz.
Olvassa el ezt a témakört, ha problémába ütközik egy adott szűrődiagram létrehozásakor, és szeretné elhárítani a problémát, vagy ha saját szűrőt ír, és elérhetővé szeretné tenni az automatikus gráfkészítéshez.
Az Intelligent Connect az alábbi IGraphBuilder metódusokat foglalja magában:
- IGraphBuilder::AddSourceFilter
- IGraphBuilder::Render
- IGraphBuilder::RenderFile
- IGraphBuilder::Connect
IGraphBuilder::AddSourceFilter
Az IGraphBuilder::AddSourceFilter metódus hozzáad egy forrásszűrőt, amely képes megjeleníteni egy megadott fájlt. Először a beállításjegyzékben néz ki, és megfelel a protokollnak (például https://
), a fájlnévkiterjesztésnek, vagy egy előre meghatározott ellenőrző bájtok, amelyek bizonyos mintáknak megfelelő bájtok a fájlban. További információ: Egyéni fájltípus regisztrálása. Feltételezve, hogy a metódus megkeresi a megfelelő forrásszűrőt, létrehozza a szűrő egy példányát, hozzáadja a gráfhoz, és meghívja a szűrő IFileSourceFilter::Load metódust a fájlnévvel.
IGraphBuilder::Render
Az IGraphBuilder::Render metódus egy gráf alszakaszát hozza létre. Egy nem összekapcsolt kimeneti pin-kódból indul ki, és az alsóbb rétegben működik, és szükség szerint új szűrőket ad hozzá. A kezdő szűrőnek már a gráfban kell lennie. A Render metódus minden lépésben keres egy szűrőt, amely képes csatlakozni az előző szűrőhöz. A stream elágazhat, ha egy csatlakozó szűrő több kimeneti tűvel rendelkezik. A keresés leáll, ha minden stream rendelkezik renderelővel. Ha a Render metódus elakad, előfordulhat, hogy biztonsági másolatot készít, és újra próbálkozik egy másik szűrőkészlettel.
Az egyes kimeneti tűk csatlakoztatásához a Render metódus a következőket teszi:
Ha a tű támogatja az IStreamBuilder felületet, a Filter Graph Manager delegálja a teljes folyamatot a tű IStreamBuilder::Render metódusra. Az interfész felfedésével a csap felelősséget vállal a gráf fennmaradó részének elkészítéséért, egészen a renderelőig. Azonban nagyon kevés tű támogatja ezt a felületet.
A Filter Graph Manager a memóriában gyorsítótárazott szűrőket próbál használni, ha vannak ilyenek. Az Intelligent Connect folyamat során a Filter Graph Manager gyorsítótárazhatja a folyamat korábbi lépéseinek szűrőit. (Lásd még: Dynamic Graph Building.)
Ha a szűrőgráf nem összekapcsolt bemeneti csapokkal rendelkező szűrőket tartalmaz, a Filter Graph Manager a következő lépésként próbálkozik velük. Kényszerítheti a Render metódust, hogy kipróbáljon egy adott szűrőt úgy, hogy hozzáadja a szűrőt a gráfhoz, mielőtt meghívná Render.
A Windows 7-től kezdve a DirectShow tartalmaz egy listát bizonyos média-altípusok előnyben részesített szűrőiről. Ha a renderelt médiatípushoz van előnyben részesített szűrő, a Filter Graph Manager ezt a szűrőt próbálja meg legközelebb. Az alkalmazások az IAMPluginControl felülettel módosíthatják az előnyben részesített szűrők listáját. A lista módosításai hatással vannak az alkalmazás aktuális folyamatára, és a folyamat befejezése után elvesznek.
Végül, ha nem található megfelelő szűrő, a Filter Graph Manager az IFilterMapper2::EnumMatchingFilters metódussal keres a beállításjegyzékben. Megpróbálja egyezni a kimeneti pin által előnyben részesített médiatípusokkal a beállításjegyzékben felsorolt médiatípusokkal.
Minden szűrő regisztrálva van egy érdemi, egy numerikus érték, amely jelzi, hogy a szűrő milyen előnyösebb a többi szűrőhöz képest. Az EnumMatchingFilters metódus a szűrőket érdemi sorrendben adja vissza, amelynek minimális értéke MERIT_DO_NOT_USE + 1. Figyelmen kívül hagyja a MERIT_DO_NOT_USE vagy annál kisebb méretű szűrőket. A szűrők a GUID által meghatározott kategóriákba is vannak csoportosítva. Maguk a kategóriák rendelkeznek érdemekkel, és az EnumMatchingFilters metódus figyelmen kívül hagy minden olyan kategóriát, amely MERIT_DO_NOT_USE vagy annál kisebb értékű, még akkor is, ha a kategória szűrői magasabb érdemértékekkel rendelkeznek.
A Windows 7-től kezdve a DirectShow bizonyos média-altípusok letiltott szűrőinek listáját tartalmazza. A Filter Graph Manager kihagyja a szűrőket ezen a listán. Az alkalmazások az IAMPluginControl felületen módosíthatják a letiltott szűrők listáját. A lista módosításai hatással vannak az alkalmazás aktuális folyamatára, és a folyamat befejezése után elvetik őket.
Összegzésként a Render metódus a szűrőket az alábbi sorrendben próbálja meg:
- IStreamBuilderhasználata.
- Próbálja ki a gyorsítótárazott szűrőket.
- Próbálja ki a szűrőket a gráfban.
- Windows 7 vagy újabb: Ha van ilyen, próbálja ki a médiatípus előnyben részesített szűrőt.
- Szűrők keresése a beállításjegyzékben.
IGraphBuilder::RenderFile
A IGraphBuilder::RenderFile metódus egy alapértelmezett lejátszási gráfot hoz létre egy fájlnévből. Ez a módszer belsőleg AddSourceFilter használatával keresi meg a megfelelő forrásszűrőt, és Render a gráf többi részének létrehozásához.
IGraphBuilder::Connect
Az IGraphBuilder::Connect metódus egy kimeneti pin-et csatlakoztat egy bemeneti tűhöz. Ez a módszer szükség esetén köztes szűrőket ad hozzá a Render metódushoz leírt algoritmus egyik változatával:
- Próbáljon meg közvetlen kapcsolatot létesíteni a szűrők között köztes szűrők nélkül.
- Próbálja ki a gyorsítótárazott szűrőket.
- Próbálja ki a szűrőket a gráfban.
- Windows 7 vagy újabb: Ha van ilyen, próbálja ki a médiatípus előnyben részesített szűrőt.
- Szűrők keresése a beállításjegyzékben.
Kapcsolódó témakörök