Ogólne informacje o formatach multimediów znajdziesz na stronie obsługiwanych formatów ExoPlayer. W przypadku Transformer obowiązują te same ograniczenia dotyczące wczytywania, wyodrębniania i dekodowania strumieni, ale Transformer nie obsługuje dołączonych modułów dekodera oprogramowania ExoPlayer.
Transformer korzysta też z MediaCodec do kodowania, co ogranicza obsługiwane formaty wyjściowe. 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, więc 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 HDRco zapewnia żywsze i dokładniejsze kolory oraz 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. Domyślnym trybem podczas tworzenia Composition jest HDR_MODE_KEEP_HDR. 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).
Transformer obsługuje też zaawansowane scenariusze transkodowania, takie jak:
- Konwertowanie obrazów Ultra HDR na filmy HDR: możesz konwertować obrazy Ultra HDR na filmy HDR, zachowując zakres dynamiczny i szeroką gamę kolorów obrazu, dzięki czemu zdjęcia będą pasować do maksymalnej jasności i żywości filmów HDR na osiach czasu mieszanych.
- Transkodowanie i transmuksowanie Dolby Vision: Transformer obsługuje transmuksowanie warstwy podstawowej zgodnej wstecznie (np. HEVC) z multimediów Dolby Vision (profil 8) bez ponownego kodowania lub transkodowanie jej z mapowaniem tonów do standardowych formatów SDR.
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 w którym sekcje są przyspieszane lub spowalniane na podstawie metadanych, tak aby były odtwarzane prawidłowo nawet w odtwarzaczach, które nie stosują metadanych zwolnionego tempa.
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 będziesz przechowywać i odtwarzać jego spłaszczoną wersję.