有的时候我们想知道机器支持哪些编解码,HDR视频又支持哪些?当然市面上有很多app可以辅助查看,但是作为一个合格的码农,从代码上我们应该怎么去获取这些信息呢,下面我们就来看看。

支持的编解码获取

废话不多说,直接上代码:

MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
MediaCodecInfo[] supportCodes = list.getCodecInfos();
// 解码器列表
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);
        }
    }
}
// 编码器列表
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);
        }
    }
}

以上就是编解码支持的列表,赶快去试试吧。

HDR支持获取

HDR 相关的信息在 Display 类中,可以先看看里面都有哪些定义?

 /**
  * Dolby Vision high dynamic range (HDR) display.
  */
 public static final int HDR_TYPE_DOLBY_VISION = 1;
 /**
  * HDR10 display.
  */
 public static final int HDR_TYPE_HDR10 = 2;
 /**
  * Hybrid Log-Gamma HDR display.
  */
 public static final int HDR_TYPE_HLG = 3;

 /**
  * HDR10+ display.
  */
 public static final int HDR_TYPE_HDR10_PLUS = 4;

在里面可以看到 HDR10DOLBY VISIONHDR10+HLG 这 4 个,那如何去查看本机器支持哪些呢?不要着急,咱们马上上代码。

int[] getSupportedHdrTypes(Context context) {
  int[] types = new int[0];
  Display display;
  if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
    display = context.getDisplay();
  } else {
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    display = wm.getDefaultDisplay();
  }

  int[] types = display.getHdrCapabilities().getSupportedHdrTypes();
  for (int t :
          types) {
      Log.i(TAG, "支持的HDR TYPE ->" + t);
  }
  return types;
}

参考官方文档说明:https://source.android.com/devices/tech/display/hdr

查看hdr的app:https://play.google.com/store/apps/details?id=com.miauhacks.hdrcheck&hl=en_IN&gl=US

以上就是 Android 获取编解码支持列表和 HDR支持列表的方式了。