Więcej informacji o formatach multimediów znajdziesz na stronie Obsługiwane formaty w ExoPlayerze. W Transformerze obowiązują te same ograniczenia dotyczące wczytywania, wyodrębniania i dekodowania strumieni, ale Transformer nie obsługuje dołączonych modułów dekodera oprogramowania ExoPlayera.
Transformer korzysta też z MediaCodec do kodowania, co ogranicza liczbę obsługiwanych formatów wyjściowych. Więcej informacji o ograniczeniach kodowania znajdziesz w artykule Kodeki wideo MediaCodec.
Domyślnie Transformer tworzy standardowe pliki MP4 za pomocą
InAppMp4Muxer. Jeśli Twoja aplikacja wymaga fragmentowanego formatu MP4, możesz przekazać InAppFragmentedMp4Muxer.Factory podczas inicjowania instancji Transformer. Media3 obsługuje też inne formaty
takie jak WebM, AAC, Ogg i WAV, za pomocą dedykowanych multiplekserów, np.
WebmMuxer, AacMuxer, OggMuxer i
WavMuxer. Aby można było je wstrzyknąć, muszą być opakowane w niestandardowy
Muxer.Factory, ale przyszłe wersje będą
zawierać gotowe do użycia implementacje fabryczne, które uproszczą ten proces.
Obsługa obrazów
Transformer używa BitmapFactory do wczytywania i dekodowania wszystkich zasobów graficznych, dlatego obsługuje wszystkie formaty obsługiwane przez BitmapFactory. Obsługiwane typy obrazów znajdziesz w artykule
Obsługa obrazów. W przypadku formatów wieloobrazkowych (np. GIF-ów) wyświetlany jest pojedynczy kadr obrazu z kontenera, jeśli używany jest DefaultAssetLoaderFactory.
Formaty specjalne
Transformer obsługuje dane wejściowe w nowszych formatach multimediów, które oferują specjalne funkcje w porównaniu z formatami konwencjonalnymi.
Obsługa filmów HDR
Coraz więcej urządzeń obsługuje nagrywanie filmów HDR co zapewnia żywsze, dokładniejsze kolory i większy zakres jasności.
Transformer obsługuje edytowanie filmów HDR na urządzeniach z Androidem 13 (API na poziomie 33) lub nowszym, które mają wymaganą obsługę kodowania. Podczas edytowania filmów HDR wszystkie efekty wideo GL muszą obsługiwać 16-bitowe komponenty kolorów zmiennoprzecinkowych i przestrzeń kolorów BT.2020. HDR_MODE_KEEP_HDR to domyślny tryb podczas tworzenia Composition. Jeśli edytowanie HDR nie jest obsługiwane, Transformer wraca do używania HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
Konwertowanie HDR na SDR, znane też jako mapowanie tonów, jest obsługiwane na urządzeniach z Androidem
10 (API na poziomie 29) lub nowszym, które mają wymaganą obsługę dekodowania i OpenGL
support. Jest to przydatne, gdy udostępniasz multimedia HDR innym aplikacjom lub usługom, które nie obsługują wczytywania treści HDR. Aby włączyć mapowanie tonów za pomocą OpenGL, podczas tworzenia Composition wywołaj setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL). Od Androida 12 (API na poziomie 31) MediaCodec obsługuje też mapowanie tonów na niektórych urządzeniach, w tym na wszystkich urządzeniach z Androidem 13 lub nowszym, które mogą nagrywać filmy HDR. Aby włączyć mapowanie tonów za pomocą MediaCodec, wywołaj setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Obsługa multimediów w zwolnionym tempie
Filmy w zwolnionym tempie zawierają metadane wskazujące prędkość, z jaką powinna być odtwarzana każda sekcja strumienia. Spłaszczanie to proces tworzenia nowego strumienia wideo na podstawie filmu w zwolnionym tempie, ale z przyspieszonymi lub spowolnionymi sekcjami na podstawie metadanych, dzięki czemu są one odtwarzane prawidłowo nawet w odtwarzaczach, które nie stosują metadanych w zwolnionym tempie.
Aby spłaszczyć strumienie w zwolnionym tempie, użyj metody konstruktora setFlattenForSlowMotion w EditedMediaItem.
Kotlin
val editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build() val transformer = Transformer.Builder(context).addListener(transformerListener).build() transformer.start(editedMediaItem, outputPath)
Java
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build(); Transformer transformer = new Transformer.Builder(context).addListener(transformerListener).build(); transformer.start(editedMediaItem, outputPath);
Dzięki temu możesz obsługiwać filmy w zwolnionym tempie bez konieczności obsługi tych specjalnych formatów. Wystarczy, że zamiast oryginalnej wersji filmu zapiszesz i odtworzysz jego spłaszczoną wersję.