Команды FFMPEG не работают в Android Q - PullRequest
3 голосов
/ 28 сентября 2019

Попробуйте эту команду для объединения двух аудиофайлов, но она не работает в Android 10.0 (Q), пока нацелен на sdk 29 .Но эта команда полностью работает над таргетингом от SDK 24 до 28 .

Я использую эту библиотеку реализации FFMPEG 'nl.bravobit: android-ffmpeg: 1.1.7'

"-y", "-i", path1, "-i", path2, "-filter_complex", "[0:0][1:0] amix=inputs=2:duration=longest", "-c:a", "libmp3lame", savedPath

my Error log:
2019-09-28 13:48:32.037 16041-16166/com.merger.cut E/FFmpeg: Exception while trying to run: [/data/user/0/com..merger.cut/files/ffmpeg, -y, -i, /storage/emulated/0/Music/song1.mp3, -i, /storage/emulated/0/Music/song2.mp3, -filter_complex, [0:0][1:0] amix=inputs=2:duration=longest, -c:a, libmp3lame, /storage/emulated/0/merger/Merge_1569658695254.mp3]
    java.io.IOException: Cannot run program "/data/user/0/com.merger.cut/files/ffmpeg": error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)
        at nl.bravobit.ffmpeg.ShellCommand.run(ShellCommand.java:15)
        at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:43)
        at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:12)
        at android.os.AsyncTask$3.call(AsyncTask.java:378)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.io.IOException: error=13, Permission denied
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
        at java.lang.ProcessImpl.start(ProcessImpl.java:141)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
        at nl.bravobit.ffmpeg.ShellCommand.run(ShellCommand.java:15) 
        at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:43) 
        at nl.bravobit.ffmpeg.FFcommandExecuteAsyncTask.doInBackground(FFcommandExecuteAsyncTask.java:12) 
        at android.os.AsyncTask$3.call(AsyncTask.java:378) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
2019-09-28 13:48:32.146 16041-16041/com.merger.cut E/FFMPEG :: on finish

Дайте мне решение вышеуказанной проблемы.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Для этой библиотеки поддерживается только максимальная SDK 28, см. Ссылку ниже:

https://github.com/bravobit/FFmpeg-Android/blob/master/android-ffmpeg/build.gradle

Итак, в этой библиотеке не запускается SDK 29, поскольку targetSdkVersion 28 и compileSdkVersion 28Если вы хотите изменить эту вещь, она будет работать для вас.Я надеюсь, что это поможет вам ..!

0 голосов
/ 28 сентября 2019

Официальной документации нет.

https://www.reddit.com/r/androiddev/comments/b2inbu/psa_android_q_blocks_executing_binaries_in_your/

Но вы можете использовать метод ниже для проверки вашего приложения

Похоже, что linux DAC и SE-Android блокируют процесс вашего приложения от доступа к исполняемому файлу 'su'.

Проверьте, работает ли ваша система в принудительном режиме, что означает, что SE-Android включен.Если это действительно так, вы можете временно отключить его, выполнив:

adb root

   adb shell setenforce 0

Это отключит SE-Android и не заблокирует процесс выполнения приложения 'su'.

Таквы можете выполнить ffmpeg

. Кроме того, ваше приложение может не иметь разрешений DAC, необходимых для запуска su в качестве пользователя root.Вы можете выполнить следующую команду:

adb shell ps

Для получения списка всех запущенных процессов на вашем устройстве.найдите свое приложение (выполнив поиск по имени пакета) и проверьте его группу и uid.Скорее всего, ни один из них не является пользователем root.

Обратите внимание, что создание пользовательского образа отладки пользователя не совсем похоже на рутирование стандартного устройства Android.Отладочная версия предназначена для предоставления доступа к внутренним устройствам устройства, в то же время моделируя реально работающее устройство со всеми включенными в него механизмами безопасности по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...