为 Android 构建 FFmpeg 以使用命令行参数
Building FFmpeg for Android to use command line arguments
我正在尝试构建 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 种可能性:
-
Android Activity 在创建后会收到一个 Intent。您可以在启动活动时通过 Intent 传递参数,然后像这样提取它:
Intent CommandLine = this.getIntent(); Uri uri = CommandLine.getData();
-
您可以从SD卡上某处创建的文件读取参数,并将其传递给FFmpeg。
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 使用 C++ 将命令行参数拆分为参数/向量
- 如何在OMNET++中添加专门的命令行参数?
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- atoi() 在应用于大型命令行参数时会产生不正确的值
- 命令行参数,cant 或两个变量
- 在 Windows 中使用 boost::p rogram_options 从命令行参数读取 Unicode 字符
- 如何在 Android/NDK 上将命令行参数从 gradlew.bat 传递到 Clang
- 编写一个将 LLVM IR 文件作为命令行参数的程序
- 通过命令行参数获取llvm ir文件时面临问题
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 如何在不使用文件扩展名的情况下使用命令行参数打开C++中的文本文件?
- 命令行参数在不到 3 个 LOC 中 int?
- 在命令行参数中使用引号
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 二进制数据作为命令行参数
- 如何在 C++11 中创建具有命令行参数大小的动态数组?
- 需要有关如何设置getopt_long以正确传递命令行参数的建议
- Bash 脚本和命令行参数