使用Android Q ffmpeg拒绝权限“:错误= 13,权限被拒绝

问题描述 投票:2回答:1

[嗨,我想使用ffmpeg从rtsp视频中获取帧。在android 10中,它工作正常。我正在拿相框。在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)

请任何人帮助解决android 10中的问题。预先感谢。

android ffmpeg permissions rtsp android-10.0
1个回答
0
投票

从Android Q开始,您无法在应用程序的私有数据目录中执行二进制文件。

从问题跟踪程序:https://issuetracker.google.com/issues/128554619

更改对targetAPI的应用程序数据文件上的exec()的更改> =Q正在按预期工作。请参阅https://android-review.googlesource.com/c/platform/system/sepolicy/+/804149以了解此更改的背景。在可写应用程序上调用exec()文件违反了W ^ X(https://en.wikipedia.org/wiki/W%5EX),表示不安全的应用实践。可执行代码应总是从应用程序APK加载。

而exec()不再对应用程序主目录中的文件起作用目录,只读文件中的文件仍受支持/ data / app目录。特别是应该可以包装将二进制文件放入应用程序的本机libs目录并启用android:extractNativeLibs = true,然后在/ data / app上调用exec()文物。 wrap.sh功能也采用了类似的方法,记录在https://developer.android.com/ndk/guides/wrap-script#packaging_wrapsh

此外,请注意,通过exec()执行的可执行文件是并非根据Android流程生命周期进行管理,通常说来,exec()不推荐用于Android应用程序。虽然没有Android文档,Using "exec()" with NDK详细介绍了这一点。依赖exec()可能在未来的Android版本。

© www.soinside.com 2019 - 2024. All rights reserved.