Para controlar o comportamento do Transformer, você pode configurar opções na superfície da API ou substituir partes da funcionalidade completamente escrevendo implementações personalizadas de interfaces e transmitindo-as. Esta página descreve alguns exemplos.
Controlar a configuração do codec
Por padrão, o Transformer vai usar uma resolução compatível se o codificador de hardware do dispositivo não aceitar a resolução de saída solicitada. Por exemplo, o Transformer pode alinhar a largura e a altura da saída para serem um múltiplo de 2 ou 16, conforme exigido pelos codificadores de hardware. Você pode desativar esse comportamento para que o Transformer gere um erro se não conseguir produzir a resolução de saída necessária:
Kotlin
transformerBuilder.setEncoderFactory( DefaultEncoderFactory.Builder(context).setEnableFallback(false).build() )
Java
transformerBuilder.setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build());
Da mesma forma, a DefaultEncoderFactory também oferece suporte ao uso de configurações de codificação personalizadas com a opção setRequestedVideoEncoderSettings.
Você também pode substituir completamente as fábricas de codificadores e decodificadores para ter controle total sobre como os codecs são configurados.
Muxers personalizados
Você pode definir um muxer personalizado para gravar contêineres de mídia chamando Transformer.Builder.setMuxerFactory. Por exemplo, se você implementar seu próprio
muxer no nível do aplicativo, poderá gravar um wrapper que implementa a
Muxer interface e usar setMuxerFactory para injetá-lo em
Transformer.Builder.
Se o muxer personalizado oferece suporte à gravação de carimbos de data/hora negativos em listas de edição MP4, verifique se
Muxer.Factory#supportsWritingNegativeTimestampsInEditList retorna
true. Isso permite que o Transformer realize otimizações, como edições somente de corte usando listas de edição MP4, sem precisar recodificar o vídeo. Para o InAppMp4Muxer padrão, isso já é compatível.