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ę.