現在、サービスでcamera2 apiを使用してビデオを録画しています。カメラサービスの録画
プレビューサーフェイスが破棄されたときに、カメラセッションの出力リストを更新する方法が見つかりません。言い換えれば、ある表面が破壊されたとき(例えば、活動がバックグラウンドになるとき)に、記録を維持し、ヌルサーフェスによるクラッシュを避けるときの対応。
これは、私がビデオの録画を開始する方法です。
private void startRecordingVideo() {
if (null == mCameraDevice || null == mPreviewSize) {
return;
}
try {
closePreviewSession();
setUpMediaRecorder();
mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
List<Surface> surfaces = new ArrayList<>();
if(mTextureView !=null) {
SurfaceTexture texture = mTextureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); // Set up Surface for the camera preview
previewSurface = new Surface(texture);
surfaces.add(previewSurface);
mPreviewBuilder.addTarget(previewSurface);
}
// Set up Surface for the MediaRecorder
Surface recorderSurface = mMediaRecorder.getSurface();
surfaces.add(recorderSurface);
mPreviewBuilder.addTarget(recorderSurface);
// Start a capture session
// Once the session starts, we can update the UI and start recording
mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
mPreviewSession = cameraCaptureSession;
updatePreview();
mMediaRecorder.start();
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) {
Timber.e("Error when creating captureSession");
}
}, mBackgroundHandler);
} catch (CameraAccessException | IOException e) {
e.printStackTrace();
}
}
アクティビティをバックグラウンドに送信すると、プレビューサーフェスが破棄され、これが苦労します。進行中のキャプチャを停止せずにプレビューサーフェイスをセッション出力から削除するには、キャプチャセッションをどのように更新する必要がありますか?