我正在尝试在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);我不知道如何用Camera2 API录制60fps的视频。
任何想法都是最受欢迎的。
谢谢。
发布于 2016-06-27 21:17:24
您必须从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);发布于 2022-02-22 11:17:57
使用以下代码:
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配置中设置相同的帧率(即60),才能在视频中获得60fps的效果。
https://stackoverflow.com/questions/37985383
复制相似问题