Obsługiwane formaty

Wprowadzenie do formatów multimediów znajdziesz na stronie z obsługiwanymi formatami ExoPlayera. W przypadku transformera obowiązują te same ograniczenia dotyczące wczytywania, wyodrębniania i dekodowania strumieni, ale nie obsługuje on dołączonych modułów dekodera oprogramowania ExoPlayera.

Transkoder korzysta też z MediaCodec do kodowania i musi multipleksować, czyli muxować, wyjściowe pliki multimedialne, co ogranicza obsługiwane formaty wyjściowe. Więcej informacji o ograniczeniach kodowania znajdziesz w artykule Kodeki wideo MediaCodec, a o ograniczeniach dotyczących kontenera multimediów wyjściowych – w artykule MediaMuxer. Transformer generuje tylko pliki MP4.

Domyślnie Transformer używa MediaMuxer, ale opcjonalnie dostępna jest wersja InAppMuxer, która pozwala uniknąć niektórych ograniczeń MediaMuxer związanych ze strukturami ram odniesienia i obsługiwanymi formatami próbek. W przyszłej wersji domyślny multiplekser stanie się multiplekserem w aplikacji.

Obsługa obrazów

Transformer używa BitmapFactory do wczytywania i dekodowania wszystkich komponentów z obrazem, więc obsługuje wszystkie formaty, które obsługuje BitmapFactory. Więcej informacji o obsługiwanych typach obrazów znajdziesz w sekcji Obsługa obrazów. W przypadku formatów wieloobrazkowych (np. GIF-ów) wyświetlany jest pojedynczy kadr z kontenera, jeśli używany jest element DefaultAssetLoaderFactory.

Formaty specjalne

Transformer obsługuje dane wejściowe w nowszych formatach multimediów, które w porównaniu z formatami tradycyjnymi oferują specjalne funkcje.

Praca z filmami HDR

Coraz więcej urządzeń obsługuje nagrywanie filmów w HDR, co 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 (poziom API 33) lub nowszym, które mają odpowiednią 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 edycja HDR nie jest obsługiwana, Transformer wraca do używania HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

Konwersja HDR na SDR, zwana też mapowaniem odcieni, jest obsługiwana od Androida 10 (poziom interfejsu API 29) na urządzeniach z wymaganą obsługą dekodowania i OpenGL. Jest to przydatne podczas udostępniania multimediów HDR innym aplikacjom lub usługom, które nie obsługują treści HDR. Aby włączyć mapowanie tonalne za pomocą wywołania OpenGL setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) podczas tworzenia Composition. Od Androida 12 (API na poziomie 31) MediaCodecobsł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 tonalne, użyj wywołania MediaCodec 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 szybkość, z jaką należy odtwarzać poszczególne sekcje strumienia. Spłaszczanie to proces tworzenia nowego strumienia wideo na podstawie filmu w zwolnionym tempie, w którym sekcje są przyspieszane lub zwalniane na podstawie metadanych, tak aby odtwarzały się prawidłowo nawet na odtwarzaczach, które nie stosują metadanych zwolnionego tempa.

Aby spłaszczyć strumienie w zwolnionym tempie, użyj metody setFlattenForSlowMotion builder w przypadku 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 martwienia się o obsługę tych specjalnych formatów. Wystarczy, że zamiast oryginalnej wersji filmu będziesz przechowywać i odtwarzać jego spłaszczoną wersję.