webentwicklung-frage-antwort-db.com.de

Berechtigung wird mit Android Q ffmpeg "verweigert: error = 13, Berechtigung verweigert

Ich möchte die Frames aus dem RTSP-Video mit ffmpeg abrufen. Aber für Android 10 oben bekomme ich Fehler wie unten.

 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)

Als Antwort von @Saurabh Thorat erlaubt Google Apps nicht, Binärdateien aus dem Verzeichnis/data/user auszuführen.

Eine schlechte Lösung, die ich kenne, besteht darin, compileSdkVersion und targetSdkVersion auf 28 oder niedriger zu ändern und meine Anwendung erneut freizugeben, was nicht empfohlen wird.

Daher suche ich auch für zukünftige Versionen nach praktikableren Lösungen.

Jeder Hinweis, Link oder Vorschlag wäre sehr dankbar. Danke im Voraus.

12
gowthami

Basierend auf der Antwort von @Saurabh Thorat habe ich eine Pull-Anfrage gestellt, die das Problem behebt. Sie finden es hier .

Kurze Zusammenfassung:

Die ffmpeg-Binärdatei wurde in den libs-Ordner verschoben und dem Manifest Android:extractNativeLibs = "true" Hinzugefügt, damit es sich selbst in /data/app/{package_name}/lib/{Arch}/ Kopieren und von dort aus ausführen kann (was auf Android) unterstützt wird = 10).

0
1nikolas