在 Android 上访问高 fps 相机

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

有些手机官方支持高 fps 录制,例如 Galaxy S5 和 S6。我尝试了两者,两者都可以使用默认相机应用程序录制高 fps 视频(60 甚至 120 fps)。 (或者在 S6 上使用 Gear VR 的“直通相机”功能。)但是:当您通过标准 Android API 查询相机的功能时(在 4.4 和 5.0 上的 S5 以及 5.1 上的 S6 上尝试过,旧版和新版都尝试过)在所有情况下,30 fps 被报告为可用的最高帧率。这是否意味着这些手机使用私有 API 来访问高 fps 功能,并且没有标准方法来访问更高 fps?这是制造商的缺点(可能会随着未来的软件版本或手机而改变)还是我只是错过了一些东西? 我什至不需要慢动作,只需要高帧率相机来实时使用,所以 60 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”,所以我什至不需要它来达到60fps。不管怎样,我查询了这个功能,但 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 video using new Camera API 但我的问题更为笼统,既不特定于旧的相机 API,也不特定于新的相机 API,也不特定于特定设备。我也很好奇其他新旗舰设备通过标准 API 报告的支持 fps 的内容,因为我只能在 3 台设备上进行测试。

android camera frame-rate camera2
1个回答
0
投票

经过与三星开发人员支持的多次讨论,我可以向您保证以下内容:

三星从未正式支持 60 FPS。它肯定可以在 S9、S10、S20(常规)上使用,但在 S20 和 S21 Snapdragon/美国版本上有一个错误 - 它在 Exynos/全球版本上仍然像魅力一样工作 - 如果需要,我可以从这两个版本进行屏幕录制。我已向三星报告并等待答复。

您可以使用高速捕捉,但它仅设计用于 120 FPS 或 240 FPS。目前,他们的 S21 系列和 S20 Plus 和 Ultra Snapdragon/美国版本声明并批准 120/240 可用 - 但它不起作用。 Exynos/全球版本一切正常。

如果您问自己 - 为什么高速返回范围也为 [30:120] 和 [60:120] - 这些范围是为预览模式设计的,如果您将其用于录制 - 您将获得 FPS 30 到 120 - 取决于您获得的光量。例如:在一次录制中您将获得 90 FPS,而在另一次录制中您将获得 120 FPS。如果您使用 [120:120],您只能保证稳定的 120 FPS,如果您使用高速会话,则不会获得 [60:60] 或 [90:90] - 只有 120 或 240。

您可以在我的 Facebook 页面上关注我与他们的所有讨论: https://www.facebook.com/Background-video-recorder-Ultimate-121145775953677 欢迎您分享我的帖子或联系他们的支持和投诉。

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