从录制的视频中获取路径

Get path from recorded video

目前我正在开发一个简单的应用程序来使用 kotlin 录制视频,但是当我想从我之前录制的视频中获取绝对路径时我遇到了困难。这是我用 kotlin

编写的代码
    private fun dispatchTakeVideoIntent() {
        val intent = Intent(MediaStore.ACTION_VIDEO_CAPTURE)
        startActivityForResult(intent, 1)
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK) {
            val videoUri: Uri? = data?.data
            val file = File(videoUri?.path)
        }
    }

我已经使用 videoUri?.pathvideoUri 转换为路径,但它总是 return 我用 /external/video/media/55 之类的东西,而我的视频文件路径是 [=14] =]

我可以获取文件路径而不是录制视频的 uri 吗?任何帮助或提示将不胜感激。

PS :这可能在之前的另一个问题中被问过:How to get recorded video path in android ? 但它没有任何可接受的答案所以我认为可以再问一次。

Could i get the file path instead of uri of my recorded video ?

不需要将视频记录为文件系统上的文件,更不用说在可以通过文件系统 API 访问的位置了。

如果 returned Uri 的方案恰好是 file,那么 getPath() 将 return 为文件的文件系统路径。但是,无法保证您可以使用该文件,并且 file 方案自 Android 7.0.

以来已基本被禁止

该方案更有可能是 contentUri 可以指向:

  • 您的应用可以读取的外部存储上的本地文件
  • 外部存储上的本地文件,但位于您的应用无法读取的位置
  • 另一个应用程序的内部存储上的本地文件
  • 可移动存储上的本地文件
  • 一个加密的本地文件,需要即时解密
  • 数据库中 BLOB 列中保存的字节流
  • 一段内容需要其他应用先下载
  • ...等等

而且,就像 https URL 一样,没有神奇的方法可以将 Uri 的路径部分转换为某个文件系统路径。

i need file system path because i want to process it using FFmpeg later

我首先要看看是否有人拥有可以与 Uri.

一起使用的 FFmpeg 包装器

如果那不可用,那么您将需要复制您控制的文件中的内容:

  • 使用 ContentResolveropenInputStream() 获取内容的 InputStream,传递您的 Uri
  • 在某个文件上打开 FileOutputStream(例如,在 getCacheDir() 中)
  • 将字节从 InputStream 复制到 FileOutputStream(Kotlin 对此有一些很好的扩展函数)

或者,不使用 ACTION_VIDEO_CAPTURE,而是使用相机库并直接在您的应用中拍摄视频,而不是尝试依赖第三方应用来拍摄视频。