2017-07-06 6 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カードからユーザーが選択したビデオのための絶対パスを取得することができない、ストレージアクセスFrameworkは、リムーバブル記憶装置に限定されるものではないということです。ユーザーがGoogleドライブなどから何かを選択した場合、あなたが知っている限り、ビデオはその時点ではデバイス上に存在しません。別の例では、GoogleがSambaストレージプロバイダをリリースしたばかりで、ユーザがそれを使用すると、コンテンツはデバイス上ではなくLAN上のファイルサーバ上に存在します。

第2に、いくつかの選択領域(例:getExternalFilesDirs())を除き、ファイルシステムAPIを使用してリムーバブルストレージにアクセスすることはできません。ユーザーはそこの外のビデオを選ぶかもしれません。

絶対パスを取得する方法はありますか?

号選択肢がある:あなたがffmpegに沿って渡すことができるようになりますファイルにあなたを制限される、ストレージアクセスフレームワークを使用して、代わりにいくつかのファイルピッカーライブラリを使用

  • ストップ。

  • あなたがコントロールファイルにコンテンツのローカルコピーを作成することを使用し、その後、Uriによって識別されるコンテンツのInputStreamを取得するためにContentResolveropenInputStream()を使用してください。そのローカルコピーへのパスをffmpegに渡します。完了したら、ローカルコピーを削除します。

関連する問題