Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym temacie opisano sposób kodowania pliku multimedialnego przy użyciu interfejsu API transkodowania.
- Podsumowanie
- Tworzenie źródła multimediów
-
tworzenie profilu transkodowania
- atrybuty dźwięku
- Atrybuty Wideo
- atrybutów kontenera
- Tworzenie Topologii Transkodowania
- Uruchamianie sesji kodowania
- Tematy pokrewne
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.
- Utwórz źródło multimediów, aby odczytać plik źródłowy.
- Utwórz profil transkodowania. Dodaj atrybuty opisujące strumień audio, strumień wideo i kontener plików.
- Użyj profilu transkodowania, aby utworzyć topologię kodowania. (Aby uzyskać więcej informacji na temat topologii, zobacz About Topologies.)
- Ustaw topologię na sesji multimedialnej .
- 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:
- Wskaźnik do interfejsu źródła multimediów IMFMediaSource.
- Nazwa pliku wyjściowego.
- Wskaźnik do interfejsu profilu transkodowania IMFTranscodeProfile.
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.
- Wywołaj MFCreateMediaSession, aby utworzyć sesję multimediów.
- Wywołaj IMFMediaSession::SetTopology, aby ustawić topologię w Media Session.
- Wywołaj IMFMediaSession::Uruchom, aby rozpocząć sesję kodowania.
- Poczekaj na zdarzenie MESessionEnded.
- Wywołaj IMFMediaSession::Zamknij, aby zamknąć sesję multimediów.
- Poczekaj na zdarzenie MESessionClosed.
- Wywołaj IMFMediaSource::Shutdown.
- Wywołaj IMFMediaSession::Shutdown.
Większość czasu spędzonego na kodowaniu odbywa się między krokami 3 i 4.
Tematy pokrewne