如何知道Android设备在API级别支持的最大fps?

问题描述 投票:0回答:1

在谷歌搜索时,我得到了此信息,如果我想让我的相机在 Android 设备上录制高帧率视频,我需要由设备供应商输入特定参数来调用相机 API。

例如,通过调用以下方法,我可以使我的 Galaxy S6 相机应用程序持续录制 120 fps。

camera = Camera.open();
Camera.Parameters parms = camera.getParameters();

// for 120fps
parms.set("fast-fps-mode", 2); // 2 for 120fps
parms.setPreviewFpsRange(120000, 120000);

但问题是并非所有设备(包括 LG 和其他供应商)都支持 120 fps(或更高)。因此,在运行相机应用程序以进行错误处理时,我需要实时了解 API 级别的最大 fps。

就我而言,Camera.Parameters.getSupportedPreviewFpsRange()对我不起作用。 即使它可以以 120000(120 fps)录制,它也只能返回最大 30000(即 30 fps)。我认为这是因为高帧率(超过 30 fps)录制与相机硬件属性密切相关,这就是为什么我需要调用供应商特定的 API。

API 级别是否有一种通用方法可以通过相机设备获得最大 fps?

---------------------- 编辑 ----------------------

在 API21(LOLLIPOP) 上,我们可以使用 StreamConfigurationMap 来获取高速 fps 录制的最大值。使用方法如下。

CameraManager manager = (CameraManager)activity.getSystemService(Context.CAMERA_SERVICE);
String cameraId = manager.getCameraIdList()[0];
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId);
StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Range<Integer>[] fpsRange = map.getHighSpeedVideoFpsRanges(); // this range intends available fps range of device's camera.
android camera max frame-rate
1个回答
0
投票

您可以通过启动 API-21 的 CamcoderProfile 获取该信息,如下所示:

for (String cameraId : manager.getCameraIdList()) {
    int id = Integer.valueOf(cameraId);
    if (CamcorderProfile.hasProfile(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW)) {
    CamcorderProfile profile = CamcorderProfile.get(id, CamcorderProfile.QUALITY_HIGH_SPEED_LOW);
    int videoFrameRate = profile.videoFrameRate;
    //...
    }
}

这将为您提供支持高速捕获的最低可用配置文件。我怀疑有很多棒棒糖之前的设备具有这样的硬件可能性(如果有的话),所以这应该可以帮助您。

© www.soinside.com 2019 - 2024. All rights reserved.