Konfigurace objektu rozdělení ASF
ASF rozdělovač je objekt vrstvy WMContainer, který analyzuje datový objekt ASF souboru formátu Advanced Systems Format (ASF). Po vytvoření a inicializaci rozdělovače pro parsování datového objektu ASF multimediálního souboru musí být rozdělovač nakonfigurovaný tak, aby vygeneroval vzorky pro konkrétní datové proudy. Zavolejte IMFASFSplitter::SelectStreams, abyste vybrali požadované datové proudy.
Volitelně může aplikace také nakonfigurovat, aby vygenerovala vzorky v obráceném pořadí nebo generovala ukázky pro chráněný obsah. Chcete-li nastavit tyto možnosti, zavolejte MMFASFSplitter::SetFlags a předejte požadovanou bitovou kombinaci podporovaných příznaků. Před voláním této metody musí klient dokončit MMFASFSplitter::Initialize volání úspěšně; jinak SetFlags selže s kódem chyby MF_E_NOT_INITIALIZED. Informace o inicializaci rozdělovače naleznete v tématu Vytvoření objektu ASF Splitter.
Chcete-li zkontrolovat, zda je aktuálně tento příznak nastaven na rozdělovači, zavolejte IMFASFSplitter::GetFlags.
Výběr streamů pro analýzu
Během procesu inicializace prostřednictvím MMFASFSplitter::Initialize call, rozdělovač zjistí počet datových proudů a identifikátory datových proudů v souboru ASF. Ve výchozím nastavení nejsou rozdělovačem vybrány žádné datové proudy. Aplikace musí vybrat datové proudy voláním IMFASFSplitter::SelectStreams. Tato metoda přijímá pole čísel datových proudů. Chcete-li získat číslo datového proudu, zavolejte IMFASFProfile::GetStream v profilu ASF nebo zavolejte IMFStreamDescriptor::GetStreamIdentifier na popisovači datového proudu. (Profil ASF i popisovač streamu můžete získat z objektu ContentInfo.) Pokud klient předá číslo datového proudu, které rozdělovač nerozpozná, selže s chybou MF_E_INVALIDSTREAMNUMBER.
Volání SelectStreams vymaže předchozí výběry. Datový proud, který není zadán v poli, není vybrán. Chcete-li získat seznam aktuálně vybraných datových proudů, zavolejte IMFASFSplitter::GetSelectedStreams. Tato metoda přijímá ukazatel na pole a vyplní ho čísly datových proudů. Pokud je velikost pole menší než počet vybraných datových proudů, metoda selže s chybou MF_E_BUFFERTOOSMALL. V tomto případě metoda vrátí počet vybraných datových proudů v pwNumStreams parametru. Toto číslo pak můžete použít k přidělení pole správné velikosti a opětovnému volání metody.
Příklad kódu viz "Výběr streamu k parsování" v Kurz: Čtení souboru ASF.
Nastavení zpětného přehrávání
Během procesu inicializace rozdělovače určuje, jestli obsah ASF podporuje zpětné přehrávání. Pokud ano, rozdělovač lze nakonfigurovat tak, aby generoval vzorky v obráceném pořadí nastavením příznaku MFASF_SPLITTER_REVERSE. Pokud obsah nepodporuje zpětné přehrávání, vrátí IMFASFSplitter::SetFlagsMF_E_INVALIDREQUEST, ale příznak je nastaven na rozdělovači.
Pokud je rozdělovač nakonfigurovaný tak, aby parsoval v opačném směru, rozdělovač vždy začne parsovat na konci vyrovnávací paměti, která obsahuje datový objekt ASF. Pro zpětnou analýzu je proto nutné správně nastavit odstup dat a délku dat, která se mají analyzovat. Informace o nastavení správných hodnot najdete v tématu Generování ukázek datových proudů z existujícího datového objektu ASF.
Nastavení chráněného obsahu
Rozdělovač lze nakonfigurovat tak, aby fungoval s obsahem šifrování na úrovni paketů nastavením MFASF_SPLITTER_WMDRM prostřednictvím IMFASFSplitter::SetFlags. To dává rozdělovač pokyn, aby doručoval ukázky pro obsah chráněný technologií DRM (Windows Media Digital Rights Management). Pokud je tento příznak nastaven, vzorky vygenerované rozdělovačem obsahují informace potřebné k dešifrování dat médií a rekonstrukci rámců, jako je MFSampleExtension_PacketCrossOffsets atribut. Tento atribut je objekt blob, který obsahuje pole DWORDs. Každý DWORD poskytuje vám hranice datové části rámce vzhledem k začátku rámce. Pokud tento atribut není přítomný, je rámec obsažen v jedné datové části. Vzorky generované rozdělovačem obvykle obsahují více vyrovnávacích pamětí médií, aplikace může kopírovat všechny vyrovnávací paměti do jedné souvislé vyrovnávací paměti voláním MMFSample::ConvertToContiguousBuffer. Výsledná vyrovnávací paměť obsahuje snímek a hodnota atributu obsahuje posuny do této vyrovnávací paměti.
Související témata