从 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。