Essayez cette commande pour fusionner deux fichiers audio, mais cela ne fonctionne pas dans Android 10.0 (Q) tandis que ciblant sdk 29. Mais, cette commande fonctionne complètement sur - ciblant les SDK 24 à 28.
J'utilise cette bibliothèque d'implémentation 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
Donnez-moi une solution au problème ci-dessus.
Maintenant, si vous cherchez FFMPEG pour Android Q Voici l'utilisation du lien ci-dessous FFMPEG Build. Incluez-le dans votre app/build.gradle
Min SDK 24
dependencies {
implementation 'com.arthenica:mobile-ffmpeg-full:4.3'
}
Min SDK 16
dependencies {
implementation 'com.arthenica:mobile-ffmpeg-full:4.2.2.LTS'
}
testé dans OnePlus 7T
Android Q
Il n'y a pas de documentation officielle.
https://www.reddit.com/r/androiddev/comments/b2inbu/psa_Android_q_blocks_executing_binaries_in_your/
Mais vous pouvez utiliser la méthode ci-dessous pour tester votre application
Il semble que Linux DAC et SE-Android bloquent le processus de votre application d'accéder à l'exécutable "su".
Vérifiez si votre système fonctionne en mode forcé, ce qui signifie que SE-Android est activé. Si tel est effectivement le cas, vous pouvez le désactiver temporairement en exécutant:
adb root
adb Shell setenforce 0
Cela désactivera SE-Android et n'empêchera pas le processus des applications d'exécuter "su".
Vous pouvez donc exécuter ffmpeg
En outre, votre application peut ne pas disposer des autorisations DAC nécessaires pour lancer "su" en tant que root. Vous pouvez exécuter la commande suivante:
adb Shell ps
Pour une liste de tous les processus en cours d'exécution sur votre appareil. localisez votre application (en recherchant son nom de package) et vérifiez son groupe et son uid. Probablement ni l'un ni l'autre ne sont root.
Veuillez noter que la création d'une image de userdebug personnalisée n'est pas tout à fait comme le rootage d'un appareil standard Android. La version de débogage est destinée à permettre l'accès aux composants internes de l'appareil tout en simulant un appareil fonctionnant réellement avec tous ses mécanismes de sécurité par défaut activés.
Pour cette bibliothèque ne prend en charge que le maximum de SDK 28, voir le lien ci-dessous:
https://github.com/bravobit/FFmpeg-Android/blob/master/Android-ffmpeg/build.gradle
Donc, dans cette bibliothèque pas exécuté dans le SDK 29 parce que le targetSdkVersion 28
et compileSdkVersion 28
. Si vous voulez changer cette chose, cela fonctionnera pour vous. J'espère que cela vous aidera ..!