【问题标题】:Video recording with cameraX 1.0.0-beta11 not working使用 cameraX 1.0.0-beta11 录制视频不起作用
【发布时间】:2020-10-29 17:41:21
【问题描述】:

我正在尝试使用最新版本的 cameraX 1.0.0-beta11 录制视频,但在录制时遇到问题。

代码 sn-p 启动摄像头并录制视频。

@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]

请帮忙!! 提前致谢。

【问题讨论】:

  • 您必须使用 1.0.0-beta11 版本还是可以使用旧版本的 CameraX 库(例如 1.0.0-beta01)?
  • @lincollincol 我必须使用最新版本的 camX
  • 这里有一个很棒的带有图片和视频捕获功能的 CameraX 示例。我在工作中的信使中实现相机时正在使用它。 github.com/iambaljeet/CameraXView 但是基于 1.0.0-beta01 的示例。真的不知道新版本的变化。你可以试试看。
  • @lincollincol 感谢您的链接,它适用于旧版本,但我需要使用最新版本。
  • 您的问题是什么?你能分享一下它的细节吗?

标签: android camera android-camera video-capture android-camerax


【解决方案1】:

您必须在调用 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函数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2019-12-09
    相关资源
    最近更新 更多