有些手机官方支持高 fps 录制,例如 Galaxy S5 和 S6。我尝试了两者,两者都可以使用默认相机应用程序录制高 fps 视频(60 甚至 120 fps)。(或者在使用 Gear VR 的“Passthrough Camera”功能的 S6 上。)但是:当您通过标准 Android API 查询相机的功能时(在 4.4 和 5.0 上的 S5 和 5.1 上的 S6 上都尝试过,旧的和新的都试过了) camera2 APIs)在所有情况下,30 fps 被报告为最高可用。这是否意味着这些手机使用私有专有 API 来访问高 fps 功能,而没有标准方法来访问更高 fps?这是制造商的缺点(可能会随着未来的软件版本或手机而改变)还是我只是错过了什么?我什至不需要慢动作,
我尝试在旧相机 API 中查询相机 fps 的示例;
List<Camera.Size> a = camera.getParameters().getSupportedPreviewSizes();
List<int[]> b = camera.getParameters().getSupportedPreviewFpsRange();
int[] c = new int[2];
camera.getParameters().getPreviewFpsRange(c);
在 camera2 API 中相同:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
Range<Integer>[] fpsRange = cc.get(cc.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
}
我只得到范围:[15, 15], [24, 24], [10, 30], [15, 30], [30, 30](旧相机 API 的范围更小)。
在 camera2 API 中,我找到了一些访问高 fps 摄像机记录的方法:createConstrainedHighSpeedCaptureSession()。但它将高速视频录制定义为“帧速率 >=120fps”,所以我什至不需要 60 fps。无论如何,我查询了此功能,但似乎 S6 不支持它。我试过的代码:
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String[] cameras = manager.getCameraIdList();
for(String camera : cameras) {
CameraCharacteristics cc = manager.getCameraCharacteristics(camera);
CameraCharacteristics.Key<int[]> aa = cc.REQUEST_AVAILABLE_CAPABILITIES;
for (int i = 0; i < cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES).length; i++) {
Log.e(TAG, "Capability: " + cc.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i]);
}
}
它说它只支持功能 0、1、2、3、5、6。REQUEST_AVAILABLE_CAPABILITIES_CONSTRAINED_HIGH_SPEED_VIDEO 将是 9。
在这一点上,如果怀疑这些功能确实无法通过这些手机上的标准 API 获得的想法,我已经用完了。任何帮助表示赞赏。
我知道这个问题与此非常相似/相关:Capture high fps videos using new Camera API 但我的问题更笼统,既不针对旧相机 API 也不针对新相机 API 或特定设备。我也很好奇其他新旗舰设备通过标准 API 报告了什么支持 fps,因为我只能在 3 台设备上测试它。