代码之家  ›  专栏  ›  技术社区  ›  s-hunter

如何查询Android设备的视频功能?

  •  0
  • s-hunter  · 技术社区  · 6 年前
    public void getCodecInfo() {
        int numCodecs = MediaCodecList.getCodecCount();
        for (int i = 0; i < numCodecs; i++) {
            MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
    
            if (!codecInfo.isEncoder()) {
                continue;
            }
    
            String[] types = codecInfo.getSupportedTypes();
    
            for (int j = 0; j < types.length; j++) {
                MediaCodecInfo.CodecCapabilities capabilities = codecInfo.getCapabilitiesForType(types[j]);
    
                Log.d("CodecCapabilities", new Gson().toJson(capabilities));
    
                //MediaCodecInfo.VideoCapabilities videoCapabilities = capabilities.getVideoCapabilities();
                //Log.d("videoCapabilities", new Gson().toJson(videoCapabilities));
            }
        }
    }
    

    上面给了我这个,下面的profile和level的数字告诉我什么与视频功能有关?

    {"colorFormats":[21,2130708361],"profileLevels":[{"level":2048,"profile":1},{"level":2048,"profile":2},{"level":2048,"profile":8}],"flags":0}
    

    如果我在上面的代码中取消注释这两行,它将崩溃,并显示以下错误消息:

    java.lang.NoSuchMethodError: android.media.MediaCodecInfo$CodecCapabilities.getVideoCapabilities
    

    如何查询android设备,了解视频功能?我想知道设备能够处理的最大视频比特率和视频分辨率。

    1 回复  |  直到 6 年前
        1
  •  2
  •   E.Abdel    5 年前

    我猜你是在一个运行API<21的设备上测试你的代码?如果是这样的话 getVideoCapabilies method is available only on devices running Android >= 21

    无论如何,要获得比特率和支持的宽度和高度 Ranges (API>=21太…Humm可能与获取视频功能的可用性有关。。。我不知道:)),你可以使用:

    Range<Integer> bitrateRange = videoCapabilities.getBitrateRange();
    Range<Integer> heightRange = videoCapabilities.getSupportedHeights();
    Range<Integer> widthRange = videoCapabilities.getSupportedWidths();
    

    您可以看看我几天前发布的要点,以获取给定编解码器的所有功能(颜色、配置文件和级别是按名称而不是数字打印的,这可能非常有用): TestMediaCodecInfoAsyncTask.java