检测 Android 是否支持硬件编解码
2019-07-18 本文已影响1人
GeorgeMR
Android 系统中编解码器的命名方式,软编解码器通常是以 OMX.google 开头,硬编解码器通常是以 OMX.[hardware_vendor] 开头的。但是还有一些不遵守这个命名规范的,不以 OMX. 开头的情况,它们也会被认为是软编解码器。
由上可知,如果一个设备既支持硬件编解码,也支持软件编解码。对于 hevc 解码器可能就会存在两个的情况:
hevc_decoder.png
那么在判断设备是否支持硬件编解码的时候,就需要判断编解码器是否为硬件编解码器:
/**
* 是否支持 hevc 硬解
* @return
*/
public static boolean isH265HWDecoderSupport() {
MediaCodecList codecList = new MediaCodecList(REGULAR_CODECS);
// 获取设备支持的所有 codec 信息
MediaCodecInfo[] codecInfos = codecList.getCodecInfos();
for (int i = 0; i < codecInfos.length; i++) {
MediaCodecInfo codecInfo = codecInfos[i];
// 解码codec & 解码器名称包含'hevc' & 不是软件codec
if (!codecInfo.isEncoder() && (codecInfo.getName().contains("hevc")
&& !isSWCodec(codecInfo.getName()))) {
return true;
}
}
return false;
}
/**
* 是否为软件 codec
* @param codecName
* @return
*/
public static boolean isSWCodec(String codecName) {
if (codecName.startsWith("OMX.google.")) {
return true;
}
if (codecName.startsWith("OMX.")) {
return false;
}
return true;
}
如有问题,可咨询:georgechmr@gmail.com