VideoCapture 錄影
本篇說明使用 VideoCapture 錄影及錄音。
VideoCapture
ImageCapture 是取得照片的重要物件,而 VideoCapture 則是取得錄影的物件。上一篇相機拍照中雖有說到大部份的手機不允許 ImageCapture 及 VideoCapture 二者共存在 useCaseGroup 中,但小米手機就是可以,而且錄影期間進行拍照,錄影完全不會停頓。所以本篇就以 VideoCapture 進行錄影。
previewCamera 設定
首先 MahalCamerax 的 previewCamera 方法的 UseCaseGroup 增加 videoCapture。請注意 imageAnalysis 不能與 videoCapture 同時並存,所以記得把 imageAnalysis 拿掉,修改後的結果如下。
class MahalCameraX(....){
val recorder = Recorder.Builder()
.setQualitySelector(qualitySelector)
.build()
val videoCapture = VideoCapture.withOutput(recorder)
fun previewCamera(){
var preview= Preview.Builder()
.setTargetAspectRatio(AspectRatio.RATIO_16_9)
.build()
preview.setSurfaceProvider(cameraScreen.surfaceProvider)
val cameraProviderFuture= ProcessCameraProvider.getInstance(context)
cameraProviderFuture.addListener(
Runnable {
val cameraProvider=cameraProviderFuture.get()
val cameraLens= CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build()
val useCaseGroup = UseCaseGroup.Builder()
.addUseCase(preview)
.addUseCase(imageCapture)
//.addUseCase(imageAnalysis)
.addUseCase(videoCapture)
.build()
try{
cameraProvider.unbindAll()
camera=cameraProvider.bindToLifecycle(
context as MainActivity,cameraLens,useCaseGroup
)
}
catch(e:Exception){}
},
ContextCompat.getMainExecutor(context)
)
}
}
startRecordVideo
在 MahalCameraX 先新增 recording 及 recordingListener 二個物件變數,然後在 startRecordVideo 方法使用 videoCapture.output 即可啟動錄影
