Android 音视频音视频,多媒体,编解码音视频开发经验之路

检测 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

上一篇 下一篇

猜你喜欢

热点阅读