媒体编解码器

从 Android 10 (API 级别 29) 或更高版本 开始,MediaCodecInfo 提供揭示更多编解码器相关信息的方法:

isSoftwareOnly()
如果编解码器仅在软件中运行,则返回 true。软件编解码器不保证渲染性能。
isHardwareAccelerated()
如果编解码器由硬件加速,则返回 true。
isVendor()
如果编解码器由设备供应商提供,则返回 true;如果由 Android 平台提供,则返回 false。
isAlias()
MediaCodecList 可能包含使用备用编解码器名称(别名)的同一基础编解码器的其他条目。如果此条目中的编解码器是另一编解码器的别名,则此方法返回 true。

此外,MediaCodec.getCanonicalName() 返回通过别名创建的编解码器的基础编解码器名称。

性能点

性能点表示编解码器以特定高度、宽度和帧率渲染视频的能力。例如,UHD_60 性能点表示以每秒 60 帧的速率渲染的超高清视频(3840x2160 像素)。

MediaCodecInfo.VideoCapabilities.getSupportedPerformancePoints() 方法返回编解码器可以渲染或捕获的 PerformancePoint 条目的列表。

您可以通过调用 PerformancePoint.covers(PerformancePoint) 来检查给定的 PerformancePoint 是否涵盖另一个性能点。例如,UHD_60.covers(UHD_50) 返回 true。

本教程提供所有硬件加速编解码器的性能点列表。如果编解码器连最低标准的性能点要求都无法满足,则此列表可能为空。

请注意,已升级至 Android 10 (API 级别 29) 或更高版本 却并未更新供应商映像的设备不具有性能点数据,因为此类数据来自供应商 HAL。在这种情况下,getSupportedPerformancePoints() 返回 null。