Dela via


Använda API:et Transcode

I det här avsnittet beskrivs hur du använder omkodnings-API:et för att koda en mediefil.

Ö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.

  1. Skapa en mediekälla för att läsa källfilen.
  2. Skapa en transcode-profil. Lägg till attribut som beskriver ljudströmmen, videoströmmen och filcontainern.
  3. Använd omkodningsprofilen för att skapa en kodningstopologi. (Mer information om topologier finns i Om topologier.)
  4. Ange topologin på Media Session.
  5. 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:

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.

  1. Anropa MFCreateMediaSession för att skapa mediesessionen.
  2. Anropa IMFMediaSession::SetTopology för att ange topologin på mediesessionen.
  3. Ring IMFMediaSession::Starta för att starta kodningssessionen.
  4. Vänta på händelsen MESessionEnded.
  5. Anropa IMFMediaSession::Close för att stänga mediasessionen.
  6. Vänta på händelsen MESessionClosed.
  7. Anrop IMFMediaSource::Shutdown.
  8. Anrop IMFMediaSession::Shutdown.

Merparten av den tid som används för kodning sker mellan steg 3 och 4.

Transkoda API

Om mediasessionens