尝试通过android中的命令行运行ffmpeg时获取异常

时间:2012-09-17 08:28:54

标签: android command-line ffmpeg

我想在android应用程序中通过命令行参数使用ffmpeg。为此目的:

  1. 我已经交叉编译了ffmpeg lib并获得了libffmpeg.so
  2. 我已将libffmpeg.so存储在应用的文件目录中。
  3. 这是我正在使用的代码:

    public class MainActivity extends Activity {
    
        Process p;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
                String[] cmd =new String[4];
            cmd[0]="/data/data/com.example.ffmpegnew/files/libffmpeg";
            cmd[1]="-i";
            cmd[2]="mnt/sdcard/music/baba.mp4";
            cmd[3]="mnt/sdcard/music/outfile.mp4";
    
            p = Runtime.getRuntime().exec(cmd,null, new File("/data/data/com.example.ffmpegnew/files"));
    
            }
            catch(Exception e)
            {
                System.out.println("exception"+e);
            }
    
        }
    
    }
    

    这是我得到的例外:

    09-17 13:47:01.679: I/System.out(3752): exceptionjava.io.IOException: Error running exec(). Command: [/data/data/com.example.ffmpegnew/files/libffmpeg.so, -i, mnt/sdcard/music/baba.mp4, mnt/sdcard/music/outfile.mp4] Working Directory: /data/data/com.example.ffmpegnew/files Environment: null
    

    请告诉我如何解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:1)

我猜你试图用这个Linux命令运行一个.so文件:

/data/data/com.example.ffmpegnew/files/libffmpeg.so -i mnt / sdcard / music / baba.mp4 mnt / sdcard / music / outfile.mp4

你真的是指运行ffmpeg可执行文件(参见man ffmpeg)吗?

ffmpeg -i mnt / sdcard / music / baba.mp4 mnt / sdcard / music / outfile.mp4

我认为第一步可能是制作您的命令,然后您的代码段在常规Linux上运行,然后将其移至Android。

PS。无论如何,“mnt / ......”中缺少前导“/”;应该是“/ mnt /...”

PPS。其他讨论可能会有所帮助1