IOException при попытке запустить команду ffmpeg на Android - PullRequest
0 голосов
/ 20 апреля 2020

Я использую эту библиотеку через gradle с Android Studio 3.6.

implementation 'com.github.hiteshsondhi88.libffmpeg:FFmpegAndroid:0.2.5'

Это путь к файлу ввода и вывода.

String VideoIn = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/Ab.mp4";
String VideoOut = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Download/Ab1.avi";

Это код, куда я загружаю ffmpeg и попробуйте выполнить команду, чтобы преобразовать mp4 в avi. (Та же команда, которую я использую на windows для выполнения этой задачи). Но там указано IOException (нет такого файла или каталога), хотя входной файл присутствует в папке загрузки.

private void convert(String VideoIn, String VideoOut) {
    ffmpeg = FFmpeg.getInstance(this);
    try {
        ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
            @Override
            public void onFailure() {
                super.onFailure();
            }

            @Override
            public void onSuccess() {
                super.onSuccess();
            }

            @Override
            public void onStart() {
                super.onStart();
            }

            @Override
            public void onFinish() {
                super.onFinish();
            }
        });
    } catch (FFmpegNotSupportedException e) {
        Log.e(TAG, e.getMessage());
    }

    try {
        ffmpeg.execute("-i " + VideoIn + " " + VideoOut, new ExecuteBinaryResponseHandler() {
            @Override
            public void onSuccess(String message) {
                Log.e(TAG, message);
            }

            @Override
            public void onProgress(String message) {
                Log.e(TAG, message);
            }

            @Override
            public void onFailure(String message) {
                Log.e(TAG, message);
            }

            @Override
            public void onStart() {
                Log.e(TAG, "onStart called");
            }

            @Override
            public void onFinish() {
                Log.e(TAG, "onFinish called");
            }
        });
    } catch (FFmpegCommandAlreadyRunningException ex) {
        Log.e(TAG, ex.getMessage());
    }
}

Вот данные журнала, которые вы должны понять. Я не настолько эксперт в этом, поэтому я не мог понять, что не так с моим кодом. Путь правильный и файл там. Может быть, я неправильно называю эту команду или как?

Я много искал в Google и переполнении стека, но ничего не помогло мне решить ее. Любая помощь будет оценена.

04-20 12:08:26.050 12696-12696/com.example.myapplication E/Video to Mp3: Input File Path: 
/storage/emulated/0/Download/Ab.mp4
04-20 12:08:26.050 12696-12696/com.example.myapplication E/Video to Mp3: Output File Path: 
/storage/emulated/0/Download/Ab1.avi
04-20 12:08:26.050 12696-12696/com.example.myapplication E/Video to Mp3: Device not supported
04-20 12:08:26.050 12696-12696/com.example.myapplication E/Video to Mp3: onStart called
04-20 12:08:26.084 12696-13027/com.example.myapplication E/FFmpeg: Exception while trying to run: 
/data/user/0/com.example.myapplication/files/ffmpeg -i /storage/emulated/0/Download/Ab.mp4 
/storage/emulated/0/Download/Ab1.avi
java.io.IOException: Error running exec(). Command: [/data/user/0/com.example.myapplication/files/ffmpeg, -i, /storage/emulated/0/Download/Ab.mp4, /storage/emulated/0/Download/Ab1.avi] Working Directory: null Environment: null
    at java.lang.ProcessManager.exec(ProcessManager.java:211)
    at java.lang.Runtime.exec(Runtime.java:186)
    at java.lang.Runtime.exec(Runtime.java:259)
    at java.lang.Runtime.exec(Runtime.java:202)
    at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10)
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38)
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10)
    at android.os.AsyncTask$2.call(AsyncTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:246)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:833)
 Caused by: java.io.IOException: No such file or directory
    at java.lang.ProcessManager.exec(Native Method)
    at java.lang.ProcessManager.exec(ProcessManager.java:209)
    at java.lang.Runtime.exec(Runtime.java:186) 
    at java.lang.Runtime.exec(Runtime.java:259) 
    at java.lang.Runtime.exec(Runtime.java:202) 
    at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10) 
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38) 
    at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10) 
    at android.os.AsyncTask$2.call(AsyncTask.java:307) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:246) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
    at java.lang.Thread.run(Thread.java:833) 
04-20 12:08:26.084 12696-12696/com.example.myapplication E/Video to Mp3: onFinish called
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...