我想得到的帧从RTSP视频使用ffmpeg。但对于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目录中的二进制文件。
据我所知,一个糟糕的解决方案是将compileSdkVersion和targetSdkVersion更改为28或更低,然后重新发布我的应用程序,这是不推荐的。
因此,我也在为未来的版本寻找更可行的解决方案。
任何提示,链接或建议将受到高度赞赏。提前谢谢。
发布于 2020-07-04 23:12:30
根据@Saurabh Thorat的回答,我提出了一个拉取请求,解决了这个问题。你可以在here上找到它。
快速总结:
将ffmpeg二进制文件移动到libs文件夹,并将
android:extractNativeLibs = "true"添加到清单中,这样它就可以将自己复制到/data/app/{package_name}/lib/{arch}/中,然后从那里执行它(在Android10上支持)。
编辑(一般使用):为了将可执行文件复制到/data/app/{package_name}/lib/{arch}/中,文件名必须为lib(something).so。如果名称不是以lib开头并以.so结尾,则不会被复制。
https://stackoverflow.com/questions/60370424
复制相似问题