2014-04-08 19 views
17

Sto cercando di utilizzare ffmpeg.so su Android Sto ottenendo Directory di lavoro: null Ambiente: errore nullo.Directory di lavoro: null Ambiente: 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(); 
} 

ERRORE LOG

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 

PERMESSI

<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" /> 

risposta

2

Forse avete bisogno di aggiungere questa autorizzazione al AndroidManifest.xml presentare:

android.permission.WRITE_EXTERNAL_STORAGE 
+1

Ho aggiunto l'elenco delle autorizzazioni in cima – Mert

+0

Vedo che è sufficiente aggiungere informazioni su AndroidManifest.xml. Puoi eseguire il debug e vedere cosa restituisce 'Process'? Quindi, controlla se il file esiste in "/data/data/com.example.foo/files/" prima di continuare. – ChuongPham

+0

Non riesco a vedere nei dati da DDMS probabilmente perché non è rootato. – Mert

2

È necessario assicurarsi che il file /data/data/com.example.foo/files/ffmpeg disponga delle autorizzazioni file corrette.

È possibile controllare l'autorizzazione file con il seguente comando:

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(); 

L'uscita sarebbe qualcosa di simile (a seconda delle autorizzazioni attuali, in questo caso i permessi sono 777):

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

È possibile impostare le autorizzazioni per 744, con il comando seguente:

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

Se stai eseguendo questo comando da un'attività esterna (da un servizio diciamo), la tua autorizzazione dovrà essere 777 (non 744)

0

Ho avuto questo stesso problema spontaneamente mentre lavoravo con il progetto ffmpeg-android. Avevo già impostato tutti i permessi che altri hanno menzionato e non avevo avuto questo problema in passato.

mi è ritornata ad una vecchia costruzione, che ha funzionato bene, poi ricostruito la versione più recente ed è stato di nuovo bene - così la soluzione nel mio caso è stato un semplice e ricostruire ..

provare se ti senti disperato!

Problemi correlati