检测 Android 是否支持硬件编解码

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。