Je veux obtenir les images de la vidéo RTSP en utilisant ffmpeg. Mais pour Android 10 ci-dessus, j'obtiens une erreur comme ci-dessous.
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)
Comme la réponse fournie par @Saurabh Thorat, Google n'autorise pas les applications à exécuter des fichiers binaires à partir du répertoire/data/user.
Une mauvaise solution que je connais est de changer compileSdkVersion et targetSdkVersion à 28 ou moins et de relancer mon application, ce qui n'est pas recommandé.
Par conséquent, je recherche également des solutions plus viables pour les versions futures.
Tout indice, lien ou suggestion serait très apprécié. Merci d'avance.
Sur la base de la réponse de @Saurabh Thorat, j'ai fait une pull request qui résout le problème. Vous pouvez le trouver ici .
Résumé rapide:
Déplacement du binaire ffmpeg dans le dossier libs et ajout de
Android:extractNativeLibs = "true"
dans le manifeste afin qu'il puisse se copier dans/data/app/{package_name}/lib/{Arch}/
puis exécutez-le à partir de là (ce qui est pris en charge sur Android 10).