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, você
pode transmitir um
InAppFragmentedMp4Muxer.Factory ao
inicializar a instância do Transformer. O Media3 também oferece suporte a outros formatos
como WebM, AAC, Ogg e WAV, usando muxers dedicados, como
WebmMuxer, AacMuxer, OggMuxer e
WavMuxer. Eles precisam ser encapsulados em um
Muxer.Factory personalizado 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 o DefaultAssetLoaderFactory for usado.
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 do Android 13 (nível 33 da API) 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 espaço de cor BT.2020. HDR_MODE_KEEP_HDR é o modo padrão ao criar a Composition. Se a edição HDR for indisponí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 do 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.