在phonegap Android项目中使用sauronsoftware的Jave

时间:2014-07-21 10:42:34

标签: android cordova ffmpeg

我正在开发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 

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) {
        }
    }

此文件权限问题消失后。