簡體   English   中英

使用cameraX 1.0.0-beta11錄制視頻不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM