2011-12-27 477 views
2

我想直接在android上運行ffmepg命令。 一個簡單的命令使用getRuntime()。exec()命令執行ffmpeg命令

ffmpeg -i vid.mp4 out.mp4 

現在的問題是,我在網上搜索,發現最好的Android的ffmpeg可以在這裏找到

http://bambuser.com/opensource

我已經下載並閱讀自述文件和編譯它。該文件夾是ffmpeg。我一直是在<--projectfolder-->/ffmpeg/

存在的ffmpeg文件夾中的ffmpeg executeable文件調用的ffmpeg文件夾

我已經按照這個鏈接 How do I reduce the video size captured by the default camera using FFMPEG in Android?中的文件夾複製並運行此命令

try {  

    Toast.makeText(this, "Working", Toast.LENGTH_SHORT).show(); 

    Process p = Runtime.getRuntime().exec("/data/data/com.koder.testffmpeg/files/ffmpeg -i /sdcard/vid.mp4 /sdcard/out.mp4"); 


    } catch (IOException e) { 

    txt.setText(e.toString()); 

    Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 

    e.printStackTrace(); 

    } 

但仍然不工作總是例外我不知道什麼是錯的 有人可以幫我這個

java.io.IOException: Error running exec(). Command:[/data/data/com.koder.testffmpeg/files/ffmpeg -i /sdcard/vid.mp4 /sdcard/out.mp4] Working Directory: null Environment:null 
+0

你得到什麼異常?請發佈日誌詳細信息。 – 2011-12-27 09:02:23

+1

java.io.IOException:運行exec()時出錯。命令:[/ data/data/com.koder.testffmpeg/files/ffmpeg -i /sdcard/vid.mp4 /sdcard/out.mp4] Working Directory:null環境:null – Iori 2011-12-27 09:59:52

+0

問題是您的ffmpeg命令可能不是在android文件夾中確實標記爲* executable *。使用「adb shell」進行連接,然後使用「ls -l /data/data/com.koder.testffmpeg/files/ffmpeg」查看它是否真的可以執行 – 2013-01-02 18:56:38

回答

0

嘗試使用這樣的:在android.may我

Process proc = null; 
ProcessBuilder pb = new ProcessBuilder(); 
proc = pb.command("String...yourCommand") 
        .redirectErrorStream(true).start(); 
BufferedReader bReader = new BufferedReader(new InputStreamReader(
        proc.getInputStream())); 

此代碼工作,爲獲取系統激活鎖定的細節是這樣的意願對你有用。

+0

它沒有工作,給了很多錯誤。我如何在我的項目文件夾ffmpeg文件。還有一件事是這個文件能夠在linux上運行或不運行,因爲我已經嘗試過了,它不起作用 – Iori 2011-12-27 10:51:20

1

給可執行權限ffmpeg像這樣:

chmod 700 ffmpeg 
2

您應該使用getBaseContext().getApplicationInfo().nativeLibraryDir代替"/data/data/com.example.ffmpegnew/files/"

0

您可以結合上面這樣的答案:

Process p = Runtime.getRuntime().exec("chmod 700 "+getBaseContext().getApplicationInfo().nativeLibraryDir + "/ffmpeg ...");