您的位置:首页 > 运维架构 > Linux

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

2017-05-24 16:03 369 查看
详细的说明请参考资源文件:

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();


代码,这个函数是用于把转换后的文件立即同步写到存储介质上。(因为转换结束后,文件数据实际还没完全立即写到介质上)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息