7

我已经从此链接从 github 下载了视频修剪代码。

它第一次完美运行,但是当我第二次尝试运行它时,代码毫无例外地崩溃,然后当我尝试在崩溃后第三次运行它时再次运行它!有没有人对这种行为有任何想法?

我还在开发一个具有一个修剪视频模块的应用程序。如果有人可以帮助我,我将不胜感激。

4

4 回答 4

4

https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html

Activity中调用第三方库的native方法两次导致Android应用关闭

阅读有关“ffmpeg.c”中静态变量的问题...

我敢打赌你有同样的问题,需要做一些事情(3个替代选择)来重置或GC这些变量:

  1. 获取加载 lib 的 java 类加载器并对其进行 GC

  2. 在 c 层中执行 OP 在上述链接中所做的操作

  3. 在每个调用周期中,在第一个库上编写一个使用“dlsym”和“dlclose”的第二个共享库

github,请参阅此处的“自述文件”

你遇到的同样的问题

于 2012-08-27T20:26:21.870 回答
3

只需在您的 ffmpeg.c 中创建一个看起来像这样的方法

void exitmycode(){
       ffmpeg_exit(0);

}

ffmpeg_exit(0)方法已经存在,ffmpeg.c您只需exitmycode();在完成视频修剪后从主 C 文件中调用。

现在发生的事情是,当您使用 ffmpeg 修剪视频或其他任何内容时,它不会完全退出,因此下次运行该命令时它会退出,但它也不会运行您的修剪命令。再次如果你第三次运行,命令得到完美执行。所以,我所做的是ffmpeg_exit(0)在处理结束时手动调用。

于 2013-09-18T12:56:52.297 回答
0

我认为您可以在代码中的视频修剪调用之后完成您的活动并重新启动应用程序。

如果在第二次应用程序崩溃并且在第三次工作之后,应用程序可能会在崩溃后初始化并重新启动应用程序。

尝试加载和卸载原生库链接

于 2012-08-20T07:59:13.437 回答
-1

做一件事

如果您已经安装了 ffmpeg4android_os lib,那么您只需要像这样注释 1 行方法 StopTranscoding

public void stopTranscoding() {
        Log.d(Prefs.TAG, "stopTranscoding called");
        if (_transcodeBackground != null) {
            //_transcodeBackground.forceCancel();
        }
    }

这一切……

于 2014-06-09T11:04:22.207 回答