我正在视频处理项目中工作,现在我在Android中使用ffmpeg库。我面临着与asus zenphone 4 t00l(或所有x86设备,我只是在这款x86手机中进行测试)的奇怪问题。在项目中启动命令时,应用程序始终崩溃:
03-30 15:08:18.461 21068-21068/com.paditech.videa I/FFmpeg: Loading FFmpeg for armv7-neon CPU
03-30 15:08:18.781 21068-21068/com.paditech.videa I/System.out: Success........
03-30 15:26:12.933 21068-21068/com.paditech.videa E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 59
03-30 15:26:12.933 21068-21068/com.paditech.videa E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 63
03-30 15:26:15.913 21068-21068/com.paditech.videa D/VideoActivity: onDestroy
03-30 15:26:18.993 21068-21068/com.paditech.videa I/FFmpeg: Loading FFmpeg for armv7-neon CPU
03-30 15:26:19.263 21068-21068/com.paditech.videa I/System.out: Success........
03-30 15:26:42.583 21068-21184/com.paditech.videa D/FFmpeg: Running publishing updates method
03-30 15:26:42.583 21068-21068/com.paditech.videa E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 59
03-30 15:26:42.583 21068-21068/com.paditech.videa E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 85
03-30 15:26:42.683 21068-21068/com.paditech.videa D/VideoActivity: /data/data/com.paditech.videa/files/ffmpeg[1]: syntax error: '�4�' unexpected
03-30 15:26:42.683 21068-21068/com.paditech.videa D/VideoActivity: /data/data/com.paditech.videa/files/ffmpeg[1]: syntax error: '�4�' unexpected
首先,我认为问题是ffmpeg库。所以我创建了一个带有简单活动的测试模块,只需加载并运行命令即可,没有问题。
第二次,我担心应用无法加载版本ffmpeg,因为在我的日志中,它的armv7-neon等了它的x86(在我的测试模块中) ,它显示x86)。根据我的搜索结果,可能是一个外部库make app使用abi arm(Build.CPU_API =" armv7")。所以我尝试在模块测试中删除gradle中的所有库并检测到一个库。但是检查库的aar文件,它支持所有x86和arm。但删除后,应用程序仍然崩溃相同的日志。奇怪的是,althogh Test模块注册为arm但它仍然运行成功(外部问题:为什么添加库jp.wasabeef:picasso-transformations使系统注册为armv7,尽管它是x86)
最后,我认为问题是命令。但是在调试之后,我对Test模块使用了相同的命令,但它仍然成功。现在我仍然坚持下去。任何人都可以帮我解决它。谢谢。这是我的演示代码:
String input = "/storage/emulated/0/Videa/Video/VIDEO_20160122_160020.mp4";
String output = "/storage/emulated/0/Videa/Audio/AUDIO_20160330_142501.wav";
String[] command = {
"-y",
"-i",
input,
"-vn",
"-f",
"wav",
output
};
FFmpeg ffmpeg = FFmpeg.getInstance(getApplicationContext());
try {
ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
@Override
public void onSuccess(String message) {
super.onSuccess(message);
System.out.println("Success " + message);
}
@Override
public void onFailure(String message) {
super.onFailure(message);
System.out.println("Failure " + message);
}
});
} catch (Exception e) {
e.printStackTrace();
}
这是失败的命令:
ArrayList<String> cmd = new ArrayList<String>();
cmd.add("-y");
cmd.add("-i");
cmd.add(input);
cmd.add("-vn");
cmd.add("-f");
cmd.add("wav");
cmd.add(output);
String[] result = new String[cmd.size()];
return cmd.toArray(result);