2012-11-09 34 views
0

我在我的Android项目中使用名为JAVE的外部库,以便从视频文件中提取音频。在Android项目中使用JAVE库时出现错误

我的代码:

public void extractAudio() { 
    File source = new File(Environment.getExternalStorageDirectory().getPath() + "/test.flv"); 
    File target = new File(Environment.getExternalStorageDirectory().getPath() + "/test.mp3"); 
    AudioAttributes audio = new AudioAttributes(); 
    audio.setCodec("libmp3lame"); 
    audio.setBitRate(new Integer(128000)); 
    audio.setChannels(new Integer(2)); 
    audio.setSamplingRate(new Integer(44100)); 
    EncodingAttributes attrs = new EncodingAttributes(); 
    attrs.setFormat("mp3"); 
    attrs.setAudioAttributes(audio); 
    Encoder encoder = new Encoder(); 
    try { 
     encoder.encode(source, target, attrs); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (InputFormatException e) { 
     e.printStackTrace(); 
    } catch (EncoderException e) { 
     e.printStackTrace(); 
    } 
} 

这是我得到的错误:

11-09 18:26:49.874: W/System.err(6594): java.io.IOException: Error running exec(). Command: [/bin/chmod, 755, /sdcard/jave-1/ffmpeg] Working Directory: null Environment: null 
11-09 18:26:49.874: W/System.err(6594):  at java.lang.ProcessManager.exec(ProcessManager.java:211) 
11-09 18:26:49.874: W/System.err(6594):  at java.lang.Runtime.exec(Runtime.java:168) 
11-09 18:26:49.884: W/System.err(6594):  at java.lang.Runtime.exec(Runtime.java:123) 
11-09 18:26:49.884: W/System.err(6594):  at it.sauronsoftware.jave.DefaultFFMPEGLocator.<init>(DefaultFFMPEGLocator.java:85) 
11-09 18:26:49.884: W/System.err(6594):  at it.sauronsoftware.jave.Encoder.<init>(Encoder.java:111) 
11-09 18:26:49.884: W/System.err(6594):  at com.yt.ringtones.RipActivity.extractAudio(RipActivity.java:236) 
11-09 18:26:49.894: W/System.err(6594):  at com.yt.ringtones.RipActivity$1$DownloadFromUrl.onPostExecute(RipActivity.java:94) 
11-09 18:26:49.894: W/System.err(6594):  at com.yt.ringtones.RipActivity$1$DownloadFromUrl.onPostExecute(RipActivity.java:1) 
11-09 18:26:49.894: W/System.err(6594):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
11-09 18:26:49.894: W/System.err(6594):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
11-09 18:26:49.986: W/System.err(6594):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
11-09 18:26:49.986: W/System.err(6594):  at android.os.Handler.dispatchMessage(Handler.java:99) 
11-09 18:26:49.986: W/System.err(6594):  at android.os.Looper.loop(Looper.java:137) 
11-09 18:26:49.994: W/System.err(6594):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
11-09 18:26:49.994: W/System.err(6594):  at java.lang.reflect.Method.invokeNative(Native Method) 
11-09 18:26:49.994: W/System.err(6594):  at java.lang.reflect.Method.invoke(Method.java:511) 
11-09 18:26:50.014: W/System.err(6594):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
11-09 18:26:50.014: W/System.err(6594):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
11-09 18:26:50.024: W/System.err(6594):  at dalvik.system.NativeStart.main(Native Method) 
11-09 18:26:50.024: W/System.err(6594): Caused by: java.io.IOException: No such file or directory 
11-09 18:26:50.024: W/System.err(6594):  at java.lang.ProcessManager.exec(Native Method) 
11-09 18:26:50.034: W/System.err(6594):  at java.lang.ProcessManager.exec(ProcessManager.java:209) 

我是相当新的Android开发,我真的不知道这里有什么问题。我会很感激任何帮助。

+0

你能上传一个完整的堆栈跟踪? –

+0

因此,在你以前的堆栈跟踪中,你有“exec()。Command:[/ sdcard/jave-1/ffmpeg ...”,现在它是“exec()。Command:[/ bin/chmod ...”你确定这是正确的堆栈跟踪? –

+0

我不知道它为什么现在改变。 logcat说有“... 18更多”,但我不知道如何访问它们。 – Archer2486

回答

0

“exec()”基本上在系统中执行一个命令,就好像你会从命令行运行一样。它试图运行“/ sdcard/jave-1/ffmpeg”,它应该是一个可执行文件。你的设备上有这个可执行文件吗?否则,这将无法工作。

+0

感谢您的回答。 “/ sdcard/jave-1/ffmpeg”确实存在。我已将堆栈跟踪的其余部分添加到原始消息中。 – Archer2486

+0

好吧,所以看起来在堆栈跟踪中有另一个错误:“W/System.err(6594):引起:java.io.IOException:没有这样的文件或目录”我怀疑这可能是因为“Working目录:null“在最上面的错误信息中。你可以尝试设置工作目录吗? –

+0

如何设置工作目录?我不知道这意味着什么... – Archer2486

相关问题