Formati supportati:

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.