0

2 つの動画を連結する 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コードからコマンドを実行する方法を教えてください。

4

1 に答える 1

0

いくつかのログを追加して、ffmpeg ファイルが作成されているかどうか、実行権限を取得しているかどうか、/mnt/sdcard 入力ファイルが存在するかどうか、アプリに外部ストレージの読み取りと書き込みの権限があるかどうかを確認します。

明らかなエラーの 1 つは、入力が存在しないsdcradにあり、出力が存在しないsdcrdに行こうとすることですが、これらは SO へのコピー/貼り付けの問題である可能性があります。

ところで、アセットから実行可能ファイルを解凍する手間を簡単に回避できます。ネイティブ コマンドライン アプリケーションを apk にパッケージ化する方法に関する私の回答を参照してください。

于 2013-11-25T20:21:26.567 に答える