Consulta la pagina dei formati supportati da ExoPlayer per un'introduzione ai formati multimediali in generale. Transformer non supporta le stesse limitazioni al caricamento, all'estrazione e alla decodifica dei flussi di dati, anche se non supporta i moduli di decodifica software in bundle di ExoPlayer.
Transformer si basa anche su MediaCodec
per la codifica e deve eseguire il multiplex, o mux, di file multimediali di output, limitando i formati di output supportati. Consulta
Codec video MediaCodec
per ulteriori informazioni sulle limitazioni di codifica e
MediaMuxer
per conoscere le limitazioni che si applicano al contenitore multimediale di output. Transformer restituisce
solo file MP4.
Per impostazione predefinita, Transformer
utilizza MediaMuxer
, ma è disponibile un InAppMuxer
in corso facoltativamente per evitare alcune delle limitazioni di MediaMuxer
relative alle strutture dei frame di riferimento e ai formati di esempio supportati. Il muxer predefinito diventerà il muxer in-app in una release futura.
Supporto delle immagini
Transformer utilizza BitmapFactory
per caricare e decodificare tutti gli asset immagine, in modo che
Transformer supporta tutti i formati supportati da BitmapWorks. Consulta la pagina Supporto per le immagini per i tipi di immagini supportati. Per i formati con più immagini (ad es. GIF), se viene utilizzato DefaultAssetLoaderFactory
viene visualizzato un singolo frame immagine del container.
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 ora supportano l'acquisizione video HDR, offrendo colori più vividi e precisi e una gamma di luminosità più ampia.
Transformer supporta la modifica di video HDR a partire da Android 13 (livello API 33) sui dispositivi che supportano la codifica richiesta. Durante la modifica dei video HDR, tutti gli effetti video GL devono gestire i componenti di colore in virgola mobile a 16 bit e lo spazio colore di BT.2020. HDR_MODE_KEEP_HDR
è la modalità predefinita durante la creazione di Composition
. Se l'editing HDR non è supportato, Transformer utilizza nuovamente HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL
.
La conversione da HDR in SDR, nota anche come mappatura dei toni, è supportata a partire da Android 10 (livello API 29) sui dispositivi che dispongono della decodifica e del supporto OpenGL richiesti. Questo è utile quando si condividono contenuti multimediali HDR con altri servizi o app che
non supportano l'importazione di contenuti HDR. Attivare la mappatura dei toni utilizzando la chiamata OpenGL
setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
durante la creazione del
Composition
. A partire da Android 12 (livello API 31), MediaCodec
supporta anche la mappatura dei toni su alcuni dispositivi, inclusi tutti quelli con Android 13 o versioni successive in grado di acquisire video HDR. Per abilitare la mappatura dei toni mediante
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 velocizzate o rallentate in base ai metadati, in modo che vengano riprodotte correttamente anche su player che non applicano metadati in slow motion.
Per suddividere gli stream in slow motion, usa il metodo di creazione 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, potrai supportare i video in slow motion senza doverti preoccupare di gestire questi formati speciali. Devi solo memorizzare e riprodurre la versione appiattita del video, anziché quella originale.