如需大致了解 媒体格式,请参阅ExoPlayer 支持的格式 页面。虽然 Transformer 不支持 ExoPlayer 的捆绑式软件解码器模块,但加载、提取和解码流的限制同样适用于 Transformer。
Transformer 还依赖于 MediaCodec 进行编码,这限制了支持的输出格式。如需详细了解编码限制,请参阅 MediaCodec 视频编解码器
。
默认情况下,Transformer 使用
InAppMp4Muxer 输出标准 MP4 文件。如果您的应用需要分段 MP4,您
可以在初始化 Transformer 实例时传递
InAppFragmentedMp4Muxer.Factory。Media3 还使用专用多路复用器(例如
WebmMuxer、AacMuxer、OggMuxer 和
WavMuxer)支持其他格式
,例如 WebM、AAC、Ogg 和 WAV。这些格式必须封装在自定义
Muxer.Factory中才能注入,但未来的版本将
包含现成的工厂实现,以简化此过程。
图片支持
Transformer 使用 BitmapFactory 加载和解码所有图片资源,因此 Transformer 支持 BitmapFactory 支持的所有格式。如需了解支持的图片类型,请参阅
图片支持
。对于多图片格式(例如 GIF),如果使用 DefaultAssetLoaderFactory,则会显示容器中的单个图片帧。
特殊格式
Transformer 支持处理采用较新媒体格式的输入,与传统格式相比,这些格式提供了特殊功能。
处理 HDR 视频
越来越多的设备支持拍摄 HDR 视频 ,从而提供更生动、更准确的色彩 和更大的亮度范围。
Transformer 支持在具有所需编码支持的设备上编辑 Android 13(API 级别 33)及更高版本中的 HDR 视频。编辑 HDR 视频时,任何 GL 视频效果都需要处理 16 位浮点颜色分量和 BT.2020 色彩空间。HDR_MODE_KEEP_HDR 是构建 Composition 时的默认模式。如果不支持 HDR 编辑,Transformer 会回退到使用 HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL。
从 Android
10(API 级别 29)开始,在具有所需解码和 OpenGL
支持的设备上,支持将 HDR 转换为 SDR,也称为 色调映射。当将 HDR 媒体分享到不支持接收 HDR 内容的其他应用或服务时,这非常有用。如需使用 OpenGL 启用色调映射,请在创建 Composition 时调用 setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)。从 Android 12(API 级别 31)开始,MediaCodec 还支持在某些设备上进行色调映射,包括所有运行 Android 13 或更高版本且可以拍摄 HDR 视频的设备。如需使用 MediaCodec 启用色调映射,请调用 setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)。
处理慢动作媒体
慢动作视频包含元数据,用于指明应以何种速度播放流的每个部分。扁平化是指基于慢动作视频生成新视频流的过程,但其中各部分会根据元数据加快或减慢,以便即使在不应用慢动作元数据的播放器上也能正确播放。
如需展平慢动作流,请对 EditedMediaItem 使用 setFlattenForSlowMotion 构建器方法。
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);
这样,您就可以支持慢动作视频,而无需担心处理这些特殊格式。您只需存储和播放视频的扁平化版本,而不是原始版本。