Obsługiwane formaty

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.