Sdílet prostřednictvím


Implementace řízení rychlosti

Toto téma popisuje, jak mohou vlastní objekty kanálu podporovat proměnlivé rychlosti přehrávání, včetně zpětného přehrávání. Informace o použití řízení rychlosti z aplikace naleznete v tématu Řízení rychlosti.

Toto téma obsahuje následující části:

Pokud píšete objekt Microsoft Media Foundation (zdroj médií, transformace médií nebo výstup médií), můžete potřebovat podporovat proměnlivé rychlosti přehrávání. Provedete to implementací následujících rozhraní:

  1. Implementujte rozhraní MMFGetService.
  2. Podporujte službu MF_RATE_CONTROL_SERVICE (Viz rozhraní služby .)
  3. Implementujte rozhraní MMFRateSupport, které získává frekvence přehrávání podporované objektem.
  4. Implementujte MMFRateControl rozhraní, které získá nebo nastaví rychlost přehrávání.

Zdroje médií

Pokud zdroj médií podporuje kontrolu rychlosti, měl by implementovat MMFRateSupport i MMFRateControl. V opačném případě relace médií hlásí, že minimální a maximální rychlost přehrávání je 1,0 bez ohledu na to, jaké další komponenty jsou v kanálu.

Rychlost přehrávání nemá vliv na časy prezentace ukázek, takže zdroj médií by neměl upravovat časová razítka. Místo toho běží hodiny prezentace rychleji nebo pomaleji. Pro zpětné přehrávání zdroj dodává vzorky v obráceném pořadí se snižujícími se časovými razítky.

fThin parametr MMFRateControl::SetRate metoda označuje, zda má zdroj médií tenký obsahu. Ztenčení se vztahuje především na video streamy. V redukovaném režimu zdroj zahodí delta snímky a doručí pouze klíčové snímky. Při velmi vysokých rychlostech přehrávání může zdroj přeskočit některé klíčové snímky (například doručit každý druhý klíčový snímek).

Zdroj nemusí vypouštět zvukové vzorky v režimu s nižší hustotou. Při velmi vysokých rychlostech přehrávání ale zdroj nemusí být schopen číst data dostatečně rychle, aby splnil požadavky na vzorky potrubí. V takovém případě může zdroj potřebovat vypustit nějaká zvuková data. Pokud ano, měl by se pokusit doručovat zvukové vzorky, které jsou časově blízko vzorkům videa (za předpokladu, že zdroj má oba typy streamu).

Když datový proud přechází mezi tenkým a netenčím režimem, odešle událost MEStreamThinMode.

Když zdroj médií dokončí volání SetRate, odešle událost MESourceRateChanged.

Během zpětného přehrávání:

  • Zdroj médií doručuje vzorky v obráceném pořadí bez úpravy časových razítek.
  • Časová razítka v rámci datového proudu by se měla monotonicky snížit.
  • Začátek obsahu se považuje za konec streamu. Jakmile každý datový proud médií doručí první ukázku v proudu (tj. čas prezentace = 0), odesílá MEEndOfStream událost.

Transformace Media Foundation

Obecně platí, že transformace Media Foundation (MFT) nepotřebuje explicitní podporu pro řízení rychlosti, pokud MFT neimplementuje netenčí zpětné přehrávání.

Pokud MFT neimplementuje rozhraní IMFRateSupport, relace médií předpokládá následující:

  • MFT podporuje libovolné rychlosti přehrávání pro přehrávání vpřed, a to jak redukované, tak neredukované.
  • MFT podporuje ztenčené zpětné přehrávání, ale nepodporuje nezetenčené zpětné přehrávání.

Pokud některé z těchto podmínek není pravdivé, MFT by měl implementovat MMFRateSupport a MMFRateControl.

Přehrávání pozpátku

Relace médií může přehrávat obráceně, i když jedna nebo více transformací v řetězci explicitně nepodporuje zpětné přehrávání.

Pokud MFT nezpřístupňuje rozhraní IMFRateSupport, použije relace médií ztenčení pro reverzní přehrávání následujícím způsobem:

  • Relace médií odesílá klíčové rámce do MFT obvyklým způsobem voláním IMFTransform::ProcessInput.

  • Mediální relace zahodí rozdílové rámce a nahradí je událostmi MEStreamTick.

  • Mezi jednotlivými ukázkami mediální relace vyprázdní MFT, aby se předešlo chybám způsobeným tím, že časová razítka klesají.

Vzorek je považován za klíčový snímek, pokud má atribut MFSampleExtension_CleanPoint nastavený na TRUE, a je považován za delta snímek, pokud je tento atribut FALSE, nebo pokud není nastaven.

Pokud MFT implementuje IMFRateSupport, Media Session používá toto rozhraní ke zjištění, zda MFT podporuje netlumené zpětné přehrávání. Pokud MFT podporuje zpětné přehrávání bez snížení vzorkování, mediální relace doručí všechny vzorky v obráceném pořadí bez vyřazení vzorků nebo vyprázdnění MFT.

Pokud MFT podporuje neředěné zpětné přehrávání, měl by implementovat rozhraní IMFRateControl. Mediální relace použije toto rozhraní k upozornění MFT, když nastane zpětné přehrávání. V tomto okamžiku musí být MFT připraven na snížení časových razítek a na rozdílové rámce, aby byly doručeny v obráceném pořadí. Dekodér bude obvykle muset vzorky ukládat do vyrovnávací paměti, dokud neobdrží celou skupinu obrázků (GOP), pak dekóduje celý soubor GOP a vypíše dekódované snímky ve správném (obráceném) pořadí.

Přijímače médií

Pokud je jímka médií rateless, relace médií předpokládá, že jímka médií dokáže zpracovat jakoukoli rychlost přehrávání. Jímka médií nemusí implementovat IMFRateSupport. (Jímka médií bez rychlosti vrátí příznak MEDIASINK_RATELESS z IMFMediaSink::GetCharacteristics metody.)

V opačném případě by měla jímka médií implementovat SUPPORT, pokud dokáže zpracovat rychlost přehrávání jiné než 1,0.

Jímky médií by neměly implementovat IMFRateControl. Když se rychlost přehrávání změní, hodiny prezentace volají metodu IMFClockStateSink::OnClockSetRate.

regulace rychlosti

hledání, rychlé přeposlání a zpětné přehrávání