FFMPEG Android 存储访问框架
FFMPEG Android Storage Access Framework
我在 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 中选择了某些内容,就你所知,视频此时甚至不在设备上。在另一个示例中,Google 刚刚发布了一个 Samba 存储提供程序,如果用户使用它,则内容存在于 LAN 某处的文件服务器上,而不是设备上。
其次,您无法通过文件系统 API 访问可移动存储,除了几个 select 区域(例如 getExternalFilesDirs()
)。用户可以选择那里以外的视频。
Is there any way I can get the absolute path?
没有。您的选择是:
停止使用存储访问框架,而是使用一些文件选择器库,这将限制您只能传递给 ffmpeg
.[=19= 的文件]
使用 ContentResolver
和 openInputStream()
在 Uri
标识的内容上获得 InputStream
,然后用它来制作本地将内容复制到您控制的文件中。然后,将该本地副本的路径传递给 ffmpeg
。完成后删除本地副本。
我在 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 中选择了某些内容,就你所知,视频此时甚至不在设备上。在另一个示例中,Google 刚刚发布了一个 Samba 存储提供程序,如果用户使用它,则内容存在于 LAN 某处的文件服务器上,而不是设备上。
其次,您无法通过文件系统 API 访问可移动存储,除了几个 select 区域(例如 getExternalFilesDirs()
)。用户可以选择那里以外的视频。
Is there any way I can get the absolute path?
没有。您的选择是:
停止使用存储访问框架,而是使用一些文件选择器库,这将限制您只能传递给
ffmpeg
.[=19= 的文件]使用
ContentResolver
和openInputStream()
在Uri
标识的内容上获得InputStream
,然后用它来制作本地将内容复制到您控制的文件中。然后,将该本地副本的路径传递给ffmpeg
。完成后删除本地副本。