2016-04-28 61 views
2

虽然谷歌搜索,我有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. 
+0

在API21(Lollipop)之上,如果设备具有REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO能力,Camera2 API提供了一种能够获得如下支持的fps范围的方法。范围 [] ranges = map.getHighSpeedVideoFpsRanges(); –

+0

我无法获得前置摄像头的fps,例如。 String cameraId = manager.getCameraIdList()[1]; – ashishdhiman2007

+1

@ ashishdhiman2007如果你无法从前置摄像头获得fps,有两种可能性,上面的这些代码不适合你。 1.您的前置摄像头不是全高。从棒棒糖中,Camera2 api将摄像头分为三个级别(FULL,LEGACY,LIMITED)。 2.您的前置摄像头为FULL_LEVEL,但不支持高速fps记录。上面的代码正确工作,而相机(正面或背面)支持高速fps记录。 –

回答

0

您可以通过CamcoderProfile获取信息开始API-21,如下所示:

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; 
    //... 
    } 
} 

这会给你提供的最低配置文件支持的高速拍摄。我怀疑有那么多的棒棒糖设备有这样的硬件可能性(如果有的话),所以这应该让你覆盖。

+0

谢谢@sichevoid。但是这对我来说并不奏效,即使我尝试过支持120fps录制的Galaxy S6。你试过这个代码的哪个设备? –

+0

@SunggookKim它适用于Nexus 6P。不幸的是,我没有Galaxy S6。我建议你在S6上尝试其他CamcorderProfile.QUALITY_HIGH_SPEED_ *个人资料变体。 – sichevoid

+0

我尝试了所有以“QUALITY_HIGH_SPEED_”开头的其他CamcorderProfile,但没有全部正在工作。我认为这与设备的规格有关。另外,我认为,如果我们尝试通过API 21来完成,我们可以使用原始帖子中添加的StreamConfigurationMap。 –