ffmpeg编译 (3.3版本) 以及 命令行工具的集成

详细的说明请参考资源文件:

http://download.csdn.net/detail/feixiangsmile/9827932?locationNum=9&fps=1

此文件主要内容为:ffmpeg的编译过程详解,ffmpeg命令行工具在android 上的移植,通过ndk-build或者cmake方式在android studio2.2,ndk14(官网下载android studio2.2,然后通过studio上sdk下载ndk-bundle)构建工程项目。使用的ffmpeg是3.3版本,目前为最新的(现在是2017年4月27日)。

也有部分网友下载使用了,但是发现只能执行一次,再次执行会闪退,经过调试后对此问题的bug修复如下:

对于cmdutils.c


void exit_program(int ret)
{
    if (program_exit)
        program_exit(ret);

    exit(ret);
}
修改为
int exit_program(int ret)
{
if (program_exit) //相对于那个文件中,少了这一句
        program_exit(ret);//相对于那个文件中,少了这一句
    return ret;
}

在ffmpeg.c文件中的

ffmpeg_cleanup函数中,需要增加以下代码(否则,你的android下的移植,在执行一次转换后,如果再次执行转换应用会崩溃。原因在于这些都是全局变量,ffmpeg命令行的此demo是一个应用,每次应用执行一次后此应用就退出了,下次再次执行时仍然是初始状态的值。而对于我们的android下的移植,第二次再执行时,这些变量是上次执行后的值,不是初始状态值)

nb_input_streams = 0;

nb_input_files   = 0;

nb_output_streams = 0;

nb_output_files   = 0;

nb_filtergraphs = 0;


另外,

int ffmpegmain(int argc, char **argv)(此前是ffmpeg.c中的main函数),在此函数的末尾exit_program(received_nb_signals ? 255 :main_return_code);之前增加

sync();

代码,这个函数是用于把转换后的文件立即同步写到存储介质上。(因为转换结束后,文件数据实际还没完全立即写到介质上)



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值