虽然谷歌搜索,我有this information,如果我想让我的相机在Android设备上录制高帧频视频,我需要通过设备供应商提供的特定参数调用相机API。如何在API级别上通过android设备了解最大支持的fps?
例如,通过调用下面的方法,我可以使我的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()不适合我。 它只能返回最高30000(即30fps),即使它可以在120000(120 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.
在API21(Lollipop)之上,如果设备具有REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO能力,Camera2 API提供了一种能够获得如下支持的fps范围的方法。范围 [] ranges = map.getHighSpeedVideoFpsRanges(); –
我无法获得前置摄像头的fps,例如。 String cameraId = manager.getCameraIdList()[1]; – ashishdhiman2007
@ ashishdhiman2007如果你无法从前置摄像头获得fps,有两种可能性,上面的这些代码不适合你。 1.您的前置摄像头不是全高。从棒棒糖中,Camera2 api将摄像头分为三个级别(FULL,LEGACY,LIMITED)。 2.您的前置摄像头为FULL_LEVEL,但不支持高速fps记录。上面的代码正确工作,而相机(正面或背面)支持高速fps记录。 –