我正在开发phonegap应用程序,现在我正在尝试编写一个插件,将.amr文件转换为.mp3文件。我正在使用JAVE来进行此转换,当它在桌面上工作时,它在android上失败并出现此异常:
java.io.IOException: Error running exec().
Command: [/data/data/<my_package>/cache/jave-1/ffmpeg, -i, /sdcard/<my_filename>.amr, -vn, -acodec, libmp3lame, -f, mp3, -y, /sdcard/<my_filename>.mp3]
Working Directory: null Enviroment: null
我正在尝试像这样进行转换:
private void convert(String input_file, CallbackContext callbackContext){
File input = new File(input_file);
File output = new File(input_file.replace(".amr", ".mp3"));
Encoder encoder = new Encoder();
EncodingAttributes encodingAttributes = new EncodingAttributes();
AudioAttributes audioAttributes = new AudioAttributes();
audioAttributes.setCodec("libmp3lame");
encodingAttributes.setAudioAttributes(audioAttributes);
encodingAttributes.setFormat("mp3");
try{
encoder.encode(input, output, encodingAttributes);
input.delete();
callbackContext.success("finished");
}
catch(Exception e){
callbackContext.error(e.getMessage());
}
}
我找到this answer,我理解为什么会发生错误,但答案并未提供任何解决方案。有没有办法在Phonegap项目中使用它?我需要将ffmpeg库与插件一起打包并在app调用插件时将其复制到正确的文件夹中吗?
/data/data/<my_package>/cache/jave-1
答案 0 :(得分:0)
遇到同样的问题。目前我发现文件ffmpeg权限存在问题。 JAVE试图设置它们,但由于某种原因它不起作用。 所以我自己设置了这个权限:
Process process = null;
DataOutputStream dataOutputStream = null;
try {
process = Runtime.getRuntime().exec("su");
dataOutputStream = new DataOutputStream(process.getOutputStream());
dataOutputStream.writeBytes("chmod 0755 __AppCachePath__/jave-1/ffmpeg\n");
dataOutputStream.writeBytes("exit\n");
dataOutputStream.flush();
process.waitFor();
} catch (Exception e) {
} finally {
try {
if (dataOutputStream != null) {
dataOutputStream.close();
}
process.destroy();
} catch (Exception e) {
}
}
此文件权限问题消失后。