Formatos com suporte

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.