Obsługiwane formaty

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

Do kodowania Transformer korzysta też z MediaCodec, co ogranicza obsługiwane formaty wyjściowe. Więcej informacji o ograniczeniach kodowania znajdziesz w artykule Kodeki wideo MediaCodec.

Domyślnie Transformer eksportuje standardowe pliki MP4 za pomocą InAppMp4Muxer. Jeśli aplikacja wymaga fragmentowanego formatu MP4, podczas inicjowania instancji Transformer możesz przekazać parametr InAppFragmentedMp4Muxer.Factory. Media3 obsługuje też inne formaty, takie jak WebM, AAC i Ogg, przy użyciu dedykowanych multiplekserów, np. WebmMuxer, AacMuxerOggMuxer. Aby można było je wstawić, muszą być zawarte w niestandardowym tagu Muxer.Factory, ale przyszłe wersje będą zawierać gotowe implementacje fabryczne, które uproszczą ten proces.

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