国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > [置顶] Windows下编译FFmpeg详解

[置顶] Windows下编译FFmpeg详解

来源:程序员人生   发布时间:2015-04-14 08:03:26 阅读次数:4468次

Windows下编译FFmpeg⑵.6.1详解

          在诸多网友帮助下终究弄定了FFmpeg V2.6.1,由于编译环境和程序版本的不同,造成了很多没必要要的时间浪费,特在此将编译进程和遇到的问题解决方法写出来,以便方便大家。

          编译环境:PC Windows7 64bit、编译工具:MinGW+MSYS+yasm  编译软件:ffmpeg-snapshot-git.tar.bz2

1、下载FFmpeg

               FFMPEG官网:http://ffmpeg.org/download.html

               FFmpeg SVN:svn://svn.mplayerhq.hu/ffmpeg/trunk

               FFmpeg GIT:    git://source.ffmpeg.org/ffmpeg.git ffmpeg

             由于FFmpeg的SVN代码停止了更新,所以从 svn://svn.mplayerhq.hu/ffmpeg/trunk 上Down下来的代码编译后与在官网上下载的头文件不匹配!所以只能从git上下载或下载git紧缩包!

             

               我的下载步骤:打开http://ffmpeg.org/download.html 

 

        下载完ffmpeg-snapshot-git.tar.bz2后解压到D:workcodeFFmpeg 路径任意(最好为英文,方便MinGW操作)

2、下载MinGW+msys

             MinGW - Minimalist GNU for Windows-是Windows下摹拟linux运行的库、头文件等的集合。

             msys-Minimal SYStem-是Windows下摹拟linux运行的最新系统,可以通过类似于linux bash的命令行窗口进行代码编译。

             登陆 http://sourceforge.net/projects/mingw/files/ 

 

 

下载完成以后点击安装 关键是选择1个路径C:MinGW作为安装路径,直接下1步就能够

 

 

 

 

最后点击continue进行安装终了确认 并进入下载环节

 

              点击左侧的列表框,选中 Basic Setup,在右边会出现1些必要的下载项,全选便可。

 

            选择终了后点击菜单Installation->Apply Changes 开始下载

 

 

3、配置MinGW

         MinGW下载完成落后入安装目录,如果是C:MinGW 则目录为C:MinGWmsys1.0

         用记事本打开msys.bat文件,在第1行加入:

call "C:Program Files (x86)Microsoft Visual Studio 12.0VCinvcvars32.bat"

         call对应的目录为你的VC安装程序所在目录

 

4、下载yasm

     ffmpeg编译的时候需要yasm.exe   打开http://yasm.tortall.net/Download.html    下载与你版本相匹配的yasm 我用的是win764位 所以下载的是 Win64 .exe (for general use on 64-bit Windows) 如果你的32位系统请下载32位的程序

5、配置yasm

             将下载好的yasm⑴.3.0-win64.exe 或 yasm⑴.3.0-win32.exe 修改成 yasm.exe并拷贝到c:windowssystem32文件夹下--这样不需要做过量的环境变量配置

6、编译FFmpeg

            1、运行软件

                      运行C:MinGWmsys1.0msys.bat 在弹出窗口中进入ffmpeg的代码解压路径

                                  cd   D:workcodeFFmpeg

          2、配置FFmpeg makefile

                     输入   ./configure --enable-shared --disable-static --enable-memalign-hack

           3、编译FFmpeg

                        make

           ffmpeg生成的文件在各自的目录下,可以通过windows自带的查找文件功能 搜索*.dll和*.lib 导出这些生成库

7、编译时问题

             如果编译的是老版本的FFmpeg 则会出现以下这些问题

            1、gcc is unable to create an executable file.

                   这是由于gcc编译器没有准备好,应当是安装进程中出了毛病,重装1下。

          2、error: static declaration of 'lrint' follows non-static declaration

../libavutil/libm.h:62: error: static declaration of 'lrint' follows non-static declaration
../libavutil/libm.h:69: error: static declaration of 'lrintf' follows non-static declaration
../libavutil/libm.h:76: error: static declaration of 'round' follows non-static declaration
../libavutil/libm.h:83: error: static declaration of 'roundf' follows non-static declaration

        将ffmpeg代码路径下的config.h中的lrint、lrintf、round、roundf等定义为1

         3、implicit declaration of function 'strcasecmp'

         这个问题是由于MinGW的环境中没有strcasecmp函数造成,可以通过自己编写代码加入到工程中,也能够自己编写代码保存成文件放到MinGW的include目录下。

         将以下代码存储成strcasecmp.h于mingw include目录下。
将这个文件include进avstring.h和metadata.h中,问题解决。

 

#ifndef __STRCASECMP_H____ #define __STRCASECMP_H____ static inline char __hack_charget( char c ) { if(c >= 'a' && c <= 'z') c += 'A' - 'a'; return c; } static inline int hack_strcasecmp( char const *a, char const *b ) { char ac, bc; int r; for(;;) { ac = __hack_charget(*a++); bc = __hack_charget(*b++); r = (int)ac - (int)bc; if(r) return r; if(!ac) return 0; } } static inline int hack_strncasecmp( char const *a, char const *b, int n ) { char ac, bc; int r, i; for(i = 0; i < n; ++i) { ac = __hack_charget(*a++); bc = __hack_charget(*b++); r = (int)ac - (int)bc; if(r) return r; if(!ac) return 0; } return 0; } #define strcasecmp hack_strcasecmp #define strncasecmp hack_strncasecmp #endif


        4、-Werror=implicit-提示

         这个表示将隐式声明函数毛病,可以通过修改FFmpeg目录下通过./configure生成的config.mak文件,将Werror相干的地方删除便可。如:

-Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla  则删除-Werror=implicit-function-declaration

       

 援用:http://blog.sina.com.cn/s/blog_4ae178ba01010353.html

                    http://blog.chinaunix.net/uid⑵0718335-id⑵980793.html

                    http://www.xuebuyuan.com/1428648.html

 

    

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生