使用 Camera2(在 Android 版本 21 上)API 录制 60fps 视频

Sun*_*Kim 5 android video-recording android-5.0-lollipop android-camera2

我正在尝试在 Camera2(android.hardware.camera2) API 上以 60(或更高)fps 的速率录制视频。

最后,我使用CameraConstrainedHighSpeedCaptureSession以 120fps 的速度成功录制。但它仅针对 >=120fps 的用例而不是 60fps。

即使我尝试使用普通捕获会话(CameraCaptureSession)以 60fps 进行录制,它也仅支持 <=30fps。我可以通过下面的代码弄清楚。

Range<Integer>[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用 Camera2 API 以 60fps 的速度进行录制。

任何想法都会受到欢迎。

谢谢。

Fra*_*cia 1

您必须ConstrainedHighSpeedCaptureSession从 CameraDevice 创建一个并实例化一个新会话,就像您对普通捕获会话所做的那样。

您还需要为您的构建器设置下一个值:

myPreviewRequestBuilder.set(CaptureRequest.CONTROL_MODE, CaptureRequest.CONTROL_MODE_USE_SCENE_MODE);
myPreviewRequestBuilder.set(CaptureRequest.CONTROL_SCENE_MODE, CaptureRequest.CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO);
myPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, new Range<Integer>(frameRate, frameRate));
Run Code Online (Sandbox Code Playgroud)

之后,使用您的构建器生成 CaptureRequestList:

 myHighSpeedRequestList = ((CameraConstrainedHighSpeedCaptureSession) cameraCaptureSession).createHighSpeedRequestList(myPreviewRequestBuilder.build());
Run Code Online (Sandbox Code Playgroud)

并在您的捕获会话中使用它来生成 CaptureSession:

mCaptureSession.setRepeatingBurst(myHighSpeedRequestList,
                                  YourHighSpeedVideoCaptureCallback,
                                  YourBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

  • 此答案无效。您不能使用高速捕获会话来进行 60 FPS 录制。 (6认同)
  • 这不是适合 &gt;= 120 fps 的视频拍摄吗? (3认同)
  • @FranciscoDurdinGarcia 我完全不同意你的回答。到底为什么文档中关于“CameraConstrainedHighSpeedCaptureSession”的内容会如此错误? (2认同)