このコマンドを試して2つのオーディオファイルをマージしますが、Android 10.0(Q)while targeting sdk 29では機能しませんが、このコマンドは完全に機能しています- targeting sdk 24 to 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
上記の問題の解決策を教えてください。
Android QのFFMPEGを探しているなら、QここにFFMPEGビルドの下のリンク使用があります。これを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'
}
テスト済みOnePlus 7T
Android Q
公式文書はありません。
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を実行することができます
さらに、アプリには、ルートとして「su」を起動するために必要なDAC権限がない場合があります。次のコマンドを実行できます。
adb Shell ps
デバイスで実行中のすべてのプロセスのリストについて。 (パッケージ名を検索して)アプリを見つけ、そのグループとuidを確認します。ほとんどの場合、どちらもルートではありません。
カスタムのuserdebugイメージを構築することは、標準のAndroidデバイスをルート化することとはかなり異なります。デバッグバージョンは、デバイスの内部へのアクセスを許可しながら、実際に機能するデバイスすべてをシミュレーションすることを目的としていますデフォルトのセキュリティメカニズムが有効。
このライブラリは最大sdk 28のみをサポートしているため、以下のリンクを参照してください。
https://github.com/bravobit/FFmpeg-Android/blob/master/Android-ffmpeg/build.gradle
したがって、このライブラリではtargetSdkVersion 28
およびcompileSdkVersion 28
。これを変更したい場合は、問題なく機能します。お役に立てれば幸いです。