【问题标题】:How to query the Video Capabilities of an Android device?如何查询安卓设备的视频功能?
【发布时间】:2018-08-02 19:23:41
【问题描述】:
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));
        }
    }
}

上面给了我这个,以下个人资料和级别的数字告诉我与视频功能相关的任何信息?

{"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 video video-streaming android-mediacodec exoplayer


    【解决方案1】:

    我猜您是在运行 API getVideoCapabilies method is available only on devices running Android >= 21

    无论如何,要获得比特率和支持的宽度和高度Ranges(API >=21 也...嗯可能与 getVideoCapabilies 可用性有关...我不知道:)),您可以使用:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多