我已经设法使用NDK版本r5c为Android NDK 编译halfninja ffmpeg脚本.(不幸的是,任何使用早期NDK编译的尝试都会产生一些错误),而且我对整个NDK过程并不是很了解,所以对我来说这有点受欢迎.
他的脚本正在编译ffmpeg版本N-30996-gf925b24(他为脚本执行的具体提交)
继续我的实际应用程序.我设法修剪影片没有问题,现在我需要加入/在使用上这3个环节中的命令的任何和几种组合(将它们连接起来,但任何学尝试链接1,链接2,LINK3)产生的错误,如cat is not valid,> is undefinined,unknown option filter_complex或试图重写一些输入文件.
有没有人知道是否有可能和(怎么做),加入/连接mp4视频(所有相同的编解码器,大小,质量等)使用Android上的半连队编译ffmpeg,或如何编译/获取ffmpeg Android使用最新的源代码?
我也快速尝试了mp4Parser而没有取得多大成功.
最终我试图让这个伪方法起作用:
public static File concatenate(String[] inputPaths, String outputPath){
// ... do stuff do generate ffmpeg commands....
VideoKit v = new VideoKit();
v.run(cmds);
File f = new File(outputPath);
return f;
}
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中集成了两个本机库(.so).库编译得很好,我也可以在我的应用程序中加载它们.我第一次调用库的本机方法时工作正常,但如果我在Activity中再次调用相同的方法,应用程序将关闭.
我面临的问题与此处提到的完全相同:http:
//grokbase.com/t/gg/android-ndk/1226m68ydm/app-exit-on-second-native-call
可行的解决方案是在另一个Activity中调用本机方法,并通过System.exit(0)强制关闭它.在文章之后,我尝试在成功操作后将指针设置为NULL,但这也没有帮助我.一旦由System.loadLibrary()加载库,也无法卸载它.
我想在不创建新Activity的情况下多次调用本机方法.任何想法如何解决这个问题?
(我最终找到了一个解决方案......就在这里)
好的,我终于找到了解决这个问题的方法.解决方案实际上非常简单.构建另一个独立的本机库(实用程序库)来加载和卸载其他库.我们需要做的是在实用程序的本机方法中使用dlopen()和dlclose().我们可以通过System.loadLibrary()像以前一样加载实用程序库.
因此,在实用程序库的本机方法中,我们需要做的是:
使用#include <dlfcn.h>//这是调用dlopen()和dlclose()函数所必需的.
提供处理程序和函数原型:
void *handle;
typedef int (*func)(int); // define function prototype
func myFunctionName; // some name for the function
Run Code Online (Sandbox Code Playgroud)
通过dlopen()打开库:
handle = dlopen("/data/data/my.package.com/lib/somelibrary.so", RTLD_LAZY);
Run Code Online (Sandbox Code Playgroud)
获取并调用库的功能:
myFunctionName = (func)dlsym(handle, "actualFunctionNameInLibrary");
myFunctionName(1); // passing parameters if needed in the call
Run Code Online (Sandbox Code Playgroud)
现在呼叫完成了.通过dlclose()关闭它:
dlclose(handle);
Run Code Online (Sandbox Code Playgroud)
希望这将有助于其他人面临同样的问题.
我正在尝试调用ffmpeg.c来修剪基于此代码"视频修剪器"的视频.所以,当我尝试运行活动(加载并使用本机库)时,我第一次单击它可以工作,我可以修剪视频,但当我再次尝试运行它时崩溃(它只适用于应用程序重启).
所以我花了三天时间寻找这个问题的解决方案,大多数答案说ffmpeg.c中的静态变量问题,并创建一个加载和卸载类的lib修复了问题(answer1,answer2).于是,我就申请了基于答案的解决方案,这对视频剪线项目的github回购,但我所有的努力都失败了.
有没有人知道修复问题的"视频修剪器"项目的分支?或者任何人都可以逐步回答如何在"视频修剪"项目中实施解决方案(因为我试图在网络上遵循所有解决方案并将其应用于该项目但没有运气).