热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Windows下编译FFmpeg2.6.1详解

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

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

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

一、下载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 

Windows下编译FFmpeg-2.6.1详解

 

 

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

二、下载MinGW+msys

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

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

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

Windows下编译FFmpeg-2.6.1详解

 

 

Windows下编译FFmpeg-2.6.1详解

 

 

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

Windows下编译FFmpeg-2.6.1详解

 

 

Windows下编译FFmpeg-2.6.1详解

 

 

Windows下编译FFmpeg-2.6.1详解

 

 

 

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

Windows下编译FFmpeg-2.6.1详解

 

 

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

Windows下编译FFmpeg-2.6.1详解

 

 

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

Windows下编译FFmpeg-2.6.1详解

 

 

Windows下编译FFmpeg-2.6.1详解

 

 

Windows下编译FFmpeg-2.6.1详解

三、配置MinGW

         MinGW下载完成后进入安装目录,如果是C:\MinGW 则目录为C:\MinGW\msys\1.0

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

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"

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

Windows下编译FFmpeg-2.6.1详解

 

 

四、下载yasm

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

Windows下编译FFmpeg-2.6.1详解

五、配置yasm

             将下载好的yasm-1.3.0-win64.exe 或者 yasm-1.3.0-win32.exe 修改为 yasm.exe并拷贝到c:\windows\system32文件夹下--这样不需要做过多的环境变量配置

六、编译FFmpeg

            1、运行软件

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

                                  cd   D:\work\code\FFmpeg

          2、配置FFmpeg makefile

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

           3、编译FFmpeg

                        make

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

七、编译时问题

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

            1、gcc is unable to create an executable file.

                   这是由于gcc编译器没有准备好,应该是安装过程中出了错误,重装一下。

          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中,问题解决。

 

 
  1. #ifndef __STRCASECMP_H____

  2. #define __STRCASECMP_H____

  3.  
  4. static inline char __hack_charget( char c )

  5. {

  6. if(c >= 'a' && c <= 'z')

  7. c += 'A' - 'a';

  8. return c;

  9. }

  10.  
  11. static inline int hack_strcasecmp( char const *a, char const *b )

  12. {

  13. char ac, bc;

  14. int r;

  15. for(;;) {

  16. ac = __hack_charget(*a++);

  17. bc = __hack_charget(*b++);

  18. r = (int)ac - (int)bc;

  19. if(r)

  20. return r;

  21.  
  22. if(!ac)

  23. return 0;

  24. }

  25. }

  26.  
  27. static inline int hack_strncasecmp( char const *a, char const *b, int n )

  28. {

  29. char ac, bc;

  30. int r, i;

  31.  
  32. for(i = 0; i

  33. ac = __hack_charget(*a++);

  34. bc = __hack_charget(*b++);

  35. r = (int)ac - (int)bc;

  36. if(r)

  37. return r;

  38.  
  39. if(!ac)

  40. return 0;

  41. }

  42. return 0;

  43. }

  44.  
  45. #define strcasecmp hack_strcasecmp

  46. #define strncasecmp hack_strncasecmp

  47.  
  48. #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-20718335-id-2980793.html

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


推荐阅读
  • 我创建了一个SSH密钥,当我以admin身份在GitBash中运行ssh-Tgit@gitlab.com时,我得到W ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 其实之前也有下载过完整的android源码,但是从来没有对这个做过一些总结,在加上最近需要经常去看,索性就在从新下载,编译一下,其实这些东西官网上面都有。http:sou ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • (1)使用vi工具vitest.sh(2)利用如下命令查看文件格式:setff或:setfileformat可以看到如下信息 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
author-avatar
手机用户2602879667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有