用于android的预编译FFmpeg与使用android NDK构建FFmpeg

时间:2017-06-19 17:34:01

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

我正在构建一个可以进行视频处理的Android应用程序。

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

  1. 上述两个选项之间是否存在差异?

  2. 如果是,那会有什么不同。是否会增强性能(或)结果是否相同(或)是否存在其他一些好处或缺点?

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

  4. 请告诉我。

    提前谢谢!!!

2 个答案:

答案 0 :(得分:3)

性能可能会有很大差异

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

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

避免使用这个配置错误的二进制文件。正确地编译它将允许您利用ASM优化,因此编码更快。

答案 1 :(得分:0)

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

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