我一直在使用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?我可以采取另一种方法吗?还是我做错了什么?
答案 0 :(得分:0)
我认为这是不可能的,尽管三星Galaxy S9 +可以录制高达960 fps的慢动作。 只有系统应用程序可以执行此操作,第三方应用程序则不能。
答案 1 :(得分: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);