在android教程中的FFMpeg命令

时间:2013-10-11 07:53:37

标签: android ffmpeg

我想写一个能够连接两个视频的Android应用程序

我尝试了以下代码

    InputStream in=null;
    OutputStream os=null;
    String appFileDirectory = getFilesDir().getPath();
    final String executableFilePath = appFileDirectory + "/ffmpeg";
    final String input ="concat:/mnt/sdcard/input1.mpg|/mnt/sdcrad/input2.mpg";
    File executable=new File(executableFilePath);
    try {
        in = getAssets().open("ffmpeg");
        os = new FileOutputStream(executable);
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = in.read(bytes)) != -1) {
            os.write(bytes, 0, read);
        }


    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (os != null) {
            try {
                // outputStream.flush();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    executable.setExecutable(true);
    Button b = (Button)findViewById(R.id.button);
    b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try {
                Process p = Runtime.getRuntime().exec(executableFilePath + "-i \""+ input + "\" -c copy /mnt/sdcrd/output.mpg");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

}

此代码不会出现任何错误,也不会崩溃,但单击按钮时没有任何反应。我创建了与android兼容的ffmpeg构建。所以任何人都可以帮我解决如何从android java代码运行命令。

1 个答案:

答案 0 :(得分:0)

添加一些日志以检查ffmpeg文件是否已创建,是否获得可执行权限,是否存在/ mnt / sdcard输入文件,以及您的应用是否具有读取和写入外部存储的权限。

一个明显的错误是输入是不存在的 sdcrad ,输出尝试转到不存在的 sdcrd ,但这些可能是复制/的问题粘贴到SO。

顺便说一句,您可以轻松避免从资产中解压缩可执行文件的麻烦,请参阅How to package native commandline application in apk?上的答案