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

标签 android video ffmpeg

这个命令

ffmpeg -i video.webm -i audio.m4a -c 复制 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 .

关于android - FFmpeg - 混合视频和音频时大文件的 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57067507/

相关文章:

android - 将蓝牙的可发现模式设置为始终在线以失败

javascript - 检测视频/音频是否在 html5 video 标签中停止

bash - FFmpeg 脚本跳过文件

php - 轮播播放列表中的缩略图顺序

python - 在 python 语法错误中使用 ffmpeg 调整大小

c++ - 如何从 C++ 对 bat 文件执行命令

安卓蜂窝 : How to style right corner arrow in spinner on an ActionBar

Android:如何将 Parcelable 对象传递给 Intent 并使用 bundle 的 getParcelable 方法?

java - Android: URL 以 -/\n 结尾的 TextView 链接错误

java - 如何在android os中获取视频的帧速率?