Udostępnij przez


Korzystanie z API transcode

W tym temacie opisano sposób kodowania pliku multimedialnego przy użyciu interfejsu API transkodowania.

Przegląd

Przed użyciem interfejsu API do transkodowania aplikacja musi mieć następujące informacje:

  • Ścieżka lub adres URL istniejącego pliku multimedialnego, który zostanie ponownie zakodowany.
  • Nazwa pliku wyjściowego.
  • Typ kontenera dla pliku wyjściowego, taki jak MP4 lub Advanced Streaming Format (ASF).
  • Format kodowania. Te informacje obejmują typy multimediów opisujące zakodowane strumienie audio i wideo.

Aby użyć interfejsu API transkodowania, aplikacja wykonuje następujące kroki.

  1. Utwórz źródło multimediów, aby odczytać plik źródłowy.
  2. Utwórz profil transkodowania. Dodaj atrybuty opisujące strumień audio, strumień wideo i kontener plików.
  3. Użyj profilu transkodowania, aby utworzyć topologię kodowania. (Aby uzyskać więcej informacji na temat topologii, zobacz About Topologies.)
  4. Ustaw topologię na sesji multimedialnej .
  5. Uruchom sesję multimedialną i poczekaj na zdarzenie MESessionEnded.

W pozostałej części tego tematu opisano te kroki bardziej szczegółowo.

Tworzenie źródła multimediów

Źródło multimediów to obiekt, który odczytuje i analizuje plik źródłowy. Aby utworzyć źródło multimediów, użyj narzędzia Source Resolver. Przykładowy kod można znaleźć w temacie Using the Source Resolver.

Tworzenie profilu transkodowania

Profil transkodowania opisuje format i ustawienia używane do kodowania pliku wyjściowego. Profil transkodowania zawiera trzy zestawy atrybutów:

  • Atrybuty audio: opis ustawień docelowego formatu audio i kodera audio.
  • Atrybuty wideo: opisz docelowy format wideo i ustawienia kodera wideo.
  • Atrybuty kontenera: zdefiniuj typ kontenera plików, a także niektóre globalne ustawienia kodowania.

Aby utworzyć profil transkodowania, wywołaj funkcję MFCreateTranscodeProfile. Ta funkcja zwraca wskaźnik do interfejsuIMFTranscodeProfile. Początkowy obiekt profilu jest pusty; nie zawiera atrybutów. Następnym krokiem jest dodanie atrybutów definiujących profil.

Atrybuty dźwięku

Aby dodać atrybuty strumienia audio, wywołaj metodę IMFTranscodeProfile::SetAudioAttributes. Te atrybuty określają sposób kodowania strumienia audio. Jeśli plik wyjściowy nie będzie zawierać strumienia audio, pomiń te atrybuty.

Atrybuty audio dzielą się na dwie kategorie:

  • Atrybuty określające format zakodowanego strumienia
  • Atrybuty określające inne parametry kodowania.

Atrybuty formatu to po prostu atrybuty typu nośnika, zgodnie z opisem w sekcji Typy multimediów audio. Dokładny zestaw atrybutów formatu zależy od kodera. (Zobacz obsługiwane formaty multimediów w programie Media Foundation.) Oto lista typowych atrybutów formatu audio:

Format atrybutu Opis
MF_MT_SUBTYPE Podtyp. Zobacz identyfikatory GUID dla podtypów audio .
MF_MT_AUDIO_NUM_CHANNELS Liczba kanałów audio.
MF_MT_AUDIO_SAMPLES_PER_SECOND Liczba próbek dźwiękowych na sekundę.
MF_MT_AUDIO_BLOCK_ALIGNMENT Wyrównanie bloku.
MF_MT_AUDIO_AVG_BYTES_PER_SECOND Średnia liczba bajtów na sekundę (zakodowana szybkość bitów).

 

Zdefiniowano następujące parametry kodowania.

Parametr kodowania Opis
MF_TRANSCODE_DONOT_INSERT_ENCODER Uniemożliwia interfejsowi API transkodowania wstawienie kodera dla strumienia audio.
MF_TRANSCODE_ENCODINGPROFILE Określa szablon zgodności urządzenia. (Dotyczy tylko plików ASF).
JAKOŚĆ VS PRĘDKOŚĆ TRANSCODINGU Określa kompromis między jakością kodowania a szybkością.

 

Należy ustawić atrybuty formatu. Parametry kodowania są opcjonalne.

Jednym ze sposobów znalezienia formatu zgodnego z koderem jest wywołanie funkcji MFTranscodeGetAudioOutputAvailableTypes. Żądany enkoder jest określany przez podtyp. Funkcja zwraca kolekcję typów multimediów dla tego kodera. Możesz wybrać typ z listy i skopiować atrybuty do profilu. Zobacz przykładowy kod, który korzysta z tego podejścia, w Tutorial: Encoding a WMA File.

