Megosztás a következőn keresztül:


A Transcode API használata

Ez a témakör azt ismertette, hogyan kódolhat médiafájlokat a transcode API használatával.

Áttekintés

A transcode API használata előtt az alkalmazásnak a következő információkkal kell rendelkeznie:

  • Egy újrakódolt meglévő médiafájl elérési útja vagy URL-címe.
  • A kimeneti fájl neve.
  • A kimeneti fájl tárolótípusa, például MP4 vagy Advanced Streaming Format (ASF).
  • A kódolási formátum. Ezek az információk tartalmazzák a kódolt hang- és videostreameket leíró médiatípusokat.

A transcode API használatához egy alkalmazás végrehajtja a következő lépéseket.

  1. Hozzon létre egy médiaforrást a forrásfájl olvasásához.
  2. Hozzon létre egy transzkódprofilt. Adjon hozzá a hangstreamet, a videostreamet és a fájltárolót leíró attribútumokat.
  3. Kódolási topológia létrehozásához használja a transzkódprofilt. (További információ a topológiákról: About Topologies.)
  4. Állítsa be a media sessiontopológiát.
  5. Indítsa el a media session-t, és várja meg a MESessionEnded eseményt.

A témakör többi része részletesebben ismerteti ezeket a lépéseket.

Médiaforrás létrehozása

A médiaforrás olyan objektum, amely beolvassa és elemzi a forrásfájlt. Médiaforrás létrehozásához használja a Forrásmegoldó. A forrásfeloldó használatávaltémakörben talál példakódot.

Transcode-profil létrehozása

A transzkódprofil ismerteti a kimeneti fájl kódolásához használt formátumot és beállításokat. A transzkódprofil három attribútumkészletet tartalmaz:

  • Hangattribútumok: A cél hangformátum és a hangkódoló beállításainak leírása.
  • Videoattribútumok: A cél videóformátum és a videokódoló beállításainak leírása.
  • Tárolóattribútumok: Definiálja a fájltároló típusát, valamint néhány globális kódolási beállítást.

Transzkódprofil létrehozásához hívja meg a MFCreateTranscodeProfile függvényt. Ez a függvény a IMFTranscodeProfile felületére mutató mutatót ad vissza. A kezdeti profilobjektum üres; nem tartalmaz attribútumokat. A következő lépés a profilt meghatározó attribútumok hozzáadása.

Hangattribútumok

A hangstream attribútumainak hozzáadásához hívja meg IMFTranscodeProfile::SetAudioAttributes. Ezek az attribútumok határozzák meg a hangstream kódolását. Ha a kimeneti fájl nem tartalmaz hangstreamet, hagyja ki ezeket az attribútumokat.

A hangattribútumok két kategóriába sorolhatók:

  • A kódolt stream formátumát meghatározó attribútumok
  • Más kódolási paramétereket meghatározó attribútumok.

A formátumattribútumok egyszerűen média típusú attribútumok, a Hanghordozó-típusokcímű szakaszban leírtak szerint. A formátumattribútumok pontos készlete a kódolótól függ. (Lásd: Media Foundationtámogatott médiaformátumai.) Íme a tipikus hangformátum-attribútumok listája:

Attribútum formátuma Leírás
MF_MT_SUBTYPE Az altípus. Lásd Audio altípusú GUID-ok.
MF_MT_AUDIO_CHANNELS_SZÁMA A hangcsatornák száma.
MF_MT_AUDIO_SAMPLES_PER_SECOND A hangminták száma másodpercenként.
MF_MT_AUDIO_BLOCK_ALIGNMENT A blokk igazítása.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND A másodpercenkénti bájtok átlagos száma (a kódolt bitsebesség).

 

A következő kódolási paraméterek vannak definiálva.

Kódolási paraméter Leírás
MF_TRANSCODE_DONOT_INSERT_ENCODER Megakadályozza, hogy a transcode API kódolót szúrjon be a hangstreamhez.
MF_TRANSCODE_ENCODINGPROFILE Megadja az eszközmegfelelőségi sablont. (Csak az ASF-fájlokra vonatkozik.)
MF_TRANSCODE_QUALITYVSSPEED Megadja a kódolás minősége és sebessége közötti kompromisszumot.

 

Meg kell adnia a formátumattribútumokat. A kódolási paraméterek megadása nem kötelező.

A kódolóval kompatibilis formátum megkeresésének egyik módja az MFTranscodeGetAudioOutputAvailableTypes függvény meghívása. A kívánt kódolót altípus határozza meg. A függvény a kódolóhoz tartozó médiatípusok gyűjteményét adja vissza. Kiválaszthat egy típust a listából, és átmásolhatja az attribútumokat a profilba. Például az ezt a megközelítést használó kód, lásd oktatóanyagot: WMA-fájl kódolása.

