我已经从此链接从 github 下载了视频修剪代码。
它第一次完美运行,但是当我第二次尝试运行它时,代码毫无例外地崩溃,然后当我尝试在崩溃后第三次运行它时再次运行它!有没有人对这种行为有任何想法?
我还在开发一个具有一个修剪视频模块的应用程序。如果有人可以帮助我,我将不胜感激。
我已经从此链接从 github 下载了视频修剪代码。
它第一次完美运行,但是当我第二次尝试运行它时,代码毫无例外地崩溃,然后当我尝试在崩溃后第三次运行它时再次运行它!有没有人对这种行为有任何想法?
我还在开发一个具有一个修剪视频模块的应用程序。如果有人可以帮助我,我将不胜感激。
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
Activity中调用第三方库的native方法两次导致Android应用关闭
阅读有关“ffmpeg.c”中静态变量的问题...
我敢打赌你有同样的问题,需要做一些事情(3个替代选择)来重置或GC这些变量:
获取加载 lib 的 java 类加载器并对其进行 GC
在 c 层中执行 OP 在上述链接中所做的操作
在每个调用周期中,在第一个库上编写一个使用“dlsym”和“dlclose”的第二个共享库
github,请参阅此处的“自述文件”
你遇到的同样的问题
只需在您的 ffmpeg.c 中创建一个看起来像这样的方法
void exitmycode(){
ffmpeg_exit(0);
}
ffmpeg_exit(0)
方法已经存在,ffmpeg.c
您只需exitmycode();
在完成视频修剪后从主 C 文件中调用。
现在发生的事情是,当您使用 ffmpeg 修剪视频或其他任何内容时,它不会完全退出,因此下次运行该命令时它会退出,但它也不会运行您的修剪命令。再次如果你第三次运行,命令得到完美执行。所以,我所做的是ffmpeg_exit(0)
在处理结束时手动调用。
做一件事
如果您已经安装了 ffmpeg4android_os lib,那么您只需要像这样注释 1 行方法 StopTranscoding
public void stopTranscoding() {
Log.d(Prefs.TAG, "stopTranscoding called");
if (_transcodeBackground != null) {
//_transcodeBackground.forceCancel();
}
}
这一切……