【问题标题】:Precompiled FFmpeg for android versus building FFmpeg using android NDK为 android 预编译的 FFmpeg 与使用 android NDK 构建 FFmpeg
【发布时间】:2017-11-22 00:42:49
【问题描述】:

我正在构建一个进行视频处理的安卓应用。

我目前正在使用来自https://github.com/writingminds/ffmpeg-android 的预编译 FFmpeg。另一种选择是下载 FFmpeg 源代码并使用 Android NDK 进行编译。我考虑选项 2 的原因是为了提高性能。我的问题是

  1. 上面提到的两个选项有区别吗?

  2. 如果是,会有什么区别。是否会提高性能(或)结果将完全一样(或)是否有其他优点或缺点?

  3. 当他们声明预编译的 FFmpeg 时,是否意味着它是使用 Android NDK 针对特定架构编译的?

请告诉我。

提前谢谢你!!!

【问题讨论】:

  • 除非你真的对构建过程做一些事情(例如编译器切换)或更改源..那么它会是一样的吗?仅仅因为您自己编译它并不会提高性能。还是您要问的其他问题?
  • 谢谢!想知道它是否会提高性能,以及是否建议在生产级应用程序中使用预编译版本或使用自己的编译版本?会出什么问题吗?
  • re: 高性能 ffmpeg/android ... 你可能想熟悉 stagefright lib vec.io/posts/use-android-hardware-decoder-with-omxcodec-in-ndk vec.io/posts/use-android-hardware-decoder-with-omxcodec-in-ndk 中的硬件集成,如果没有改变,ffmpeg 在移动设备上会很慢跨度>
  • 非常感谢,让我熟悉舞台恐惧。

标签: android performance ffmpeg android-ndk android-ffmpeg


【解决方案1】:

ffmpeg 可以使用非常不同的选项构建。某些组件可能被禁用,这可能会显着减小二进制文件的大小。 https://github.com/writingminds 中的预构建二进制文件包括 GPL 组件,例如x264 编码器。这意味着您在应用程序中使用它可能会遇到法律问题,除非它是开源的。请注意,我不是雇主,所以请不要犹豫,咨询专业人士。

在对使用预构建二进制文件存有疑问时要考虑的另一个问题是,这是一个整体二进制文件。如果您需要 ffmpeg 的某些特定功能,它可能会基于 ffmpeg 库(libavcodec、libavformat 等)构建自定义库。如果您使用 ffmpeg 转换长视频文件,这个优势可以忽略不计,但如果您必须处理许多小数据块,则开销可能很大。您也可以找到适用于 Android 的预构建库。

【讨论】:

  • 谢谢! 1. 使用较少的组件构建是否会提高执行速度,例如在视频上覆盖图像过滤器? 2)您是指Android中用于视频处理的预建库吗?如果是的话,你能推荐一些吗?
  • 经验法则是:如果您可以在 Linux 命令行上顺利执行任务,那么在 Android 上使用单体二进制文件就可以了。如果您的任务涉及复杂的脚本或编写 C 可执行文件 - 那么在 Android 上您还应该使用库,并避免产生单独的进程。
  • 您需要什么样的视频处理? OpenCV?
  • 在视频上放置图像过滤器
【解决方案2】:

性能可能会有很大差异

主要问题是您链接到的二进制文件在 x264 配置中使用 --disable-asm。此选项禁用特定于平台的程序集优化并导致 H.264 编码速度显着降低(在 ffmpeg 中通过 libx264 编码时)。我不确定二进制提供程序为何使用此选项。

使用 ffmpeg 时请参考控制台输出。如果它显示[libx264] using cpu capabilities: none!,那么您的编码速度不是最佳的,并且会不必要地变慢。作为参考,Android 用户通常应该看到类似NEON ARMv7 或类似的东西,而不是none

避免这种错误配置的二进制文件。自己正确编译将使您能够利用 ASM 优化,从而更快地编码。

【讨论】:

  • 感谢您的回复!是的,性能很慢。将尝试自己编译并测试它。你知道我可以使用的 x264 配置中不使用 --disable-asm 的任何其他二进制文件吗?
  • @AppDeveloper 我不知道有任何 Android 用户。
猜你喜欢
  • 2011-07-09
  • 1970-01-01
  • 2013-12-10
  • 2014-09-11
  • 2012-06-09
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多