2

我正在构建一个进行一些视频处理的 android 应用程序。

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

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

  2. 如果是,会有什么区别。是否会增强性能(或)结果将完全一样(或)是否有其他一些好处或缺点?

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

请告诉我。

先感谢您!!!

4

2 回答 2

4

性能可能会有很大差异

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

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

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

于 2017-06-19T20:25:42.373 回答
0

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

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

于 2017-06-19T18:41:23.300 回答