我在 Android 上使用 FFMPEG 来更改未在我的应用程序中录制的视频的比特率等。
我面临的问题是我无法获得用户从 SD 卡中选择的视频的绝对路径。
我正在使用 Android 存储访问框架,目前获得以下 Uri:content://com.android.externalstorage.documents/document/9C33-6BBD%3AVideos%2Freaps-driving.mp4
我使用的 FFMPEG 命令:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String[] cmd = {"-y", "-i", mVideoUri.toString(), "-c:v", "libx264", "-preset", "ultrafast", "-strict", "-2", "-s", optimalVideoSize, "-aspect", "16:9", "-b", bitrate, String.format("/storage/emulated/0/Movies/InstaVid/VID_INSTAVID%s.mp4", timeStamp)};
executeFFmpegBinary(cmd, timeStamp);
我用
mVideoUri.toString()
没关系或 mVideoUri.getPath()
.有什么办法可以得到绝对路径吗?
最佳答案
The problem I'm facing is that I can't get the absolute path for a video the user selects from the SD Card
首先,存储访问框架不限于可移动存储。据您所知,如果用户从 Google Drive 中选择一些东西,那么视频目前甚至不在设备上。在另一个例子中,谷歌刚刚发布了一个 Samba 存储提供程序,如果用户使用它,则内容存在于 LAN 的某个文件服务器上,而不是设备上。
其次,您无法通过文件系统 API 访问可移动存储,除了几个选择区域(例如
getExternalFilesDirs()
)。用户可以选择外面的视频。Is there any way I can get the absolute path?
不,您的选择是:
ffmpeg
的文件。 . ContentResolver
和 openInputStream()
获取 InputStream
关于 Uri
标识的内容,然后使用它将内容的本地副本制作成您控制的文件。然后,将该本地副本的路径传递给 ffmpeg
.完成后删除本地副本。 关于android - FFMPEG Android 存储访问框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44952055/