Videoattribútumok

A videóstream attribútumainak hozzáadásához hívja meg IMFTranscodeProfile::SetVideoAttributes. Ezek az attribútumok határozzák meg a videostream kódolását. Ha a kimeneti fájl nem tartalmaz videostreamet, hagyja ki ezeket az attribútumokat.

A hangattribútumokhoz hasonlóan a videoattribútumok két kategóriába sorolhatók:

  • A kódolt stream formátumát meghatározó attribútumok
  • Más kódolási paramétereket meghatározó attribútumok.

A formátumattribútumok média típusú attribútumok, a Video médiatípusokcímű szakaszban leírtak szerint. Az alábbi lista a tipikus videoformátum-attribútumokat tartalmazza:

Attribútum formázása Leírás
MF_MT_SUBTYPE Az altípus. Lásd: Videó altípus GUID-ek.
MF_MT_FRAME_RATE A képkockasebesség.
MF_MT_FRAME_SIZE A keret mérete.
MF_MT_AVG_BITRATE Az átlagos bitsebesség.
MF_MT_PIXEL_ASPECT_RATIO A képpont méretaránya.

 

A következő kódolási paraméterek vannak definiálva.

Kódolási paraméter Leírás
MF_TRANSCODE_DONOT_INSERT_ENCODER Megakadályozza, hogy a transcode API kódolót szúrjon be a videóstreamhez.
MF_TRANSCODE_ENCODINGPROFILE Megadja az eszközkonformitási sablont. (Csak az ASF-fájlokra vonatkozik.)
MF_TRANSCODE_QUALITYVSSPEED Megadja a kódolás minősége és sebessége közötti kompromisszumot.

 

Meg kell adnia a formátumattribútumokat. A kódolási paraméterek megadása nem kötelező.

Tárolóattribútumok

A tárolóattribútumok a kimeneti fájl fájlszintű jellemzőit határozzák meg. A tárolóattribútumok beállításához hívja meg IMFTranscodeProfile::SetContainerAttributes. A következő attribútumok vannak definiálva.

Attribútum Leírás
MF_TRANSCODE_ADJUST_PROFILE Meghatározza a transzkódtopológiához használandó streambeállításokat. Beállíthatja a jelzőket a bemeneti forrás beállításainak használatára, vagy egyéni streamattribútumok használatára.
MF_TRANSCODE_CONTAINERTYPE A kimeneti fájl fájlformátumát adja meg, például MP4 vagy ASF. Ezen érték alapján a rendszer hozzáadja a megfelelő adathordozó-fogadót a topológiához.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Megadja, hogy a forrásból származó metaadatok át lesznek-e másolva a kimeneti fájlba.
MF_TRANSCODE_TOPOLOGYMODE Megadja, hogy hardveralapú kodekek használhatók-e az átkódolás során.
MFT_FIELDOFUSE_UNLOCK_Attribute Felold egy olyan kodek zárolását, amely használati korlátozásokkal rendelkezik. További információ: Használati korlátozások.

 

A MF_TRANSCODE_CONTAINERTYPE attribútum megadása kötelező. A többi tárolóattribútum nem kötelező.

Transcode-topológia létrehozása

A transzkódoló topológia egy részleges topológia, amely tartalmazza a médiaforrást, a megfelelő kodekeket és a médiacélt. A transzkódtopológia létrehozásához hívja meg az MFCreateTranscodeTopology függvényt. Ez a függvény a következő paramétereket veszi bemenetként:

  • Egy mutató a médiaforrás IMFMediaSource felületére.
  • A kimeneti fájl neve.
  • Mutató az IMFTranscodeProfile transzkódprofil interfészére.

A függvény egy mutatót ad vissza az IMFTopology felületére.

A kódolási munkamenet futtatása

A topológia létrehozása után készen áll a fájl kódolására. Ezen a ponton elvetheti a profilt.

  1. Hívja meg MFCreateMediaSession a media session létrehozásához.
  2. A IMFMediaSession::SetTopology hívásával állítsa be a topológiát a Média munkamenetben.
  3. Hívja meg IMFMediaSession::Start a kódolási munkamenet elindításához.
  4. Várja meg a MESessionEnded eseményt.
  5. Hívja meg IMFMediaSession::Close a média munkamenet bezárásához.
  6. Várja meg a MESessionClosed eseményt.
  7. Hívás IMFMediaSource::Shutdown.
  8. Hívás IMFMediaSession::Shutdown.

A kódolással töltött idő nagy része a 3. és a 4. lépés között történik.

Transcode API-

A médiaülésről