支持的格式

如需大致了解媒体格式,请参阅 ExoPlayer 支持的格式页面。对流的加载、提取和解码同样存在 Transformer 带来的限制,但 Transformer 不支持 ExoPlayer 捆绑的软件解码器模块。

Transformer 还依赖于 MediaCodec 进行编码,并且需要多路复用 (mux) 输出媒体文件,这限制了支持的输出格式。如需详细了解编码限制,请参阅 MediaCodec 视频编解码器;如需详细了解适用于输出媒体容器的限制,请参阅 MediaMuxer。Transformer 仅输出 MP4 文件。

默认情况下,Transformer 使用 MediaMuxer,但您可以选择性使用进行中的 InAppMuxer,以避免 MediaMuxer 在参考帧结构和支持的样本格式方面存在的一些限制。在未来版本中,默认多路复用器会成为应用内多路复用器。

图片支持

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);

这样,您就可以支持慢动作视频,而无需担心如何处理这些特殊格式。您只需存储和播放视频的扁平版本而不是原始版本即可。