为 Android 构建 FFmpeg 以使用命令行参数

Building FFmpeg for Android to use command line arguments

本文关键字:命令行 参数 Android 构建 FFmpeg      更新时间:2023-10-16

我正在尝试构建 FFmpeg 库,以便在我的安卓应用程序中使用 NDK。这样做的原因是因为我正在使用 android 中的本机视频捕获功能,因为我真的不想编写自己的录像机。但是,本机视频捕获仅允许高质量编码或低质量编码。我想要介于两者之间的东西,我相信解决方案是使用 FFmpeg 库重新编码高质量视频以使其更轻。

到目前为止,我已经能够根据本指南构建 FFmpeg 库:http://www.roman10.net/how-to-build-ffmpeg-for-android/并且我已经能够对其进行一些调整。

然而,我发现的一切似乎都是关于编写自己的编码器,这对我来说似乎有点矫枉过正。我真正想做的是将命令行格式的字符串发送到 FFmpeg 的 main() 函数并重新编码我的视频。但是,我似乎无法弄清楚如何构建 FFmpeg 以让我访问主方法。我找到了这篇文章:编译 ffmpeg.c 并通过 JNI 调用它的 main(),它链接到一个项目,做我想要的少花钱多,但对于我的生活,我无法弄清楚发生了什么。似乎他编译的比我想要的要多,我真的很想让我的应用程序尽可能轻量级。

一些额外的方向将非常有帮助。谢谢。

在 Android NDK 中,您的应用程序中没有典型意义上的 main(),因此您无法直接执行所需的操作。但是,您仍然可以自己调用 FFmpeg 的 main() 并为其提供所有必要的参数。以下是获取参数的 2 种可能性:

  1. Android Activity 在创建后会收到一个 Intent。您可以在启动活动时通过 Intent 传递参数,然后像这样提取它:

    Intent CommandLine = this.getIntent();
    Uri uri = CommandLine.getData();
    
  2. 您可以从SD卡上某处创建的文件读取参数,并将其传递给FFmpeg。