2014-07-21 78 views
0

我正在開發phonegap應用程序,現在我正在嘗試編寫一個插件來將.amr文件轉換爲.mp3文件。我使用JAVE做到這一點的轉換,雖然它的工作在桌面上它在Android失敗與此異常:在phonegap Android項目中使用sauronsoftware's Jave

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庫與插件一起打包並將其複製到正確的文件夾?

/data/data/<my_package>/cache/jave-1 

回答

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

後這個文件的權限問題消失。

+0

我怎樣才能執行ffmpeg? – patrick