如需控制 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.setMuxerFactory 为写入媒体容器设置自定义多路复用器。例如,如果您在应用级实现自己的多路复用器,则可以编写一个实现 Muxer接口的封装容器,然后使用 setMuxerFactory 将其注入到 Transformer 中。
如果您的自定义多路复用器支持在 MP4 编辑列表中写入负时间戳,则您
应确保
Muxer.Factory#supportsWritingNegativeTimestampsInEditList 返回
true。这样一来,Transformer 就可以执行优化,例如使用 MP4 编辑列表进行仅剪辑编辑,而无需重新编码视频。对于默认的 InAppMp4Muxer,系统已支持此功能。