如何在Android中使用Runtime.getRuntime.exec和ffmpeg库?

时间:2012-09-13 11:16:52

标签: android ffmpeg

我正在尝试在录制的视频中建立正确的旋转,因为在某些设备中,setOrientationHint方法不起作用,因为某些视频播放器可能会选择在播放期间忽略视频中的合成矩阵Android Documentation

所以,我决定使用ffmpeg库。我正在为应用程序开发一个测试。在Ubuntu中,我下载了这个库并执行configure和make来获取ffmpeg可执行文件,我将这个可执行文件复制到sdcard中的DCIM文件夹,对于我为我的摄像机应用程序录制的视频也一样。因此,在DCIM文件夹中,我有ffmpeg可执行文件和视频。

我创建了一个测试项目,在onCreate方法中,我包括:

try {

Process p= Runtime.getRuntime().exec("chmod 777 /mnt/sdcard/beni/ffmpeg");
p.waitFor();

p = Runtime.getRuntime().exec("/mnt/sdcard/beni/ffmpeg -i /mnt/sdcard/beni/f.mp4 -vf \"transpose=1\" -r 24 -sameq /mnt/sdcard/beni/f2.mp4");
p.waitFor();

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));  
String line = null;  
while ((line = in.readLine()) != null) {  
    System.out.println(line);  
}  




} catch (IOException e) {
    e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}

但我有以下警告:

09-13 13:14:03.547: W/System.err(7782): java.io.IOException: Error running exec(). Command: [/mnt/sdcard/beni/ffmpeg, -i, /mnt/sdcard/beni/f.mp4, -vf, "transpose=1", -r, 24, -sameq, /mnt/sdcard/beni/f2.mp4] Working Directory: null Environment: null
09-13 13:14:03.547: W/System.err(7782):     at java.lang.ProcessManager.exec(ProcessManager.java:224)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.Runtime.exec(Runtime.java:189)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.Runtime.exec(Runtime.java:275)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.Runtime.exec(Runtime.java:210)
09-13 13:14:03.547: W/System.err(7782):     at com.example.prueba.MainActivity.onCreate(MainActivity.java:22)
09-13 13:14:03.547: W/System.err(7782):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
09-13 13:14:03.547: W/System.err(7782):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623)
09-13 13:14:03.547: W/System.err(7782):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675)
09-13 13:14:03.547: W/System.err(7782):     at android.app.ActivityThread.access$1500(ActivityThread.java:121)
09-13 13:14:03.547: W/System.err(7782):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943)
09-13 13:14:03.547: W/System.err(7782):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 13:14:03.547: W/System.err(7782):     at android.os.Looper.loop(Looper.java:138)
09-13 13:14:03.547: W/System.err(7782):     at android.app.ActivityThread.main(ActivityThread.java:3701)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.reflect.Method.invokeNative(Native Method)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.reflect.Method.invoke(Method.java:507)
09-13 13:14:03.547: W/System.err(7782):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
09-13 13:14:03.547: W/System.err(7782):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
09-13 13:14:03.547: W/System.err(7782):     at dalvik.system.NativeStart.main(Native Method)
09-13 13:14:03.547: W/System.err(7782): Caused by: java.io.IOException: Permission denied
09-13 13:14:03.547: W/System.err(7782):     at java.lang.ProcessManager.exec(Native Method)
09-13 13:14:03.547: W/System.err(7782):     at java.lang.ProcessManager.exec(ProcessManager.java:222)
09-13 13:14:03.547: W/System.err(7782):     ... 17 more

这段代码对吗?或者我做错了什么。

0 个答案:

没有答案