Sdílet prostřednictvím


Použití rozhraní API pro transkódování

Toto téma popisuje, jak kódovat multimediální soubor pomocí rozhraní API pro transkódování.

Přehled

Před použitím rozhraní API pro transkódování musí mít aplikace následující informace:

  • Cesta nebo adresa URL existujícího multimediálního souboru, který bude znovu zakódován.
  • Název výstupního souboru.
  • Typ kontejneru pro výstupní soubor, například MP4 nebo Advanced Streaming Format (ASF).
  • Formát kódování. Tyto informace zahrnují typy médií, které popisují zakódované zvukové streamy a streamy videa.

Pokud chcete použít rozhraní API pro transkódování, aplikace provede následující kroky.

  1. Vytvořte zdroj médií pro čtení zdrojového souboru.
  2. Vytvořte profil transkódování. Přidejte atributy, které popisují zvukový stream, stream videa a kontejner souborů.
  3. K vytvoření topologie kódování použijte profil transkódování. (Další informace o topologiích najdete v tématu O topologiích.)
  4. Nastavte topologii v Media Session.
  5. Spusťte relaci médií a počkejte na událost MESessionEnded.

Zbývající část tohoto tématu popisuje tyto kroky podrobněji.

Vytvoření zdroje médií

Zdroj médií je objekt, který čte a parsuje zdrojový soubor. Chcete-li vytvořit zdroj médií, použijte řešitel zdrojů. Ukázkový kód najdete v tématu Použití překladače zdroje.

Vytvoření profilu pro transkodování

profil transkódování popisuje formát a nastavení, které se používají ke kódování výstupního souboru. Profil transkódu obsahuje tři sady atributů:

  • Atributy zvuku: Popis nastavení cílového formátu zvuku a kodéru zvuku.
  • Atributy videa: Popis nastavení cílového formátu videa a kodéru videa
  • Atributy kontejneru: Definujte typ kontejneru souborů a také některá globální nastavení kódování.

Chcete-li vytvořit profil transkódovacího, zavolejte funkci MFCreateTranscodeProfile. Tato funkce vrátí ukazatel na rozhraní MMFTranscodeProfile. Počáteční objekt profilu je prázdný; neobsahuje žádné atributy. Dalším krokem je přidání atributů, které definují profil.

Atributy zvuku

Chcete-li přidat atributy zvukového streamu, zavolejte MMFTranscodeProfile::SetAudioAttributes. Tyto atributy určují, jak je zvukový stream kódován. Pokud výstupní soubor nebude obsahovat zvukový stream, vynechejte tyto atributy.

Atributy zvuku spadají do dvou kategorií:

  • Atributy, které určují formát zakódovaného datového proudu
  • Atributy, které určují další parametry kódování.

Atributy formátu jsou jednoduše atributy typu média, jak je popsáno v části Typy zvukových médií. Přesná sada atributů formátu závisí na kodéru. (Viz podporované formáty médií v Media Foundation.) Tady je seznam typických atributů formátu zvuku:

Formát atributu Popis
MF_MT_SUBTYPE Podtyp. Viz identifikátory GUID podtypů zvuku.
MF_MT_AUDIO_NUM_CHANNELS Počet zvukových kanálů.
MF_MT_AUDIO_SAMPLES_PER_SECOND Počet zvukových vzorků za sekundu
MF_MT_AUDIO_BLOCK_ALIGNMENT Zarovnání bloku.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Průměrný počet bajtů za sekundu (zakódovaná přenosová rychlost)

 

Jsou definovány následující parametry kódování.

Parametr kódování Popis
MF_TRANSCODE_DONOT_INSERT_ENCODER Zabrání API pro transkódování ve vložení kodéru pro zvukový stream.
MF_TRANSCODE_ENCODINGPROFILE Určuje šablonu shody zařízení. (Platí jenom pro soubory ASF.)
MF_TRANSCODE_KVALITAvsRÝCHLOST Určuje kompromis mezi kvalitou kódování a rychlostí.

 

Je nutné nastavit atributy formátu. Parametry kódování jsou volitelné.

