2017-07-06 238 views
0

我在Android上使用FFMPEG來更改未在我的應用程序中錄製的視頻的比特率等。FFMPEG Android存儲訪問框架

我面臨的問題是我無法獲得用戶從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()沒關係。

有什麼辦法可以得到絕對路徑嗎?

+0

檢查這個問題https://stackoverflow.com/questions/34576911/how-to-get-absolute-paths-in-the-removable-sd-card-using-storage-access-framewor –

回答

0

我現在面臨的問題是,我不能讓用戶從SD卡中選擇

第一視頻的絕對路徑,存儲訪問框架不限於移動存儲。如果用戶從Google雲端硬盤中選擇了一些內容,儘管您知道,但此時視頻甚至不在該設備上。在另一個例子中,Google剛剛發佈了一個Samba存儲提供商,如果用戶使用該存儲提供商,則該內容存在於LAN上某個文件服務器上,而不是該設備上。

其次,除了幾個選定區域(例如getExternalFilesDirs())之外,您無法通過文件系統API訪問可移動存儲。用戶可以在那裏選擇一個視頻。

有沒有什麼辦法可以得到絕對路徑?

。您的選擇是:

  • 停止使用存儲訪問架構,而是使用一些文件選擇器庫,這將限制你的文件,你將能夠一起ffmpeg傳遞。

  • 使用ContentResolveropenInputStream()獲得由Uri標識內容的InputStream,然後用它來使內容的本地拷貝到自己控制的文件。然後,將路徑傳遞到該本地副本ffmpeg。完成後刪除本地副本。