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
- Vytvoření zdroje médií
- Vytvoření transkódovacího profilu
- Vytvoření topologie transkódování
- Zahájení relace kódování
- související témata
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.
- Vytvořte zdroj médií pro čtení zdrojového souboru.
- Vytvořte profil transkódování. Přidejte atributy, které popisují zvukový stream, stream videa a kontejner souborů.
- 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.)
- Nastavte topologii v Media Session.
- 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:
- Ukazatel na rozhraní IMFMediaSource zdroje médií.
- Název výstupního souboru.
- Ukazatel na IMFTranscodeProfile rozhraní profilu transkódu.
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.
- Chcete-li vytvořit relaci médií, použijte volání MFCreateMediaSession.
- Zavolejte IMFMediaSession::SetTopology k nastavení topologie na relaci médií.
- Zavolejte IMFMediaSession::Start pro zahájení relace kódování.
- Počkejte na událost MESessionEnded.
- Zavolejte IMFMediaSession::Close pro uzavření relace médií.
- Počkejte na událost MESessionClosed.
- Volání MMFMediaSource::Vypnutí.
- Volání MMFMediaSession::Vypnutí.
Většinu času stráveného kódováním probíhá mezi kroky 3 a 4.
Související témata