【问题标题】:Recording 60fps video with Camera2(on Android version 21) API使用 Camera2(Android 版本 21)API 录制 60fps 视频
【发布时间】:2016-10-25 10:04:21
【问题描述】:

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

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

即使我尝试使用普通捕获会话 (CameraCaptureSession) 以 60fps 的速度录制,它也只支持

Range<Integer>[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);

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

欢迎提出任何想法。

谢谢。

【问题讨论】:

  • 你找到解决办法了吗?

标签: android android-5.0-lollipop video-recording android-camera2


【解决方案1】:

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

您还需要为您的 Builder 设置下一个值:

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));

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

 myHighSpeedRequestList = ((CameraConstrainedHighSpeedCaptureSession) cameraCaptureSession).createHighSpeedRequestList(myPreviewRequestBuilder.build());

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

mCaptureSession.setRepeatingBurst(myHighSpeedRequestList,
                                  YourHighSpeedVideoCaptureCallback,
                                  YourBackgroundHandler);

【讨论】:

  • 这不是用于 >= 120 fps 的视频捕获吗?
  • 我修改了 CONTROL_AE_TARGET_FPS_RANGE 以获得我想要使用的范围
  • 我不能分享很多这段代码:S。但无论如何,我只是创建一个 ConstrainedHighSpeedCaptureSession,将我之前发布的 3 个集合添加到构建器,创建列表并设置 RepeatingBurst。没有别的,只是捕获异常和一些条件以避免相机设备或会话为空时强制关闭
  • 此答案无效。您不能使用高速捕获会话进行 60 FPS 录制,期间。
  • @FranciscoDurdinGarcia 我完全不同意你的回答。为什么CameraConstrainedHighSpeedCaptureSession 的文档会如此错误?
【解决方案2】:

使用以下代码:

private fun recordSession() {
    setUpMediaRecorder()

    val surfaceTexture = textureView.surfaceTexture

    surfaceTexture?.setDefaultBufferSize(mPreviewSize!!.width, mPreviewSize!!.height)
    captureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD)
    val surfaces = ArrayList<Surface>()

    val textureSurface = Surface(surfaceTexture)
    surfaces.add(textureSurface)
    captureRequestBuilder.addTarget(textureSurface)


    val recordSurface = mediaRecorder.surface
    surfaces.add(recordSurface)
    captureRequestBuilder.addTarget(recordSurface)


    mCameraDevice.createCaptureSession(
        surfaces,
        object : CameraCaptureSession.StateCallback() {

            override fun onConfigured(session: CameraCaptureSession) {
                captureSession = session
                val fps: Int = if (PreferenceProvider.getIsFrontCameraOpened()) {
                    PreferenceProvider.getFrontCameraVideoFrameRate()
                } else {
                    PreferenceProvider.getBackCameraVideoFrameRate()
                }
                captureRequestBuilder.set(
                    CaptureRequest.CONTROL_MODE,
                    CaptureRequest.CONTROL_MODE_USE_SCENE_MODE
                )
                captureRequestBuilder.set(
                    CaptureRequest.CONTROL_SCENE_MODE,
                    CaptureRequest.CONTROL_SCENE_MODE_HIGH_SPEED_VIDEO
                )
                captureRequestBuilder.set(
                    CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE,
                    Range(fps, fps)
                )
                captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, currentExposureLevel)
                updatePreview()
                isRecording = true
                mediaRecorder.start()
            }

            override fun onConfigureFailed(session: CameraCaptureSession) {
                showLog(TAG, "Failed to create CameraRecordSession!")
            }

        },
        mBackgroundHandler
    )
}

注意:确保您在 MediaRecorder Configs 中设置相同的帧速率(即 60)以获得 60fps 的视频效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多