Android获取设备支持的编解码器

软解和硬解

  • 硬解是需要机器中的专门的解码芯片来完成,质量因厂家的技术能力而定,部分厂商技术实力强,兼容性和解码效果做的比较好,而有些厂商技术实力稍差,兼容性和解码效果做的就不尽如意。软解就是用CPU来解码,需要CPU的性能与处理能力较强,但对流媒体格式兼容性比较好。简单来说,硬解的清晰度好,对网络要求高,软解的流畅度好和对流媒体的支持性好。(copy自百度)

方便理解为:

  • 软解
    CPU处理解码
  • 硬解
    专门的硬件芯片去处理解码

获取设置支持的编解码器

通过MediaCodecList来获取,MediaCodecList是api21以上添加的,需要判断下当前版本

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
            MediaCodecInfo[] supportCodes = list.getCodecInfos();
            Log.i(TAG, "解码器列表:");
            for (MediaCodecInfo codec : supportCodes) {
                if (!codec.isEncoder()) {
                    String name = codec.getName();
                    if (name.startsWith("OMX.google")) {
                        Log.i(TAG, "软解->" + name);
                    }
                }
            }
            for (MediaCodecInfo codec : supportCodes) {
                if (!codec.isEncoder()) {
                    String name = codec.getName();
                    if (!name.startsWith("OMX.google")) {
                        Log.i(TAG, "硬解->" + name);
                    }
                }
            }
            Log.i(TAG, "编码器列表:");
            for (MediaCodecInfo codec : supportCodes) {
                if (codec.isEncoder()) {
                    String name = codec.getName();
                    if (name.startsWith("OMX.google")) {
                        Log.i(TAG, "软编->" + name);
                    }
                }
            }
            for (MediaCodecInfo codec : supportCodes) {
                if (codec.isEncoder()) {
                    String name = codec.getName();
                    if (!name.startsWith("OMX.google")) {
                        Log.i(TAG, "硬编->" + name);
                    }
                }
            }
        }
    }
}

可以看到打印出的支持列表:

解码器列表:
软解->OMX.google.opus.decoder
软解->OMX.google.vp8.decoder
软解->OMX.google.h264.decoder
软解->OMX.google.amrnb.decoder
软解->OMX.google.amrwb.decoder
软解->OMX.google.aac.decoder
软解->OMX.google.vorbis.decoder
硬解->OMX.MTK.AUDIO.DECODER.MP3
硬解->OMX.MTK.AUDIO.DECODER.ADPCM.MS
硬解->OMX.MTK.AUDIO.DECODER.ADPCM.DVI
硬解->OMX.MTK.AUDIO.DECODER.GSM
硬解->OMX.MTK.AUDIO.DECODER.RAW
硬解->OMX.MTK.AUDIO.DECODER.G711.ALAW
硬解->OMX.MTK.AUDIO.DECODER.G711.MLAW
硬解->OMX.MTK.AUDIO.DECODER.FLAC
硬解->OMX.MTK.AUDIO.DECODER.WMA
硬解->OMX.MTK.AUDIO.DECODER.WMAPRO
硬解->OMX.MTK.AUDIO.DECODER.APE
硬解->OMX.MTK.AUDIO.DECODER.ALAC
硬解->OMX.MTK.VIDEO.DECODER.MPEG2
硬解->OMX.MTK.VIDEO.DECODER.HEVC
硬解->OMX.MTK.VIDEO.DECODER.MPEG4
硬解->OMX.MTK.VIDEO.DECODER.H263
硬解->OMX.MTK.VIDEO.DECODER.AVC
硬解->OMX.MTK.VIDEO.DECODER.VPX
硬解->OMX.MTK.VIDEO.DECODER.VP9
硬解->OMX.MTK.VIDEO.DECODER.VC1
硬解->OMX.MTK.VIDEO.DECODER.DIVX
硬解->OMX.MTK.VIDEO.DECODER.DIVX3
硬解->OMX.MTK.VIDEO.DECODER.XVID
硬解->OMX.MTK.VIDEO.DECODER.S263
编码器列表:
软编->OMX.google.aac.encoder
软编->OMX.google.amrnb.encoder
软编->OMX.google.amrwb.encoder
软编->OMX.google.flac.encoder
软编->OMX.google.vp8.encoder
硬编->OMX.MTK.VIDEO.ENCODER.MPEG4
硬编->OMX.MTK.VIDEO.ENCODER.H263
硬编->OMX.MTK.VIDEO.ENCODER.AVC
硬编->OMX.MTK.VIDEO.ENCODER.VPX
硬编->OMX.MTK.AUDIO.ENCODER.VORBIS
硬编->OMX.MTK.AUDIO.ENCODER.ADPCM.MS
硬编->OMX.MTK.AUDIO.ENCODER.ADPCM.DVI
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值