我从这个链接的github下载了视频剪辑代码。
第一次使用时它完美地工作,但当我尝试第二次运行它时,代码会崩溃而没有任何异常。然后在崩溃后再次尝试第三次运行它时,它又可以正常工作!有人对这种行为有什么想法吗?
我还正在开发一个应用程序,其中有一个模块是用于修剪视频。如果有人能帮助我,我将不胜感激。
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
在Activity中调用第三方库的本地方法两次会导致Android应用程序关闭
阅读关于“ffmpeg.c”中静态变量问题的内容...
我敢打赌你有同样的问题,需要做一些事情(3个备选项)来重置或GC这些变量:
获取加载lib的Java类加载器并GC它
在C层中执行上面链接中OP所做的操作
编写第二个共享库,在每个调用周期中使用“dlsym”和“dlclose”对第一个库进行操作
Github,请参见此处的“README”
与您遇到的相同问题
void exitmycode(){
ffmpeg_exit(0);
}
在ffmpeg.c
中已经有了ffmpeg_exit(0)
方法,你只需要在视频裁剪完成后在你的主C文件中调用exitmycode();
即可。
现在发生的情况是,当你使用ffmpeg裁剪视频或其他内容时,它无法完全退出,所以下次运行命令时,它会退出,但它也不会运行你的裁剪命令。再次运行第三次,命令会被完美地执行。因此,我所做的就是在处理完成后手动调用ffmpeg_exit(0)
。
我认为在代码中进行视频裁剪调用后,您可以完成活动并重新启动应用程序。
如果应用程序在第二次崩溃后,在第三次运行时正常工作,那么可能是应用程序初始化并在崩溃后重新启动了应用程序。
尝试加载和卸载本地库link
做一件事
如果您已经安装了ffmpeg4android_os库,那么您只需要注释掉StopTranscoding方法中的1行代码即可,就像这样
public void stopTranscoding() {
Log.d(Prefs.TAG, "stopTranscoding called");
if (_transcodeBackground != null) {
//_transcodeBackground.forceCancel();
}
}
那就是全部了...