2014-04-08 83 views
17

我想在Android上使用ffmpeg.so我得到工作目錄:null環境:null錯誤。工作目錄:null環境:null

try { 
    Process p = Runtime.getRuntime().exec("/data/data/com.example.foo/files/ffmpeg -f image2 -i " 
+ Environment.getExternalStorageDirectory().getAbsolutePath() + "/img/b%d.jpg " 
+ Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/a444.mp4"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

錯誤日誌

04-09 01:50:45.683: I/Adreno-EGL(18393): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13 
04-09 01:50:45.713: D/OpenGLRenderer(18393): Enabling debug mode 0 
04-09 01:53:56.487: D/dalvikvm(18551): Trying to load lib /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00 
04-09 01:53:56.487: D/dalvikvm(18551): Added shared lib /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00 
04-09 01:53:56.487: D/dalvikvm(18551): No JNI_OnLoad found in /data/app-lib/com.example.sodeneme-1/libffmpeg.so 0x423d7d00, skipping init 
04-09 01:53:56.537: W/System.err(18551): java.io.IOException: Error running exec(). Command: [/data/data/com.example.sodeneme/files/ffmpeg, -f, image2, -i, /storage/emulated/0/img/b%d.jpg, /storage/emulated/0/DCIM/Camera/a444.mp4] Working Directory: null Environment: null 
04-09 01:53:56.537: W/System.err(18551): at java.lang.ProcessManager.exec(ProcessManager.java:211) 
04-09 01:53:56.537: W/System.err(18551): at java.lang.Runtime.exec(Runtime.java:173) 
04-09 01:53:56.537: W/System.err(18551): at java.lang.Runtime.exec(Runtime.java:246) 
04-09 01:53:56.537: W/System.err(18551): at java.lang.Runtime.exec(Runtime.java:189) 
04-09 01:53:56.537: W/System.err(18551): at com.example.sodeneme.MainActivity.onCreate(MainActivity.java:40) 
04-09 01:53:56.537: W/System.err(18551): at android.app.Activity.performCreate(Activity.java:5231) 
04-09 01:53:56.537: W/System.err(18551): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
04-09 01:53:56.537: W/System.err(18551): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
04-09 01:53:56.537: W/System.err(18551): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
04-09 01:53:56.537: W/System.err(18551): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
04-09 01:53:56.537: W/System.err(18551): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
04-09 01:53:56.537: W/System.err(18551): at android.os.Handler.dispatchMessage(Handler.java:102) 
04-09 01:53:56.537: W/System.err(18551): at android.os.Looper.loop(Looper.java:136) 
04-09 01:53:56.537: W/System.err(18551): at android.app.ActivityThread.main(ActivityThread.java:5017) 
04-09 01:53:56.537: W/System.err(18551): at java.lang.reflect.Method.invokeNative(Native Method) 
04-09 01:53:56.537: W/System.err(18551): at java.lang.reflect.Method.invoke(Method.java:515) 
04-09 01:53:56.537: W/System.err(18551): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
04-09 01:53:56.537: W/System.err(18551): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
04-09 01:53:56.537: W/System.err(18551): at dalvik.system.NativeStart.main(Native Method) 
04-09 01:53:56.547: W/System.err(18551): Caused by: java.io.IOException: No such file or directory 
04-09 01:53:56.547: W/System.err(18551): at java.lang.ProcessManager.exec(Native Method) 
04-09 01:53:56.547: W/System.err(18551): at java.lang.ProcessManager.exec(ProcessManager.java:209) 
04-09 01:53:56.547: W/System.err(18551): ... 18 more 
04-09 01:53:56.577: I/Adreno-EGL(18551): <qeglDrvAPI_eglInitialize:320>: EGL 1.4 QUALCOMM Build: I0404c4692afb8623f95c43aeb6d5e13ed4b30ddbDate: 11/06/13 
04-09 01:53:56.607: D/OpenGLRenderer(18551): Enabling debug mode 0 

PERMISSIONS

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> 

回答

2

也許你需要這個權限添加到您的AndroidManifest.xml文件

android.permission.WRITE_EXTERNAL_STORAGE 
+1

我在頂部添加了權限列表 – Mert

+0

我看到您只需添加有關您的AndroidManifest.xml的信息。你能調試並看看'Process'返回了什麼嗎?然後,在繼續之前檢查文件是否存在於「/data/data/com.example.foo/files/」中。 – ChuongPham

+0

我無法從DDMS中看到數據,可能是因爲它沒有根。 – Mert

2

您需要確保/data/data/com.example.foo/files/ffmpeg文件具有正確的文件權限。

您可以查看文件的權限使用以下命令:

String[] command = new String[]{"/system/bin/ls", "-l", 
           "/data/data/com.example.foo/files/ffmpeg" }; 
Process process = Runtime.getRuntime().exec(command); 
BufferedReader reader = new BufferedReader(
        new InputStreamReader(process.getInputStream())); 
int read; 

String output = ""; 

String line; 
while ((line = reader.readLine()) != null) { 
    output.concat(line + "\n"); 
    Log.w("myApp", "[[output]]:" + line); 
} 
reader.close(); 
process.waitFor(); 

輸出會是這樣的(這取決於實際的權限,在這種情況下,權限是777):

[[output]]:-rwxrwxrwx u0_a67 u0_a67  254460 2015-03-02 17:12 ffmpeg 

您可以使用以下命令將權限設置爲744:

String[] command = new String[]{"/system/bin/chmod", "744", 
           "/data/data/com.example.foo/files/ffmpeg" }; 

如果你從外部活動執行這個命令(從一個服務可以說),你的許可將必須是777(不是744)

0

我在使用ffmpeg-android項目時自發地得到了同樣的問題。我已經擁有其他人提到的所有權限,過去我沒有遇到過這個問題。

我恢復到舊的構建,這工作得很好,然後重建的最新版本,它再次被罰款 - 所以在我的情況下,解決方案是一個簡單的清潔和重建 ..

嘗試,如果你感到絕望!