Per un'introduzione generale ai formati multimediali, consulta la pagina Formati supportati da ExoPlayer. Con Transformer si applicano le stesse limitazioni al caricamento, all'estrazione e alla decodifica degli stream, anche se Transformer non supporta i moduli di decodifica software in bundle di ExoPlayer.
Transformer si basa anche su MediaCodec per la codifica, il che limita i formati di output supportati. Per ulteriori informazioni sulle limitazioni di 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
quando inizializzi l'istanza Transformer. Media3 supporta anche altri formati come WebM, AAC e Ogg utilizzando muxer dedicati come WebmMuxer, AacMuxer e OggMuxer. Questi devono essere racchiusi in
un Muxer.Factory personalizzato da inserire, ma le versioni future
includeranno implementazioni di fabbrica pronte all'uso per semplificare questo processo.
Supporto delle immagini
Transformer utilizza BitmapFactory per caricare e decodificare tutti gli asset immagine, quindi
supporta tutti i formati supportati da BitmapFactory. Consulta la sezione
Supporto delle immagini
per i tipi di immagini supportati. Per i formati con più immagini (ad es. GIF), viene visualizzato un singolo frame
dell'immagine dal contenitore se viene utilizzato DefaultAssetLoaderFactory.
Formati speciali
Transformer supporta la gestione dell'input nei formati multimediali più recenti che offrono funzionalità speciali rispetto ai formati convenzionali.
Gestione dei video HDR
Sempre più dispositivi supportano l'acquisizione di video HDR, 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 modifichi video HDR, tutti gli effetti video GL
devono gestire componenti di colore in virgola mobile a 16 bit e lo spazio colore BT.2020. HDR_MODE_KEEP_HDR è la modalità predefinita durante la creazione
di Composition. Se l'editing HDR non è supportato, Transformer
torna a utilizzare HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
La conversione da HDR a SDR, nota anche come mappatura della tonalità, è supportata a partire da Android
10 (livello API 29) sui dispositivi con il supporto OpenGL e la decodifica richiesti. Questa opzione è utile quando si condividono contenuti multimediali HDR con altre app o servizi che
non supportano l'importazione di contenuti HDR. Per attivare la mappatura della tonalità utilizzando la chiamata OpenGL
setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) durante la creazione di
Composition. A partire da Android 12 (livello API 31), MediaCodec
supporta anche la mappatura della tonalità su alcuni dispositivi, inclusi tutti i dispositivi con
Android 13 o versioni successive in grado di acquisire video HDR. Per attivare la mappatura dei toni utilizzando
MediaCodec chiama setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Gestione dei contenuti multimediali in slow motion
I video in slow motion includono metadati che indicano la velocità di riproduzione di ogni sezione dello stream. L'appiattimento è 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 lettori che non applicano i metadati di slow motion.
Per appiattire i flussi in slow motion, utilizza il metodo setFlattenForSlowMotion builder
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. Tutto quello che devi fare è archiviare e riprodurre la versione appiattita del video anziché quella originale.