首页 > 解决方案 > 如何将 VideoCapture 设置为应用本地存储

问题描述

我有一个使用 CameraX 录制视频的应用程序。当我将输出位置设置为正常的外部照片库位置时,一切正常。例如:

val outputFileOptions = VideoCapture.OutputFileOptions.Builder(
        this.contentResolver,
        MediaStore.Video.Media.EXTERNAL_CONTENT_URI, //Use this to save in normal Gallery
        contentValues
    ).build()

    videoCapture?.startRecording(
        outputFileOptions,
        cameraExecutor,
        object : VideoCapture.OnVideoSavedCallback {
            override fun onVideoSaved(outputFileResults: VideoCapture.OutputFileResults) {
                Timber.i("onVideoSaved outputFileResults: $outputFileResults")
            }

            override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) {
                cause?.printStackTrace()
                Timber.e("onError message: $message cause: $cause")
            }
        })

...会工作得很好。

当我尝试使用应用程序本地位置设置它时,虽然它崩溃了:java.lang.IllegalArgumentException: Unknown URL file:///data/user/0/com.company.appname/files/VIDEO_20210228_153240.mp4

现在,该文件可以完美地处理其他事情,例如将其作为输出位置提供给 MediaRecorder。

我就是这样做的:

    val file = createVideoFile() //Creates the file mentioned above
    val uri = file.toUri()

    val outputFileOptions = VideoCapture.OutputFileOptions.Builder(
        this.contentResolver,
        uri,
        contentValues
    ).build()

请问有谁知道我做错了什么?

标签: androidandroid-camerax

解决方案


推荐阅读