从录制的视频中获取路径
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?.path
将 videoUri
转换为路径,但它总是 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.
以来已基本被禁止
该方案更有可能是 content
。 Uri
可以指向:
- 您的应用可以读取的外部存储上的本地文件
- 外部存储上的本地文件,但位于您的应用无法读取的位置
- 另一个应用程序的内部存储上的本地文件
- 可移动存储上的本地文件
- 一个加密的本地文件,需要即时解密
- 数据库中 BLOB 列中保存的字节流
- 一段内容需要其他应用先下载
- ...等等
而且,就像 https
URL 一样,没有神奇的方法可以将 Uri
的路径部分转换为某个文件系统路径。
i need file system path because i want to process it using FFmpeg later
我首先要看看是否有人拥有可以与 Uri
.
一起使用的 FFmpeg 包装器
如果那不可用,那么您将需要复制您控制的文件中的内容:
- 使用
ContentResolver
和 openInputStream()
获取内容的 InputStream
,传递您的 Uri
- 在某个文件上打开
FileOutputStream
(例如,在 getCacheDir()
中)
- 将字节从
InputStream
复制到 FileOutputStream
(Kotlin 对此有一些很好的扩展函数)
或者,不使用 ACTION_VIDEO_CAPTURE
,而是使用相机库并直接在您的应用中拍摄视频,而不是尝试依赖第三方应用来拍摄视频。
目前我正在开发一个简单的应用程序来使用 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?.path
将 videoUri
转换为路径,但它总是 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.
该方案更有可能是 content
。 Uri
可以指向:
- 您的应用可以读取的外部存储上的本地文件
- 外部存储上的本地文件,但位于您的应用无法读取的位置
- 另一个应用程序的内部存储上的本地文件
- 可移动存储上的本地文件
- 一个加密的本地文件,需要即时解密
- 数据库中 BLOB 列中保存的字节流
- 一段内容需要其他应用先下载
- ...等等
而且,就像 https
URL 一样,没有神奇的方法可以将 Uri
的路径部分转换为某个文件系统路径。
i need file system path because i want to process it using FFmpeg later
我首先要看看是否有人拥有可以与 Uri
.
如果那不可用,那么您将需要复制您控制的文件中的内容:
- 使用
ContentResolver
和openInputStream()
获取内容的InputStream
,传递您的Uri
- 在某个文件上打开
FileOutputStream
(例如,在getCacheDir()
中) - 将字节从
InputStream
复制到FileOutputStream
(Kotlin 对此有一些很好的扩展函数)
或者,不使用 ACTION_VIDEO_CAPTURE
,而是使用相机库并直接在您的应用中拍摄视频,而不是尝试依赖第三方应用来拍摄视频。