Consulte os formatos compatíveis com o ExoPlayer para uma introdução a formatos de mídia em geral. As mesmas limitações de carregamento, extração e os streams de decodificação são aplicados com o Transformer, mas ele não aceita Módulos decodificadores de software agrupados 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 (em inglês)
para limitações que se aplicam ao contêiner de mídia de saída. Somente Transformer
gera arquivos MP4.
Por padrão, Transformer
usa MediaMuxer
, mas um trabalho em InAppMuxer
está em andamento.
está disponível opcionalmente para evitar algumas das limitações do MediaMuxer
com relação
estruturas de frames de referência e formatos de amostra compatíveis. O multiplexador padrão
se tornar o multiplexador no app em uma versão futura.
Compatibilidade de imagem
O Transformer usa BitmapFactory
para carregar e decodificar todos os recursos de imagem. Portanto,
O Transformer oferece suporte a todos os formatos compatíveis com o BitmapFactory. Consulte
Compatibilidade com imagens
para tipos de imagem com suporte. Para formatos com várias imagens (por exemplo, gifs), uma única imagem
frame do contêiner será exibido se DefaultAssetLoaderFactory
for
usados.
Formatos especiais
O Transformer oferece suporte ao processamento de entradas em formatos de mídia mais recentes que oferecem em comparação com os formatos convencionais.
Processar vídeos em HDR
Cada vez mais dispositivos oferecem suporte a vídeo HDR capturadas, com imagens mais vívidas e precisas cores e um intervalo de brilho maior.
O Transformer oferece suporte à edição de vídeos em 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, qualquer imagem GL
os efeitos de vídeo precisam lidar com componentes de cor de ponto flutuante de 16 bits e BT.2020
espaço de cores. HDR_MODE_KEEP_HDR
é o modo padrão ao criar o
Composition
. Se a edição HDR não for compatível, o Transformer
volta a usar HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL
.
A conversão de HDR em SDR, também conhecido como mapeamento de tons, é compatível com o Android
10 (nível 29 da API) em diante em dispositivos com a decodificação e o OpenGL necessários
suporte. Isso é útil ao compartilhar mídia HDR com outros apps ou serviços que
não são compatíveis com a transferência 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, MediaCodec
também oferece suporte ao mapeamento de tons em alguns dispositivos, incluindo todos os dispositivos
Android 13 ou versão mais recente que possa capturar vídeos em HDR. Para ativar o mapeamento de tons usando
O MediaCodec
chama 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 com que cada seção da transmissão devem ser reproduzidos. O nivelamento é o processo de produzir uma nova transmissão de vídeo baseada no vídeo em câmera lenta, mas em que as seções são aceleradas ou desacelerados com base em metadados, para que sejam reproduzidos corretamente até mesmo nos jogadores que não aplicam metadados de câmera lenta.
Para nivelar streams em câmera lenta, use o 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 o suporte a vídeos em câmera lenta sem ter que se preocupar com que lidam com esses formatos especiais. Tudo que você precisa fazer é armazenar e reproduzir uma versão simplificada do vídeo em vez da original.