【问题标题】:Building FFmpeg for Android to use command line arguments为 Android 构建 FFmpeg 以使用命令行参数
【发布时间】:2012-06-11 00:52:57
【问题描述】:

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

到目前为止,我已经能够根据本指南构建 FFmpeg 库:http://www.roman10.net/how-to-build-ffmpeg-for-android/ 并且我已经能够让它工作。

但是,我发现的一切似乎都是关于编写自己的编码器,这对我来说似乎有点过头了。我真正想做的就是将命令行格式的字符串发送到 FFmpeg 的 main() 函数并重新编码我的视频。但是,我似乎无法弄清楚如何构建 FFmpeg 以使我能够访问 main 方法。我找到了这篇文章:Compile ffmpeg.c and call its main() via JNI,它链接到一个项目,做我想做的事,但对于我的生活,我无法弄清楚发生了什么。看起来他编译的东西比我想要的多,我真的希望我的应用程序尽可能地轻量级。

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

【问题讨论】:

  • 我对同样的事情也很感兴趣,但是是为了音频捕获而不是视频。类似的原则也适用,所以我要为你的问题加分。
  • @Brad,您能否澄清一下:您已经能够使用上述指南构建 ffmpg,但您想通过从 java 代码调用它并传递一些参数来弄清楚如何实际使用构建的库为了编码的目的。这种理解对吗?
  • @av501,我希望使用 FFMPEG 的 Alsa 输入从 Android 设备上的麦克风捕获音频。我相信这与 Zargoon 想要从相机捕捉视频的方式一致。不过,这是Zargoon的问题,所以如果这两个东西真的不同,请具体按照视频捕捉的方式回答。
  • 通过 JNI 直接调用 ffmpeg 的 main 参考这个链接 .... [这里][1] [1]:stackoverflow.com/questions/2401764/…

标签: android c++ c android-ndk ffmpeg


【解决方案1】:

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

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

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

【讨论】:

  • 嘿。我也想在 android 中运行 ffmpeg 命令。我怎样才能实现它。你能指导一下吗?
  • 通过这种方式,我们可以调用位于 jni 中 FFMPEG 文件夹中的 main() 方法,并将我们的命令传递到我们的原生 C 文件中。您能否分享您的知识,以便它也可以帮助我们...
猜你喜欢
  • 2011-08-25
  • 2012-02-07
  • 2012-03-26
  • 2021-12-02
  • 2015-05-20
  • 1970-01-01
  • 2014-10-26
  • 2020-10-11
  • 1970-01-01
相关资源
最近更新 更多