问题排查


为什么我无法访问演示版应用中的本地文件?

从 Android 11 开始,分区存储强制执行 (API 级别 30)禁止直接访问文件系统。适合在运行过程中 可以通过将外部 API 的 存储权限:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

然后通过 adb 授予权限:

adb shell appops set --uid androidx.media3.demo.transformer \
    MANAGE_EXTERNAL_STORAGE allow

为什么在特定设备上导出操作失败?

请提交有关 Media3 问题 跟踪器。 以重现问题。可在以下位置添加针对设备特定问题的解决方法: 以便逐步提升兼容性。

Transformer 是否支持转换(或记录)远程媒体?

Transformer 支持远程渐进式流,包括媒体文件容器 例如 MP4

在网络条件极差的情况下,由于正在缓冲,导出可能会失败 如果远程媒体时间过长,会在多路复用器中触发检查, 识别流水线卡住了您可以通过以下方法替换默认行为: 在 Transformer.Builder 上设置 maxDelayBetweenMuxerSamplesMs

Kotlin

Transformer.Builder(context)
    .setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET)
    .build()

Java

new Transformer.Builder(context)
    .setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET)
    .build();

传入 C.TIME_UNSET 会完全移除超时,但如果您的应用在 对于 MediaCodec 可能会卡住的芯片组,您可能需要设置一个更大的非零值 超时。

<ph type="x-smartling-placeholder">

Transformer 是否支持 8k 输入?

Transformer 的实现方式与格式无关,因此没有 但设备上的硬件功能可能意味着 则导出操作失败。例如,即使在能够拍摄 8K 分辨率的设备上 由于超过 200 个参数, 可用的硬件编解码器或 RAM 资源。

Transformer 如何与平台兼容的媒体转码相关联?

兼容的媒体转码 是 Android 12(API 级别 31)中的一项 Android 平台功能,可将 将最长一分钟的媒体内容转换为应用支持的格式。如果您 选择启用这项功能,读取不兼容格式的媒体文件 会导致系统按需对其进行转码,并且将结果缓存起来以供日后读取 操作。

Transformer 还支持 转化,而 它作为支持库提供,并且应用可以完全控制 转码操作

如何缩短导出延迟时间或提高吞吐量?

Transformer 依赖 MediaCodec 进行硬件加速解码和 编码和 OpenGL 来处理视频帧。根据我们对 则 Transformer 吞吐量的限制因素是 MediaCodec 编码器吞吐量(适用于无重量级影响的用例) 处理。这可能会以同样的方式影响其他实现方式。对于 与平台兼容的转码功能的性能 Transformer。

演示版应用的调试预览会显著降低吞吐量,因此请关闭 在使用演示版应用的发布 build 进行测试时提供预览版功能,以获取 真实的想法和想法