【问题标题】:FFMPEG commands isn't working in Android QFFMPEG 命令在 Android Q 中不起作用
【发布时间】:2020-01-28 07:14:11
【问题描述】:

尝试使用此命令合并两个音频文件,但它在 针对 sdk 29 时无法在 Android 10.0(Q) 中运行。 但是,此命令完全适用于针对 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

给我解决上述问题。

【问题讨论】:

  • 遇到同样的问题,如果有人有解决方案请帮忙
  • 您可能会受到新的托管范围访问 developer.android.com/training/data-storage/files/… 的影响
  • 你在使用这个库吗:nl.bravobit:android-ffmpeg:1.1.1 或其他请提及。
  • 任何错误日志?在此处发布您的 ffmpeg 错误日志
  • 找到任何解决方案,如果是,请与我们分享您的答案,谢谢!

标签: android ffmpeg android-ffprobe


【解决方案1】:

此库仅支持最大 sdk 28,请参见以下链接:

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

所以,在这个库中不能在 SDK 29 中运行,因为 targetSdkVersion 28compileSdkVersion 28 。如果你想改变这件事,它会为你工作。我希望它会帮助你..!

【讨论】:

  • 我已经尝试过了,但是当目标是 29 并且我想要 29 时它不起作用。
【解决方案2】:

现在,如果你们正在寻找适用于 ANDROID Q 的 FFMPEG,这里是 FFMPEG Build 下面的链接使用。将此添加到您的 app/build.gradle

最小 SDK 24

  dependencies {
        implementation 'com.arthenica:mobile-ffmpeg-full:4.3'
    }

最小 SDK 16

dependencies {
    implementation 'com.arthenica:mobile-ffmpeg-full:4.2.2.LTS'
}

OnePlus 7T
Android Q

中测试

【讨论】:

  • 库太大。
  • @TusharLathiya 你可以为 apk 提供 aab 文件。
  • 目前,我们没有替代方案。
  • 代替-full,您可以使用smaller packages之一
  • 我正在使用 'com.arthenica:mobile-ffmpeg-full:4.2.2.LTS' 但我在构建时收到此错误'清单合并失败:属性 application@appComponentFactory value=(androidx ) 来自 AndroidManifest.xml:10:9-47 也存在于 [androidx.core:core:1.3.2] AndroidManifest.xml:24:18-86 value=(androidx.core.app.CoreComponentFactory)。建议:在 AndroidManifest.xml:9:5-26:19 的 元素中添加 'tools:replace="android:appComponentFactory"' 以覆盖。'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 2020-06-05
  • 2020-04-30
相关资源
最近更新 更多