Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I det här avsnittet beskrivs hur du använder omkodnings-API:et för att koda en mediefil.
- Översikt
- Skapa en mediekälla
- Skapa en Transkodningsprofil
- Skapa en transcode-topologi
- Starta kodningssessionen
- Relaterade ämnen
Överblick
Innan du använder omkodnings-API:et måste programmet ha följande information:
- Sökvägen eller URL:en till en befintlig mediefil som ska omkodas.
- Namnet på utdatafilen.
- Containertypen för utdatafilen, till exempel MP4 eller Advanced Streaming Format (ASF).
- Kodningsformatet. Den här informationen innehåller de medietyper som beskriver de kodade ljud- och videoströmmarna.
Om du vill använda api:et för omkodning utför ett program följande steg.
- Skapa en mediekälla för att läsa källfilen.
- Skapa en transcode-profil. Lägg till attribut som beskriver ljudströmmen, videoströmmen och filcontainern.
- Använd omkodningsprofilen för att skapa en kodningstopologi. (Mer information om topologier finns i Om topologier.)
- Ange topologin på Media Session.
- Starta mediasessionen och vänta på händelsen MESessionEnded.
Resten av det här avsnittet beskriver de här stegen mer detaljerat.
Skapa en mediekälla
En mediekälla är ett objekt som läser och parsar källfilen. Om du vill skapa en mediekälla använder du Source Resolver. Du hittar exempelkod i ämnet med titeln Använda källupplösare.
Skapa en transcode-profil
En omkodningsprofil beskriver formatet och inställningarna som används för att koda utdatafilen. Transcode-profilen innehåller tre uppsättningar attribut:
- Ljudattribut: Beskriv inställningarna för målljudformat och ljudkodare.
- Videoattribut: Beskriv inställningarna för målvideoformat och videokodare.
- Containerattribut: Definiera typen av filcontainer samt vissa globala kodningsinställningar.
Om du vill skapa en transkodprofil anropar du funktionen MFCreateTranscodeProfile. Den här funktionen returnerar en pekare till IMFTranscodeProfile-gränssnittet. Det inledande profilobjektet är tomt. den innehåller inga attribut. Nästa steg är att lägga till attributen som definierar profilen.
Ljudattribut
Om du vill lägga till attribut för ljudströmmen anropar du IMFTranscodeProfile::SetAudioAttributes. Dessa attribut anger hur ljudströmmen kodas. Om utdatafilen inte innehåller någon ljudström utelämnar du dessa attribut.
Ljudattribut delas in i två kategorier:
- Attribut som anger formatet för den kodade strömmen
- Attribut som anger andra kodningsparametrar.
Formatattribut är helt enkelt mediatypattribut, enligt beskrivningen i avsnittet Ljudmedietyper. Den exakta uppsättningen formatattribut beror på kodaren. (Se medieformat som stöds i Media Foundation.) Här är en lista över typiska ljudformatattribut:
| Formatattribut | Beskrivning |
|---|---|
| MF_MT_SUBTYPE | Undertypen. Se ljudundertyps-GUID:er. |
| MF_MT_AUDIO_NUM_CHANNELS | Antalet ljudkanaler. |
| MF_MT_AUDIO_SAMPLES_PER_SECOND | Antalet ljudexempel per sekund. |
| MF_MT_AUDIO_BLOCK_ALIGNMENT | Blockjusteringen. |
| MF_MT_AUDIO_AVG_BYTES_PER_SECOND | Det genomsnittliga antalet byte per sekund (den kodade bithastigheten). |
Följande kodningsparametrar definieras.
| Kodningsparameter | Beskrivning |
|---|---|
| MF_TRANSCODE_DONOT_INSERT_ENCODER | Hindrar omkodnings-API:et från att infoga en kodare för ljudströmmen. |
| MF_TRANSCODE_ENCODINGPROFILE | Specificerar enhetens överensstämmelsemall. (Gäller endast för ASF-filer.) |
| MF_TRANSCODE_QUALITYVSSPEED | Anger kompromissen mellan kodningskvalitet och hastighet. |
Du måste ange formatattributen. Kodningsparametrarna är valfria.
Ett sätt att hitta ett format som är kompatibelt med kodaren är att anropa funktionen MFTranscodeGetAudioOutputAvailableTypes. Önskad kodare specificeras genom undertyp. Funktionen returnerar en samling medietyper för kodaren. Du kan välja en typ i listan och kopiera attributen till profilen. Exempelkod som använder den här metoden finns i Självstudie: Koda en WMA-fil.
Videoattribut
Om du vill lägga till attribut för videoströmmen anropar du IMFTranscodeProfile::SetVideoAttributes. Dessa attribut anger hur videoströmmen kodas. Om utdatafilen inte innehåller någon videoström utelämnar du dessa attribut.
Precis som med ljudattribut delas videoattributen in i två kategorier:
- Attribut som anger formatet för den kodade strömmen
- Attribut som anger andra kodningsparametrar.
Formatattribut är mediatypattribut, enligt beskrivningen i avsnittet Video Media Types. Här är en lista över typiska attribut för videoformat:
| Formatattribut | Beskrivning |
|---|---|
| MF_MT_SUBTYPE | Undertypen. Se videoundertyps-GUID:er. |
| MF_MT_FRAME_RATE | Bildfrekvens. |
| MF_MT_FRAME_SIZE | Ramstorleken. |
| MF_MT_AVG_BITRATE | Genomsnittlig bithastighet. |
| MF_MT_PIXEL_ASPECT_RATIO | Bildpunktsproportionen. |
Följande kodningsparametrar definieras.
| Kodningsparameter | Beskrivning |
|---|---|
| MF_TRANSCODE_DONOT_INSERT_ENCODER | Förhindrar att kodnings-API:et infogar en kodare för videoströmmen. |
| MF_TRANSCODE_ENCODINGPROFILE | Anger mallen för enhetsöverensstämmelse. (Gäller endast för ASF-filer.) |
| MF_TRANSCODE_QUALITYVSSPEED | Anger kompromissen mellan kodningskvalitet och hastighet. |
Du måste ange formatattributen. Kodningsparametrarna är valfria.
Containerattribut
Containerattribut definierar filnivåegenskaper för utdatafilen. För att ange containerattribut anropar du IMFTranscodeProfile::SetContainerAttributes. Följande attribut definieras.
| Attribut | Beskrivning |
|---|---|
| MF_TRANSCODE_ADJUST_PROFILE | Definierar de ströminställningar som ska användas för transkodtopologin. Du kan ange flaggorna för att använda indatakällans inställningar eller använda anpassade stream-attribut. |
| MF_TRANSCODE_CONTAINERTYPE | Anger filformatet för utdatafilen, till exempel MP4 eller ASF. Baserat på det här värdet läggs lämplig mediasänk till i topologin. |
| MF_TRANSCODE_SKIP_METADATA_TRANSFER | Anger om metadata från källan kopieras till utdatafilen. |
| MF_TRANSCODE_TOPOLOGYMODE | Anger om maskinvarubaserade codecs kan användas under omkodning. |
| MFT_FIELDOFUSE_UNLOCK_Attribute | Låser upp en codec som har begränsningar för användningsfält. Mer information finns i användningsbegränsningar för fält. |
Attributet MF_TRANSCODE_CONTAINERTYPE krävs. De andra containerattributen är valfria.
Skapa en transcode-topologi
Transkodtopologin är en delvis topologi som innehåller mediekällan, lämpliga kodar och mediesänkan. Om du vill skapa transkodtopologin anropar du funktionen MFCreateTranscodeTopology. Den här funktionen använder följande parametrar som indata:
- En pekare till gränssnittet IMFMediaSource för mediekällan.
- Namnet på utdatafilen.
- En pekare till IMFTranscodeProfile gränssnittet för transkodprofilen.
Funktionen returnerar en pekare till IMFTopology-gränssnittet.
Köra enkodningssessionen
När du har skapat topologin är du redo att koda filen. Du kan ignorera profilen just nu.
- Anropa MFCreateMediaSession för att skapa mediesessionen.
- Anropa IMFMediaSession::SetTopology för att ange topologin på mediesessionen.
- Ring IMFMediaSession::Starta för att starta kodningssessionen.
- Vänta på händelsen MESessionEnded.
- Anropa IMFMediaSession::Close för att stänga mediasessionen.
- Vänta på händelsen MESessionClosed.
- Anrop IMFMediaSource::Shutdown.
- Anrop IMFMediaSession::Shutdown.
Merparten av den tid som används för kodning sker mellan steg 3 och 4.
Relaterade ämnen