通过ffmpeg进行Android视频修剪

时间:2012-08-10 08:54:06

标签: android android-ndk ffmpeg java-native-interface

我已从this link的github下载了视频修剪代码。

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

我也正在开发一个应用程序,它有一个修剪视频模块。 我真的很感激,如果有人能帮助我的话。

4 个答案:

答案 0 :(得分:4)

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

Calling native method twice of third party library in an Activity causes the Android application to close down

在'ffmpeg.c'中了解静态变量的问题......

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

  1. 获取加载lib和GC的java类加载器

  2. 在c层执行OP在上面链接中所做的事情

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

  4. github,请参阅“自述文件”here

    同样的问题

答案 1 :(得分:3)

只需在你的ffmpeg.c中创建一个类似于

的方法
void exitmycode(){
       ffmpeg_exit(0);

}

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

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

答案 2 :(得分:0)

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

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

尝试加载和卸载原生库link

答案 3 :(得分:-1)

做一件事

如果你已经安装了ffmpeg4android_os lib,那么你只需要评论1行方法 像这样的StopTranscoding

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

全部......