我正在构建一个可以进行视频处理的Android应用程序。
我目前正在使用来自https://github.com/writingminds/ffmpeg-android的预编译FFmpeg。另一种选择是下载FFmpeg源代码并使用Android NDK进行编译。我正在考虑选项2的原因是为了提高性能。我的问题是
上述两个选项之间是否存在差异?
如果是,那会有什么不同。是否会增强性能(或)结果是否相同(或)是否存在其他一些好处或缺点?
当他们说明预编译的FFmpeg时,是否意味着它是使用Android NDK针对特定架构编译的?
请告诉我。
提前谢谢!!!
答案 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的预建库。