Atrybuty wideo

Aby dodać atrybuty strumienia wideo, wywołaj funkcję IMFTranscodeProfile::SetVideoAttributes. Te atrybuty określają sposób kodowania strumienia wideo. Jeśli plik wyjściowy nie będzie zawierać strumienia wideo, pomiń te atrybuty.

Podobnie jak w przypadku atrybutów dźwięku, atrybuty wideo należą do dwóch kategorii:

  • Atrybuty określające format zakodowanego strumienia
  • Atrybuty określające inne parametry kodowania.

Atrybuty formatu to atrybuty typu nośnika, zgodnie z opisem w sekcji Typy multimediów wideo. Oto lista typowych atrybutów formatu wideo:

Format atrybutu Opis
MF_MT_SUBTYPE Podtyp. Zobacz identyfikatory podtypu wideo GUID .
MF_MT_FRAME_RATE Szybkość klatek.
MF_MT_FRAME_SIZE Rozmiar ramki.
MF_MT_AVG_BITRATE Średnia szybkość bitów.
MF_MT_PIXEL_ASPECT_RATIO Współczynnik proporcji pikseli.

 

Zdefiniowano następujące parametry kodowania.

Parametr kodowania Opis
MF_TRANSCODE_DONOT_INSERT_ENCODER Zapobiega wstawieniu kodera dla strumienia wideo przez interfejs API transkodowania.
MF_TRANSCODE_ENCODINGPROFILE Określa szablon zgodności urządzenia. (Dotyczy tylko plików ASF).
MF_TRANSCODE_QUALITYVSSPEED Określa kompromis między jakością kodowania a szybkością.

 

Należy ustawić atrybuty formatu. Parametry kodowania są opcjonalne.

Atrybuty kontenera

Atrybuty kontenera definiują charakterystykę pliku wyjściowego. Aby ustawić atrybuty kontenera, wywołaj IMFTranscodeProfile::SetContainerAttributes. Zdefiniowane są następujące atrybuty.

Atrybut Opis
MF_TRANSCODE_ADJUST_PROFILE Definiuje ustawienia strumienia do użycia dla topologii transkodowania. Flagi można ustawić tak, aby korzystały z ustawień źródła danych wejściowych lub używać niestandardowych atrybutów strumienia.
MF_TRANSCODE_CONTAINERTYPE Określa format pliku wyjściowego, taki jak MP4 lub ASF. Na podstawie tej wartości odpowiedni element wyjściowy multimediów jest dodawany do topologii.
MF_TRANSCODE_SKIP_METADATA_TRANSFER Określa, czy metadane ze źródła są kopiowane do pliku wyjściowego.
MF_TRANSCODE_TOPOLOGYMODE Określa, czy kodeki oparte na sprzęcie mogą być używane podczas transkodowania.
MFT_FIELDOFUSE_UNLOCK_Attribute Odblokowuje koder, który ma ograniczenia dotyczące pola użycia. Aby uzyskać więcej informacji, zobacz ograniczenia pola użycia.

 

Wymagany jest atrybut MF_TRANSCODE_CONTAINERTYPE. Inne atrybuty kontenera są opcjonalne.

Tworzenie topologii transkodowania

Topologia transkodowania jest topologią częściową, która zawiera źródło multimediów, odpowiednie koderki i ujście multimediów. Aby utworzyć topologię transkodowania, wywołaj funkcjęMFCreateTranscodeTopology. Ta funkcja przyjmuje następujące parametry jako dane wejściowe:

Funkcja zwraca wskaźnik do interfejsu IMFTopology.

Uruchamianie sesji kodowania

Po utworzeniu topologii możesz przystąpić do kodowania pliku. W tym momencie możesz odrzucić profil.

  1. Wywołaj MFCreateMediaSession, aby utworzyć sesję multimediów.
  2. Wywołaj IMFMediaSession::SetTopology, aby ustawić topologię w Media Session.
  3. Wywołaj IMFMediaSession::Uruchom, aby rozpocząć sesję kodowania.
  4. Poczekaj na zdarzenie MESessionEnded.
  5. Wywołaj IMFMediaSession::Zamknij, aby zamknąć sesję multimediów.
  6. Poczekaj na zdarzenie MESessionClosed.
  7. Wywołaj IMFMediaSource::Shutdown.
  8. Wywołaj IMFMediaSession::Shutdown.

Większość czasu spędzonego na kodowaniu odbywa się między krokami 3 i 4.

API transkodowania

Informacje o sesji multimediów