- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的一个视频压缩项目中使用 FFmpeg。在 Android 10 (Google Pixel 3a) 上,它会直接进入 onFailure(String message),并为执行的任何命令发送空消息。
所以我在我的应用程序 gradle 文件中指定了 (api 'com.writingminds:FFmpegAndroid:0.3.2'),
在 list 中指定权限(android.permission.WRITE_EXTERNAL_STORAGE)
我也是这样的:
InitializationCallback initializationCallback = new InitializationCallback();
try {
FFmpeg.getInstance(context).loadBinary(initializationCallback);
} catch (FFmpegNotSupportedException e) {
initializationCallback.onFailure();
initializationCallback.onFinish();
}
初始化很好,这里没有问题。
后来:
void getData(File inputFile) {
//inputFile points to: /storage/emulated/0/Android/data/{package_name}/files/temp_files/temp_1.mp4
String[] cmd = ("-i " + inputFile.getAbsolutePath()).split(" ");
try {
FFmpeg.getInstance(App.instance).execute(cmd, this);
} catch (FFmpegCommandAlreadyRunningException e) {
throw new Error(e);
}
}
@Override
public void onStart() {
//This method is called
}
@Override
public void onSuccess(String message) {
//This method is NOT called
extractAvailableData(message);
}
@Override
public void onProgress(String message) {
//This method is NOT called
extractAvailableData(message);
}
@Override
public void onFailure(String message) {
//This method is called and the message is empty
extractAvailableData(message);
}
@Override
public void onFinish() {
//This method is called
}
如果我这样做:
String command = "-i ***/file1.mp4 -map 0:v -map 0:a -preset ultrafast -s:v 750:350 ***/file2.mp4";
//file2.mp4 is a non existent file at this point
// (***) --> is just a replacement for the full path of the file, just to keep things shorter here.
String[] cmd = command.split(" ");
try {
FFmpeg.getInstance(App.instance).execute(cmd, this);
} catch (FFmpegCommandAlreadyRunningException e) {
throw new Error(e);
}
给出相同的结果,没有视频转换,只是调用 onFailure("Nothing")
即使我这样做:
String[] cmd = {"-version"};
try {
FFmpeg.getInstance(App.instance).execute(cmd, this);
} catch (FFmpegCommandAlreadyRunningException e) {
throw new Error(e);
}
我什么也没得到,根本没有输出。
到目前为止,我只在 Android 10 上遇到过这个问题,它在其他设备上运行良好。
最佳答案
Android 10 的行为发生了变化,删除了应用程序主目录的执行权限。如果您尝试从 App 主目录运行执行文件,您将获得权限被拒绝的异常。
以下是目标 SDK 版本 29 的更改详情:https://developer.android.com/about/versions/10/behavior-changes-10#execute-permission
java.io.IOException: Cannot run program "/data/user/0/<package name>/files/ffmpeg": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
at nl.bravobit.ffmpeg.ShellCommand.run(ShellCommand.java:15)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:43)
at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:12)
at android.os.AsyncTask$3.call(AsyncTask.java:378)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)
at java.lang.ProcessImpl.start(ProcessImpl.java:141)
关于java - FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58565300/
我正在使用来自 Loopj 的 android-async-http 库,我的代码中没有调用 onFailure,我已经尝试了所有三种方法.. W/JsonHttpRH:onFailure(int,
问题 为什么我可以通过我的 mainActivity 连接到我的服务器,而不是通过 fragment ? 设置 程序 1 - 有效... 现在,我有两个程序。第一个称为 mqtt_test,它包括一个
当从服务器调用 persist() 方法时,在验证电子邮件的唯一性后会引发异常。 问题是调用了客户端的 onSuccess 方法,而不是 onFailure。这是代码。 RequestContext
我正在玩“ListenableFutureCallback”。 onSuccess() 工作正常,但 onFailure 永远不会被调用。下面是一些示例代码。 @Service public clas
有人知道如何从附加到 OkHttp 客户端的拦截器类调用 onFailure 回调吗? 最佳答案 @warnyul 评论是对的。一旦我抛出 IOException,它就会触发失败。 关于Android
我目前正在编写一些单元测试,我想每隔几分钟持续运行一次。如果它们中的任何一个失败了,我想捕获引发的错误并对它们进行一些自定义处理(在我的例子中发送警报)。有这样做的标准方法吗?我一直在查看 unitt
我有一个 AJAX.RouteLink,它具有以下 AJAXOptions new AjaxOptions { HttpMethod = "PO
我一直在开发 Android 应用程序,我正在使用 Retrofit。 如何处理 onFailure(Throwable t) 回调 NoInternetConnection 和 OtherError
我正在试用从 http://loopj.com/android-async-http/ 下载的适用于 Android 的 AndroidAsyncHttp 库并试图找到评估 onFailure(Thr
我在 PageMethod 调用中使用了 onSuccess 和 onFailure。然而,它们都没有被调用,WebMethod 也没有被解雇。 alert("1"); PageMethods.Log
例如,当您在 elasticsearch 中发出异步请求时,onFailure 会返回 Exception。如下所示处理异常是否合适。 @Override
我尝试首先使用 Retrofit 将数据获取到类(class)。但我发现我的程序将进入“onFailure”选项。 错误消息: 2020-03-07 18:54:04.499 17756-17756/
如果我有一些计算需要一段时间,我可能会把它放在 scala.concurrent.Future 中: val f = Future { someLongRunningFunction() } 假设我想
我无法理解这个问题。总是在失败时返回。数据返回状态码200,OnResponse不返回。 回应D/OkHttp: > auth( @Field("username") String u
如果我有一些计算需要一段时间,我可能会把它放在 scala.concurrent.Future 中: val f = Future { someLongRunningFunction() } 假设我想
GWT 的 RPC 调用的 onFailure() 方法中是否可以抛出异常?因为这个方法稍后会在服务器响应后被调用,我很抱歉这里可能会发生一些不好的事情.. 例如: public void metho
我正在创建一个需要用户身份验证的应用程序。我在尝试登录时遇到一个问题。当我输入正确的用户名和密码时,将调用 onSuccess 方法。但是,当我输入错误的字段或空字段时,不会调用 onFailure(
我正在尝试运行一个简单的测试应用程序来学习 Retrofit。 onFailure 方法总是被调用,请帮助我。我所做的一切如下: 主 Activity public class MainActivit
我正在使用 Ajax.BeginForm 调用我的应用程序来运行一些代码。出现错误时,我想返回我将创建的自定义错误消息。 但是到目前为止我还无法做到这一点。这就是我所拥有的: Controller :
我知道这是一个常见问题,但我做了所有这些,仍然没有解决。在我的 MainActivity 中,我收到了来自 ServerService.java 的调用,如下所示: String randomNumb
我是一名优秀的程序员,十分优秀!