Consulte a página de formatos compatíveis com o ExoPlayer para uma introdução aos formatos de mídia em geral. As mesmas limitações de carregamento, extração e decodificação de streams se aplicam ao Transformer, embora ele não ofereça suporte aos módulos de decodificador de software agrupados do ExoPlayer.
O Transformer também depende do MediaCodec para codificação, o que limita os formatos de saída com suporte. Consulte Codecs de vídeo do MediaCodec
para mais informações sobre as limitações de codificação.
Por padrão, Transformer gera arquivos MP4 padrão usando InAppMp4Muxer.
Se o app exigir MP4 fragmentado, transmita um
InAppFragmentedMp4Muxer.Factory
ao inicializar a instância Transformer. O Media3 também oferece suporte a outros
formatos, como WebM, AAC e Ogg, usando muxers dedicados, como WebmMuxer
, AacMuxer e OggMuxer. Eles precisam ser encapsulados em
uma Muxer.Factory personalizada para serem injetados, mas as versões futuras
vão incluir implementações de fábrica prontas para uso para simplificar esse processo.
Compatibilidade de imagem
O Transformer usa BitmapFactory para carregar e decodificar todos os recursos de imagem. Portanto, ele oferece suporte a todos os formatos do BitmapFactory. Consulte
Compatibilidade de imagem
para ver os tipos de imagem com suporte. Para formatos de várias imagens (por exemplo, GIFs), um único frame de imagem do contêiner será exibido se a DefaultAssetLoaderFactory for usada.
Formatos especiais
O Transformer oferece suporte ao processamento de entrada em formatos de mídia mais recentes que oferecem recursos especiais em comparação com os formatos convencionais.
Como processar vídeos HDR
Cada vez mais dispositivos oferecem suporte à captura de vídeo HDR, proporcionando cores mais vívidas e precisas e um maior intervalo de brilho.
O Transformer oferece suporte à edição de vídeos HDR no Android 13 (nível 33 da API) e versões mais recentes em dispositivos com o suporte de codificação necessário. Ao editar vídeos HDR, todos os efeitos de vídeo GL precisam processar componentes de cor de ponto flutuante de 16 bits e o espaço de cores BT.2020. HDR_MODE_KEEP_HDR é o modo padrão ao criar a Composition. Se a edição HDR não for compatível, o Transformer vai usar HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.
A conversão de HDR para SDR, também conhecida como mapeamento de tons, é compatível com o Android
10 (nível 29 da API) e versões mais recentes em dispositivos com a decodificação e o suporte OpenGL
necessários. Isso é útil ao compartilhar mídia HDR com outros apps ou serviços que não oferecem suporte à ingestão de conteúdo HDR. Para ativar o mapeamento de tons usando o OpenGL, chame setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) ao criar a Composition. No Android 12 (nível 31 da API) e versões mais recentes, o MediaCodec também oferece suporte ao mapeamento de tons em alguns dispositivos, incluindo todos os dispositivos que executam o Android 13 ou mais recente e que podem capturar vídeos HDR. Para ativar o mapeamento de tons usando MediaCodec, chame setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).
Como processar mídia em câmera lenta
Os vídeos em câmera lenta incluem metadados que indicam a velocidade em que cada seção do stream deve ser reproduzida. Achatamento é o processo de produção de um novo stream de vídeo com base no vídeo em câmera lenta, mas em que as seções são aceleradas ou desaceleradas com base em metadados, para que sejam reproduzidas corretamente mesmo em players que não aplicam metadados de câmera lenta.
Para achatar streams em câmera lenta, use o método de builder setFlattenForSlowMotion em 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);
Isso permite oferecer suporte a vídeos em câmera lenta sem precisar se preocupar com o processamento desses formatos especiais. Tudo o que você precisa fazer é armazenar e reproduzir a versão achatada do vídeo em vez da original.