[英]Video recording with cameraX 1.0.0-beta11 not working
我正在嘗試使用最新版本的 cameraX 1.0.0-beta11 錄制視頻,但我在錄制視頻時遇到了問題。
啟動相機和錄制視頻的代碼片段。
@SuppressLint("RestrictedApi")
private fun startCameraX() {
val cameraProviderFuture = ProcessCameraProvider.getInstance(activity!!)
cameraProviderFuture.addListener(Runnable {
// Used to bind the lifecycle of cameras to the lifecycle owner
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
// Preview
val preview = Preview.Builder()
.build()
.also {
it.setSurfaceProvider(previewView.surfaceProvider)
}
val videoCapture=VideoCapture.Builder().setVideoFrameRate(15).build()
val videoFile = File(
getOutputDirectory(),
SimpleDateFormat(FILENAME_FORMAT, Locale.US
).format(System.currentTimeMillis()) + ".mp4")
val outputOptions = VideoCapture.OutputFileOptions.Builder(videoFile).build()
videoCapture.startRecording(outputOptions, ContextCompat.getMainExecutor(activity), object: VideoCapture.OnVideoSavedCallback{
override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) {
Log.e("data","onVideoSaved")
}
override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
Log.e("data", "onError->$message")
}
})
// Select back camera as a default
val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
try {
// Unbind use cases before rebinding
cameraProvider.unbindAll()
// Bind use cases to camera
cameraProvider.bindToLifecycle(
(this as LifecycleOwner), cameraSelector, preview, videoCapture)
} catch(exc: Exception) {
Log.e("TAG", "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(activity))
}
輸出目錄
private fun getOutputDirectory(): File {
val mediaDir = activity?.externalMediaDirs?.firstOrNull()?.let {
File(it, resources.getString(R.string.app_name)).apply { mkdirs() } }
return if (mediaDir != null && mediaDir.exists())
mediaDir else activity!!.filesDir
}
錯誤 - 未綁定到相機 [androidx.camera.core.VideoCapture@4bd02a4]
請幫忙!! 提前致謝。
您必須在調用 startRecording 函數之前啟動相機。 基本上你應該在一個函數中輸出以下代碼。
val videoFile = File(
getOutputDirectory(),
SimpleDateFormat(FILENAME_FORMAT, Locale.US
).format(System.currentTimeMillis()) + ".mp4")
val outputOptions = VideoCapture.OutputFileOptions.Builder(videoFile).build()
videoCapture.startRecording(outputOptions, ContextCompat.getMainExecutor(activity), object: VideoCapture.OnVideoSavedCallback{
override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) {
Log.e("data","onVideoSaved")
}
override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
Log.e("data", "onError->$message")
}
})
並在用戶單擊錄制按鈕時調用它,然后,當用戶單擊停止按鈕時,您可以停止錄制
videoCapture.stopRecording()
一旦調用了 stopRecording 函數,如果一切正常,就會調用 onVideoSaved 函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.