FFmpeg - 混合视频和音频时大文件上的 ANR



此命令

ffmpeg -i video.webm -i audio.m4a -c copy output.mkv

对于任何大文件(例如大于 700MB(的转换结束时,将始终在 android 中产生 ANR 错误。

ANR误差仅在成功生成输出后的转换过程的尾端产生,而不是在中间或开始时等。

所以我怀疑这与最后的一些I/O有关。有人可以对此有所了解,并帮助消除此ANR问题吗?

默认情况下,ffmpeg 每 500 毫秒生成一次进度输出。FFmpeg-Android 处理此输出的方式是,它将进度消息返回到您的onProgress()回调中,并将所有这些(相对较短的(消息附加到字符串中,该字符串以 onSuccess() 形式返回。

发生的情况是,对于大型视频文件,内存可能会耗尽,或者至少垃圾收集器会非常努力地工作。这些字符串操作发生在主线程上,这很容易导致 ANR。

作为快速解决方法,您可以将-nostats传递给 ffmpeg 命令行:

ffmpeg -i video.webm -i audio.m4a -c copy output.mkv -nostats

要解决此问题,请查看 https://github.com/bravobit/FFmpeg-Android/pull/128。

最新更新