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

标签 android c++ c android-ndk ffmpeg

我正在尝试使用 NDK 构建 FFmpeg 库以在我的 android 应用程序中使用。这样做的原因是因为我正在使用android中的 native 视频捕获功能,因为我真的不想编写自己的录像机。但是, native 视频捕获只允许高质量编码或低质量编码。我想要介于两者之间的东西,我相信解决方案是使用 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它链接到一个项目,做我想要的更多或更少,但对于我的生活,我无法弄清楚发生了什么。看起来他编译的比我想要的要多,我真的很想让我的应用程序尽可能轻量。

一些额外的指导会非常有帮助。谢谢。

最佳答案

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

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

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

关于android - 为 Android 构建 FFmpeg 以使用命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923837/

相关文章:

JAVA Jackson 解析包含列表/数组的 JSON 响应

android - 无法在textview中查看所有文本

c++ - C++中的数组分配在具有不同长度的堆栈上

c++11 反向迭代器和 lower_bound

c - 如何查找 C 结构 (struct sockaddr_in) 的手册页?

c - 运行时检查失败 #2 - 变量 'start' 周围的堆栈已损坏

android - 共享数据库数据

Android Studio 自动添加一些权限?

c++ - Qt、cmake 和 qhelpgenerator

c++ - MSXML loadXML 不会加载带有命名空间前缀的元素...为什么?