Consulte a página de formatos com suporte do ExoPlayer (link em inglês) para uma introdução aos formatos de mídia em geral. As mesmas limitações no carregamento, extração e decodificação de streams se aplicam ao Transformer, embora ele não ofereça suporte aos módulos decodificadores de software em pacote do ExoPlayer.
O Transformer também depende de MediaCodec
para codificação e precisa multiplexar, ou mux, arquivos de mídia de saída, o que limita os formatos de saída compatíveis. Consulte
Codecs de vídeo do MediaCodec
para mais informações sobre limitações de codificação e
MediaMuxer
para ver as limitações que se aplicam ao contêiner de mídia de saída. O Transformer gera apenas arquivos MP4.
Por padrão, Transformer
usa MediaMuxer
, mas um InAppMuxer
de trabalho em andamento
está disponível opcionalmente para evitar algumas das limitações de MediaMuxer
em relação
a estruturas de frames de referência e formatos de amostra com suporte. O multiplexador padrão se tornará
o no app em uma versão futura.
Compatibilidade de imagem
O Transformer usa BitmapFactory
para carregar e decodificar todos os recursos de imagem. Portanto, ele oferece suporte a todos os formatos que o BitmapFactory oferece. Consulte
Suporte a imagens
para conhecer os tipos de imagem compatíveis. 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 é compatível com o processamento de entradas em formatos de mídia mais recentes que fornecem recursos especiais em comparação com formatos convencionais.
Como processar vídeos HDR
Cada vez mais dispositivos são compatíveis com a captura de vídeo HDR, oferecendo 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 diante
em dispositivos com o suporte à codificação necessário. Ao editar vídeos em HDR, todos os efeitos de vídeo GL
precisam processar componentes de cor de ponto flutuante de 16 bits e espaço de cores
BT.2020. HDR_MODE_KEEP_HDR
é o modo padrão ao criar a
Composition
. Se a edição em HDR não tiver suporte, o Transformer
volta a usar HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL
.
A conversão de HDR em SDR, também conhecida como mapeamento de tons, pode ser usada a partir do Android
10 (nível 29 da API) em dispositivos que precisam de decodificação e suporte
ao OpenGL. 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 a chamada do OpenGL
setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
ao criar o
Composition
. No Android 12 (nível 31 da API) e versões mais recentes, a MediaCodec
também oferece suporte ao mapeamento de tons em alguns dispositivos, incluindo todos os que têm o
Android 13 ou versões mais recentes e podem capturar vídeos em HDR. Para ativar o mapeamento de tons usando
MediaCodec
, chame setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)
.
Como gerenciar mídia em câmera lenta
Os vídeos em câmera lenta incluem metadados que indicam a velocidade em que cada seção da transmissão deve ser reproduzida. A nivelamento é 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 nos metadados, para que sejam reproduzidas corretamente, mesmo em players que não aplicam metadados de câmera lenta.
Para nivelar streams de câmera lenta, use o método 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 que você ofereça suporte a vídeos em câmera lenta sem se preocupar com o processamento desses formatos especiais. Tudo o que você precisa fazer é armazenar e reproduzir a versão simplificada do vídeo em vez do original.