Formatos compatíveis

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 no carregamento, extração e decodificação de streams se aplicam ao Transformer, mas ele não é compatível com módulos de decodificador de software agrupados do ExoPlayer.

O Transformer também depende do 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 limitações que se aplicam ao contêiner de mídia de saída. O Transformer só gera arquivos MP4.

Por padrão, Transformer usa MediaMuxer, mas um InAppMuxer em andamento está disponível opcionalmente para evitar algumas das limitações do MediaMuxer em relação a estruturas de frame de referência e formatos de amostra compatíveis. O muxer padrão vai se tornar o muxer 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 é compatível com todos os formatos do BitmapFactory. Consulte Suporte a imagens para ver os tipos de imagens compatíveis. Para formatos de várias imagens (por exemplo, GIFs), um único frame de imagem do contêiner é mostrado se o DefaultAssetLoaderFactory for usado.

Formatos especiais

O Transformer oferece suporte ao processamento de entradas em formatos de mídia mais recentes que oferecem recursos especiais em comparação com os formatos convencionais.

Como gerenciar vídeos HDR

Cada vez mais dispositivos oferecem suporte à captura de vídeo em HDR, com cores mais vibrantes e precisas e um maior intervalo de brilho.

O Transformer permite editar vídeos HDR no Android 13 (nível 33 da API) e em versões mais recentes em dispositivos com o suporte de 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 o espaço de cores BT.2020. HDR_MODE_KEEP_HDR é o modo padrão ao criar o Composition. Se a edição em 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 do OpenGL necessários. Isso é útil ao compartilhar mídia HDR com outros apps ou serviços que não aceitam a 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 o Composition. A partir do Android 12 (nível 31 da API), o MediaCodec também oferece suporte ao mapeamento de tons em alguns dispositivos, incluindo todos os dispositivos com Android 13 ou versões mais recentes que 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 lidar com 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 produzir um novo fluxo 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 reduzir streams em 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 em processar esses formatos especiais. Basta armazenar e reproduzir a versão simplificada do vídeo em vez da original.