Jedním ze způsobů, jak najít formát, který je kompatibilní s kodérem, je zavolat funkci MFTranscodeGetAudioOutputAvailableTypes. Požadovaný kodér je určen podtypem. Funkce vrátí kolekci typů médií pro tento kodér. Ze seznamu můžete vybrat typ a zkopírovat atributy do profilu. Příklad kódu, který používá tento přístup, viz Kurz: Kódování souboru WMA.

Atributy videa

Chcete-li přidat atributy pro video stream, zavolejte IMFTranscodeProfile::SetVideoAttributes. Tyto atributy určují, jak se stream videa kóduje. Pokud výstupní soubor nebude obsahovat stream videa, vynechejte tyto atributy.

Stejně jako u zvukových atributů spadají atributy videa do dvou kategorií:

  • Atributy, které určují formát zakódovaného datového proudu
  • Atributy, které určují další parametry kódování.

Atributy formátu jsou atributy typu média, jak je popsáno v části Typy médií videa. Tady je seznam typických atributů formátu videa:

Formát atributu Popis
MF_MT_SUBTYPE Podtyp. Viz identifikátory GUID podtypu videa.
MF_MT_FRAME_RATE Frekvence snímků.
MF_MT_FRAME_SIZE Rozměr rámu.
MF_MT_AVG_BITRATE Průměrná přenosová rychlost.
MF_MT_PIXEL_ASPECT_RATIO Poměr stran v pixelech.

 

Jsou definovány následující parametry kódování.

Parametr kódování Popis
MF_TRANSCODE_DONOT_INSERT_ENCODER Zabrání rozhraní API pro transkódování v vložení kodéru pro datový proud videa.
MF_TRANSCODE_ENCODINGPROFILE Určuje šablonu shody zařízení. (Platí jenom pro soubory ASF.)
MF_TRANSCODE_QUALITYVSSPEED Určuje kompromis mezi kvalitou kódování a rychlostí.

 

Je nutné nastavit atributy formátu. Parametry kódování jsou volitelné.

Atributy kontejneru

Atributy kontejneru definují vlastnosti na úrovni souboru výstupního souboru. Chcete-li nastavit atributy kontejneru, zavolejte IMFTranscodeProfile::SetContainerAttributes. Jsou definovány následující atributy.

Atribut Popis
MF_TRANSCODE_ADJUST_PROFILE Definuje nastavení datového proudu, která se mají použít pro topologii transkódu. Příznaky můžete nastavit tak, aby používaly nastavení vstupního zdroje nebo používaly vlastní atributy datového proudu.
MF_TRANSCODE_CONTAINERTYPE Určuje formát souboru výstupního souboru, například MP4 nebo ASF. Na základě této hodnoty se do topologie přidá příslušná jímka médií.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Určuje, jestli se metadata ze zdroje zkopírují do výstupního souboru.
MF_TRANSCODE_TOPOLOGYMODE Určuje, jestli se při překódování můžou používat hardwarové kodeky.
MFT_FIELDOFUSE_UNLOCK_Attribute Odemkne kodek, který má omezení použití v terénu. Další informace naleznete v tématu Pole omezení použití.

 

Je vyžadován atribut MF_TRANSCODE_CONTAINERTYPE. Ostatní atributy kontejneru jsou volitelné.

Vytvoření topologie transkódu

Topologie transkódu je částečná topologie, která obsahuje zdroj médií, příslušné kodeky a jímku médií. Chcete-li vytvořit topologii transkódu, zavolejte funkci MFCreateTranscodeTopology. Tato funkce přebírá jako vstup následující parametry:

Funkce vrátí ukazatel na rozhraní IMFTopology.

Spuštění relace kódování

Po vytvoření topologie budete připraveni soubor zakódovat. V tuto chvíli můžete profil zahodit.

  1. Chcete-li vytvořit relaci médií, použijte volání MFCreateMediaSession.
  2. Zavolejte IMFMediaSession::SetTopology k nastavení topologie na relaci médií.
  3. Zavolejte IMFMediaSession::Start pro zahájení relace kódování.
  4. Počkejte na událost MESessionEnded.
  5. Zavolejte IMFMediaSession::Close pro uzavření relace médií.
  6. Počkejte na událost MESessionClosed.
  7. Volání MMFMediaSource::Vypnutí.
  8. Volání MMFMediaSession::Vypnutí.

Většinu času stráveného kódováním probíhá mezi kroky 3 a 4.

rozhraní API pro transkódování

O mediální relaci