Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, MMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Intelligent Connect je mechanismus, který Správce grafů filtru používá k vytváření grafů filtrování. Skládá se z několika souvisejících algoritmů, které vyberou filtry a přidají je do grafu filtru.
Toto téma si přečtěte, pokud máte potíže s vytvořením určitého grafu filtru a chcete problém vyřešit, nebo pokud píšete vlastní filtr a chcete ho zpřístupnit pro automatické vytváření grafů.
Inteligentní připojení zahrnuje následující metody IGraphBuilder:
- IGraphBuilder::AddSourceFilter
- IGraphBuilder::Render
- IGraphBuilder::RenderFile
- IGraphBuilder::Connect
IGraphBuilder::AddSourceFilter
IGraphBuilder::AddSourceFilter metoda přidá zdrojový filtr, který může vykreslit zadaný soubor. Nejprve hledá v registru a odpovídá protokolu (například https://), příponě názvu souboru nebo sadě předem určených kontrolovat bajty, což jsou bajty na konkrétních posunech v souboru, které odpovídají určitým vzorům. Podrobnosti najdete v tématu registrace vlastního typu souboru. Za předpokladu, že metoda vyhledá odpovídající zdrojový filtr, pak vytvoří instanci tohoto filtru, přidá ho do grafu a zavolá filtr IFileSourceFilter::Load metoda s názvem souboru.
IGraphBuilder::Render
Metoda IGraphBuilder::Render vytvoří pododdíl grafu. Začíná z nepřipojeného výstupního špendlíku a funguje v podřízené oblasti a podle potřeby přidává nové filtry. Počáteční filtr už musí být v grafu. V každém kroku hledá metoda Render filtr, který se může připojit k předchozímu filtru. Stream může větvet, pokud připojovací filtr obsahuje více výstupních špendlíků. Hledání se zastaví, když má každý datový proud vykreslovací modul. Pokud se metoda Render zasekne, může se zálohovat a zkusit to znovu pomocí jiné sady filtrů.
Pro připojení každého výstupního špendlíku provede metoda Render následující:
Pokud špendlík podporuje rozhraní IStreamBuilder, Správce grafů filtru deleguje celý proces na metodu IStreamBuilder::Render. Při zveřejnění tohoto rozhraní přebírá špendlík zodpovědnost za vytvoření zbytku grafu až po vykreslovací modul. Toto rozhraní však podporuje jen velmi málo špendlíků.
Správce grafů filtru se pokusí použít filtry, které jsou uložené v mezipaměti, pokud existují. Během procesu inteligentního připojení může Správce grafů filtru ukládat filtry do mezipaměti z předchozích kroků v procesu. (Viz také dynamické vytváření grafů.)
Pokud graf filtru obsahuje nějaké filtry s nepřipojenými vstupními špendlíky, pokusí se je Správce grafů filtru příště. Před voláním Rendermůžete vynutit, aby metoda Render vyzkoušela určitý filtr přidáním tohoto filtru do grafu .
Počínaje Windows 7 má DirectShow seznam upřednostňovaných filtrů pro určité podtypy médií. Pokud existuje upřednostňovaný filtr pro typ média, který se vykresluje, pokusí se Správce grafů filtru tento filtr dále. Aplikace může změnit seznam upřednostňovaných filtrů pomocí IAMPluginControl rozhraní. Změny seznamu ovlivňují aktuální proces aplikace a po skončení procesu se zahodí.
A konečně, pokud nebyl nalezen žádný vhodný filtr, Správce grafů filtru prohledá registr pomocí IFilterMapper2::EnumMatchingFilters metoda. Pokusí se spárovat upřednostňované typy médií výstupního kolíku s typy médií uvedenými v registru.
Každý filtr je registrován pomocí si zaslouží, číselná hodnota, která označuje, jak nejlépe je filtr vzhledem k jiným filtrům. Metoda EnumMatchingFilters vrátí filtry v pořadí za cenu s minimálními hodnotami MERIT_DO_NOT_USE + 1. Ignoruje filtry s významem MERIT_DO_NOT_USE nebo méně. Filtry jsou také seskupené do kategorií definovaných identifikátorem GUID. Kategorie samy mají výhody a EnumMatchingFilters metoda ignoruje jakoukoli kategorii s přínosem MERIT_DO_NOT_USE nebo méně, a to i v případě, že filtry v této kategorii mají vyšší hodnoty výhody.
Počínaje Windows 7 má DirectShow seznam blokovaných filtrů pro určité podtypy médií. Správce grafů filtru přeskočí filtry v tomto seznamu. Aplikace může změnit seznam blokovaných filtrů pomocí rozhraní IAMPluginControl. Změny v tomto seznamu mají vliv na aktuální proces aplikace a po skončení procesu se zahodí.
K shrnutí se metoda Render pokusí filtry v následujícím pořadí:
- Použijte IStreamBuilder.
- Zkuste filtry uložené v mezipaměti.
- Vyzkoušejte filtry v grafu.
- Windows 7 nebo novější: Pokud existuje, zkuste upřednostňovaný filtr pro typ média.
- Vyhledejte filtry v registru.
IGraphBuilder::RenderFile
Metoda IGraphBuilder::RenderFile vytvoří výchozí graf přehrávání z názvu souboru. Interně tato metoda používá AddSourceFilter najít správný zdrojový filtr a Render sestavit zbytek grafu.
IGraphBuilder::Connect
Metoda IGraphBuilder::Connect připojí výstupní pin ke vstupnímu kolíku. Tato metoda v případě potřeby přidá přechodné filtry pomocí varianty algoritmu popsaného pro metodu Render:
- Zkuste přímé propojení mezi filtry bez zprostředkujících filtrů.
- Zkuste filtry uložené v mezipaměti.
- Vyzkoušejte filtry v grafu.
- Windows 7 nebo novější: Pokud existuje, zkuste upřednostňovaný filtr pro typ média.
- Vyhledejte filtry v registru.
Související témata
-
simulace vytváření grafů pomocí GraphEdit