web-dev-qa-db-ja.com

Android Q ffmpeg "を使用して権限が拒否されました:エラー= 13、権限が拒否されました

Ffmpegを使用してRTSPビデオからフレームを取得したい。しかし、Android 10以上の場合、以下のエラーが発生します。

 E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@55e447f
Java.io.IOException: Cannot run program "/data/user/0/com.example.downloadimagefromurl/files/ffmpeg": error=13, Permission denied
    at Java.lang.ProcessBuilder.start(ProcessBuilder.Java:1050)
    at Java.lang.Runtime.exec(Runtime.Java:698)
    at Java.lang.Runtime.exec(Runtime.Java:563)
    at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.Java:10)
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.Java:38)
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.Java:10)
    at Android.os.AsyncTask$3.call(AsyncTask.Java:378)
    at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
    at Android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.Java:289)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1167)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:641)
    at Java.lang.Thread.run(Thread.Java:919)
 Caused by: Java.io.IOException: error=13, Permission denied
    at Java.lang.UNIXProcess.forkAndExec(Native Method)
    at Java.lang.UNIXProcess.<init>(UNIXProcess.Java:133)

@Saurabh Thoratの回答として、Googleはアプリが/ data/userディレクトリからバイナリファイルを実行することを許可していません。

私が知っている悪い解決策の1つは、compileSdkVersionとtargetSdkVersionを28以下に変更し、推奨されないアプリケーションを再リリースすることです。

したがって、私は将来のリリースでもより実行可能なソリューションを探しています。

ヒント、リンク、提案は高く評価されます。前もって感謝します。

12
gowthami

@Saurabh Thoratの回答に基づいて、問題を修正するプルリクエストを作成しました。あなたはそれを見つけることができます ここ

簡単な要約:

Ffmpegバイナリをlibsフォルダーに移動し、Android:extractNativeLibs = "true"をマニフェストに追加して、自身を/data/app/{package_name}/lib/{Arch}/にコピーして、そこから実行できるようにしました(Android 10でサポートされています) )。

0
1nikolas