Per un'introduzione generale ai formati multimediali, consulta la pagina Formati supportati di ExoPlayer. Con Transformer si applicano le stesse limitazioni al caricamento, all'estrazione e alla decodifica degli stream, anche se Transformer non supporta i moduli del decoder software in bundle di ExoPlayer.
Transformer si basa anche su MediaCodec per la codifica, il che limita i formati di output supportati. Per saperne di più sulle limitazioni della codifica, consulta la pagina Codec video MediaCodec.
Per impostazione predefinita, Transformer genera file MP4 standard utilizzando
InAppMp4Muxer. Se la tua app richiede MP4 frammentato, puoi passare un
InAppFragmentedMp4Muxer.Factory durante
l'inizializzazione dell'istanza di Transformer. Media3 supporta anche altri formati
come WebM, AAC, Ogg e WAV utilizzando muxer dedicati come
WebmMuxer, AacMuxer, OggMuxer e
WavMuxer. Questi devono essere racchiusi in un
Muxer.Factory personalizzato per essere inseriti, ma le versioni future
includeranno implementazioni di factory pronte all'uso per semplificare questo processo.
Supporto delle immagini
Transformer utilizza BitmapFactory per caricare e decodificare tutti gli asset immagine, pertanto supporta tutti i formati supportati da BitmapFactory. Per i tipi di immagine supportati, consulta la pagina
Supporto delle immagini. Per i formati con più immagini (ad es. GIF), viene visualizzato un singolo frame immagine dal container se viene utilizzato DefaultAssetLoaderFactory.
Formati speciali
Transformer supporta la gestione dell'input in formati multimediali più recenti che forniscono funzionalità speciali rispetto ai formati convenzionali.
Gestire i video HDR
Sempre più dispositivi supportano l'acquisizione di video HDR con, offrendo colori più vivaci e accurati e una gamma di luminosità più ampia.
Transformer supporta la modifica dei video HDR a partire da Android 13 (livello API 33) sui dispositivi con il supporto di codifica richiesto. Quando si modificano i video HDR, tutti gli effetti video GL devono gestire i componenti di colore a virgola mobile a 16 bit e lo spazio colore BT.2020. HDR_MODE_KEEP_HDR è la modalità predefinita quando si crea la Composition. Se la modifica HDR non è supportata, Transformer torna a utilizzare HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
La conversione da HDR a SDR, nota anche come tone mapping, è supportata a partire da Android
10 (livello API 29) sui dispositivi con il supporto di decodifica e OpenGL
richiesto. Questa funzionalità è utile quando si condividono contenuti multimediali HDR con altre app o servizi che non supportano l'inserimento di contenuti HDR. Per attivare il tone mapping utilizzando OpenGL, chiama setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) durante la creazione della Composition. A partire da Android 12 (livello API 31), MediaCodec supporta anche il tone mapping su alcuni dispositivi, inclusi tutti i dispositivi con Android 13 o versioni successive che possono acquisire video HDR. Per attivare il tone mapping utilizzando MediaCodec, chiama setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Gestire i contenuti multimediali in slow motion
I video in slow motion includono metadati che indicano la velocità con cui deve essere riprodotta ogni sezione dello stream. La conversione è il processo di produzione di un nuovo stream video basato sul video in slow motion, ma in cui le sezioni vengono accelerate o rallentate in base ai metadati, in modo che vengano riprodotte correttamente anche sui player che non applicano i metadati in slow motion.
Per appiattire gli stream in slow motion, utilizza il metodo del builder setFlattenForSlowMotion su 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);
In questo modo, puoi supportare i video in slow motion senza doverti preoccupare della gestione di questi formati speciali. Devi solo archiviare e riprodurre la versione convertita del video anziché quella originale.