Formatos compatíveis

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.