该问题的解决方法是使用Camera2 API而不是CameraX。以下是使用Camera2 API启用视频捕获用例的示例代码:
private void startRecording() { try { setUpMediaRecorder(); SurfaceTexture surfaceTexture = textureView.getSurfaceTexture(); surfaceTexture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight()); Surface previewSurface = new Surface(surfaceTexture); Surface recordSurface = mediaRecorder.getSurface(); captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); captureRequestBuilder.addTarget(previewSurface); captureRequestBuilder.addTarget(recordSurface); cameraDevice.createCaptureSession(Arrays.asList(previewSurface, recordSurface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
if (null == cameraDevice) {
return;
}
cameraCaptureSessions = cameraCaptureSession;
updatePreview();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// UI
recording = true;
mediaRecorder.start();
}
});
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Log.e(TAG, "onConfigureFailed: Start recording failed");
}
}, backgroundHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
请注意,setUpMediaRecorder()方法应按需自定义以满足您的需求。如果您使用Camera2 API而不是CameraX,则通常不会遇到此问题。