Чтобы управлять поведением Transformer, можно настроить параметры в API или полностью заменить некоторые функции, написав собственные реализации интерфейсов и передав их. На этой странице приведены некоторые примеры.
Как управлять конфигурацией кодека
По умолчанию Transformer переходит на поддерживаемое разрешение, если аппаратный кодировщик устройства не принимает запрошенное выходное разрешение. Например, Transformer может выровнять ширину и высоту выходного изображения, чтобы они были кратны 2 или 16, как часто требуется аппаратным кодировщикам. Вы можете отключить это поведение, чтобы Transformer вместо этого выдавал ошибку, если не может создать выходное разрешение:
Kotlin
transformerBuilder.setEncoderFactory( DefaultEncoderFactory.Builder(context).setEnableFallback(false).build() )
Java
transformerBuilder.setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build());
Аналогичным образом DefaultEncoderFactory поддерживает использование пользовательских настроек кодирования с параметром setRequestedVideoEncoderSettings.
Вы также можете полностью заменить фабрики кодировщиков и декодировщиков, чтобы получить полный контроль над настройкой кодеков.
Пользовательские мультиплексоры
Вы можете задать собственный мультиплексор для записи медиаконтейнеров, вызвав метод Transformer.Builder.setMuxerFactory. Например, если вы реализовали собственный мультиплексор на уровне приложения, вы можете написать оболочку, которая реализует интерфейс Muxer, а затем использовать setMuxerFactory, чтобы внедрить ее в Transformer.Builder.
Если ваш мультиплексор поддерживает запись отрицательных временных меток в списках редактирования MP4, убедитесь, что Muxer.Factory#supportsWritingNegativeTimestampsInEditList возвращает true. Это позволяет Transformer выполнять оптимизацию, например обрезку с помощью монтажных листов MP4, без перекодирования видео. Для стандартного протокола InAppMp4Muxer эта функция уже поддерживается.