Na stronie obsługiwanych formatów ExoPlayer znajdziesz ogólne wprowadzenie do formatów multimediów. W przypadku Transformera obowiązują te same ograniczenia w zakresie wczytywania, wyodrębniania i dekodowania strumieni. Transformer nie obsługuje jednak dołączonych modułów dekodera oprogramowania ExoPlayer.
Transformer korzysta też z komponentu MediaCodec
do kodowania. Musi też korzystać z multipleksu (mix) wyjściowego pliku multimedialnego, co ogranicza obsługiwane formaty wyjściowe. Więcej informacji o ograniczeniach kodowania znajdziesz na stronie Kodeki wideo MediaCodec, a o ograniczeniach dotyczących wyjściowego kontenera multimediów (MediaMuxer). Transformer na wyjściu
tylko pliki MP4.
Domyślnie Transformer
używa parametru MediaMuxer
, ale opcjonalnie dostępny jest projekt InAppMuxer
w toku, aby uniknąć niektórych ograniczeń MediaMuxer
dotyczących struktur ramek i obsługiwanych przykładowych formatów. W przyszłej wersji domyślny procesor zmieni się w modyfikator w aplikacji.
Obsługa obrazu
Transformer wykorzystuje BitmapFactory
do wczytywania i dekodowania wszystkich zasobów graficznych, więc obsługuje wszystkie formaty dostępne w BitmapFactory. Informacje o obsługiwanych typach obrazów znajdziesz w sekcji Obsługa obrazów. W przypadku formatów wielu obrazów (np. GIF-ów) wyświetlana jest jedna ramka obrazu z kontenera, jeśli używany jest DefaultAssetLoaderFactory
.
Specjalne formaty
Transformer obsługuje dane wejściowe w nowszych formatach multimediów, które mają specjalne funkcje w porównaniu do konwencjonalnych formatów.
Obsługa filmów HDR
Coraz więcej urządzeń obsługuje teraz nagrywanie filmów w trybie HDR, co zapewnia żywsze i dokładniejsze kolory oraz szerszy zakres jasności.
Transformer obsługuje edytowanie filmów HDR już od Androida 13 (poziom interfejsu API 33) i na urządzeniach z wymaganą obsługą kodowania. Podczas edytowania filmów HDR wszystkie efekty wideo GL muszą obsługiwać 16-bitowe zmiennoprzecinkowe komponenty kolorów i przestrzeń kolorów BT.2020. HDR_MODE_KEEP_HDR
jest trybem domyślnym podczas tworzenia Composition
. Jeśli edycja HDR nie jest obsługiwana, Transformer powraca do trybu HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL
.
Konwertowanie HDR na SDR, nazywane też mapowaniem tonów, jest obsługiwane na urządzeniach z Androidem 10 (poziom interfejsu API 29) i nowszym na urządzeniach z wymaganym dekodowaniem i obsługą OpenGL. Jest to przydatne podczas udostępniania multimediów HDR innym aplikacjom lub usługom, które nie obsługują przetwarzania treści HDR. Aby włączyć mapowanie tonów za pomocą wywołania OpenGL, setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
podczas tworzenia obiektu Composition
. Od Androida 12 (poziom interfejsu API 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 umożliwiają nagrywanie filmów w jakości HDR. Aby włączyć mapowanie tonów za pomocą funkcji 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, które określają szybkość, z jaką mają być odtwarzane poszczególne sekcje strumienia. Flattening to proces tworzenia nowego strumienia wideo na podstawie filmu w zwolnionym tempie, w którym na podstawie metadanych treści są przyspieszane lub zwalniane, dzięki czemu odtwarzają się one poprawnie nawet w odtwarzaczach bez metadanych z zwolnionym czasem.
Aby rozłożyć w ten sposób strumienie w zwolnionym tempie, użyj metody konstruktora setFlattenForSlowMotion
w tabeli 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 wyświetlać filmy w zwolnionym tempie bez obaw o obsługę tych specjalnych formatów. Wystarczy, że zapiszesz i odtworzysz spłaszczoną wersję filmu zamiast oryginału.