1

我一直在使用 Camera2 API 编写一个应用程序来捕捉慢动作镜头。我知道三星 Galaxy S9+ 可以录制高达 960 fps 的慢动作,而对于这个特定项目,我需要录制 480 fps。

我遇到的问题是 720p 或 1080p 的 map.getHighSpeedVideoFpsRangesFor() 返回 [240, 240] 的最大范围,如果我尝试手动给 CaptureRequest.Builder 一个 [480, 480] 范围,我会得到这个异常:

IllegalArgumentException while invoking public abstract void android.hardware.camera2.CameraCaptureSession$StateCallback.onConfigured(android.hardware.camera2.CameraCaptureSession)
                 java.lang.IllegalArgumentException: Fps range [480, 480] in the request is not a supported high speed fps range [[120, 120], [240, 240], [60, 120], [30, 120], [60, 240], [30, 240]]
                     at android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces(SurfaceUtils.java:151)
                     at android.hardware.camera2.impl.CameraConstrainedHighSpeedCaptureSessionImpl.createHighSpeedRequestList(CameraConstrainedHighSpeedCaptureSessionImpl.java:83)
                     at ch.package.app.RecordActivity.updatePreview(RecordActivity.java:655)
                     at ch.package.app.RecordActivity.access$700(RecordActivity.java:74)
                     at ch.package.app.RecordActivity$3.onConfigured(RecordActivity.java:257)
                     at android.hardware.camera2.impl.CameraConstrainedHighSpeedCaptureSessionImpl$WrapperCallback.onConfigured(CameraConstrainedHighSpeedCaptureSessionImpl.java:398)
                     at java.lang.reflect.Method.invoke(Native Method)
                     at android.hardware.camera2.dispatch.InvokeDispatcher.dispatch(InvokeDispatcher.java:39)
                     at android.hardware.camera2.dispatch.HandlerDispatcher$1.run(HandlerDispatcher.java:65)
                     at android.os.Handler.handleCallback(Handler.java:789)
                     at android.os.Handler.dispatchMessage(Handler.java:98)
                     at android.os.Looper.loop(Looper.java:164)
                     at android.os.HandlerThread.run(HandlerThread.java:65)

是否无法通过 API 在此设备上录制 480 FPS?我可以采取另一种方法吗?还是我做错了什么?

4

2 回答 2

0

Galaxy S9 可以做到 [120, 120]。也可能是 [240,240]。您必须使用录制模板才能达到稳定的帧速率。如果天黑 - FPS 会下降。

mCameraDevice2.createCaptureRequest(CameraDevice.TEMPLATE_RECORD)

它不能达到更多。即使是 S20 和 S21 也几乎无法支持 240,相信我 - 我已经尝试过了。您可以查看我的频道以获取屏幕录制示例。例如: https ://youtu.be/ioCqSn1Qdqs

我在三星支持网站上多次质疑这个话题——他们的官方回答是——他们不允许超过 30 FPS。

顺便说一句 - 您还需要检查 mediarecorder 是否支持快速/高速配置文件,否则它将无法记录。像这样检查:

if (resolution == 720 && CamcorderProfile.hasProfile(camID, CamcorderProfile.QUALITY_HIGH_SPEED_720P))
                profile = CamcorderProfile.get(camID, CamcorderProfile.QUALITY_HIGH_SPEED_720P);
于 2021-08-05T17:05:45.197 回答
0

我认为这是不可能的,尽管三星 Galaxy S9+ 可以录制高达 960 fps 的慢动作。只有系统应用程序可以做到这一点,第三方应用程序不能。

于 2019-11-29T07:49:10.607 回答