zoukankan      html  css  js  c++  java
  • 在windows XP系统下编译和使用ffmpeg 分类: windows驱动程序WDM VC++ 2013-08-12 11:12 833人阅读 评论(0) 收藏

    最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展。将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基本视频流格式(如H.264等)和音频流格式,再运用live555中对基本音视频流的处理方式处理后,发送到客户端进行解码播放,这其中运用到了ffmpeg库,为了便于调试,开发环境初步选择了在windows下进行,所以需要在windows下编译ffmpeg。然后再扩充live555源代码。所用的版本为ffmpeg0.8.5.本文主要介绍如何编译ffmpeg,以及被vc6.0调用。

    一,编译环境的搭建:

    1,操作系统:windows xp sp3
    2, VC6.0
    3, MinGW+msys
        http://sourceforge.net/projects/mingw/files/去下载在线安装包,这个文件一般只有几百K字节,下完以后双击运行,按提示安装,在需要选择的时候把和C、C++、msys相关的都选上,继续自动安装,然后需要等待一些时间……MinGW+msys系统便已经安装好了,我安装的路径是C:MinGW, msys的目录是C:MinGWmsys1.0
    4, ffmpeg 0.8.5(源码可以在官网上找到)
    5,ffmpeg编译里面的汇编代码需要yasm.exe,去yasm官网(http://yasm.tortall.net/Download.html)下一个windows合适的最新版本,弄好改名成yasm.exe放到C:WINDOWSsystem32下去(主要是省得加环境变量)或者放到C:MinGWmsys1.0in文件夹下。最好nasm也弄一个,经常某些库编译用的上。不放也无所谓,就是生成的东西不支持汇编,所以速度会很受影响。
     

    二、编译过程

     

    1、编辑C:MinGWmsys1.0msys.bat文件,在最前面加入一行

        call "C:Program FilesMicrosoft Visual Studio VC98invcvars32.bat"

    后面路径是机器上安装的vc的对应路径,加入这行编译ffmpeg时会多出windows下调用dll对应的lib,方便vc调用。(网上看到的)

    2、双击C:MinGWmsys1.0msys.bat运行,进入ffmpeg源码目录D:ffmpeg0.8.5,这个窗口的命令和shell相似,和cmd运行有些区别,右斜杠需要换成左斜杠,然后盘符D:也要改成/d,输入cd /d/ffmpeg/ffmpeg0.8.5,进入ffmpeg主目录。

    3、开始编译ffmpeg,继续输入:

        "./configure --enable-shared --disable--static --enable-memalign-hack" 配置

    4,等待一段时间后,输入:make (忽略警告)

    5,等待较长的时间后,输入make install

     

        此时编译过程结束,需要的结果在C:MinGWmsys1.0local目录下,有对应的头文件(include中),dll以及lib等库文件(bin中),还有ffmpeg.exe等运行程序。

        在自己编译的时候,曾经先编译了ffmpeg1.0,但因为版本的问题,在扩充的代码中老是报内存不能为读的错误,怀疑是ffmpeg版本的问题,所以想要降到0.8的试一下。但是在后来编译0.8的时候不论哪种版本,配置configure完后,make的时候都找不到相应的文件,无法make,这个问题困扰了自己很长时间,曾经一度想放弃,改在linux下操作。后来在网上找到点蛛丝马迹。干脆把MinGW卸载了,重新安装的,然后配置,make就可以了。具体原因没有深究。

        补充说明:make指令后实际上在ffmpeg目录里已经有生成的dlllib了,但是make install指令还是建议要执行 因为它会为你整理好需要的头文件(太体贴了,自己全拷觉得太多,自己选择又太麻烦,而且不会正确),然后dll文件大小会减小一些(自动文件瘦身)。

        最后用VC6.0调用生成的库。在VC6.0的include路径中加入在上文生成local中includ路径。在link路径中加入local中bin的路径,然后在自己所建的工程link中加入生成的静态库avformat.lib avutil.lib avcodec.lib 

    这样就可以调用ffmpeg库了。

     

    附:编译时遇到的一些问题:

      

    1Cannot open include file: 'inttypes.h': No such file or director解决办法

    1、找到include目录中的ffmpegcommon.h
    2、在“#define COMMON_H”之后加入如下代码,同时删除“#include <inttypes.h>” 然后保存:

    #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
      define CONFIG_WIN32
    #endif
    #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES)
      define EMULATE_INTTYPES
    #endif
    #ifndef EMULATE_INTTYPES
     include <inttypes.h>
    #else
        typedef signed char  int8_t;
        typedef signed short int16_t;
        typedef signed int   int32_t;
        typedef unsigned char  uint8_t;
        typedef unsigned short uint16_t;
        typedef unsigned int   uint32_t;
     ifdef CONFIG_WIN32
            typedef signed __int64   int64_t;
            typedef unsigned __int64 uint64_t;
     else
            typedef signed long long   int64_t;
            typedef unsigned long long uint64_t;
     endif
    #endif

     

    2,error C3861: 'UINT64_C': identifier not found
    找到include目录中的ffmpegcommon.h
    在函数头部加入宏定义:

    //自己所加的定义,处理UINT64_C未定义的错误

    #ifndef INT64_C

    #define INT64_C(c) (c ## L)

    #define UINT64_C(c) (c ## UL)

    #endif

     

    3,处理相关宏定义格式错误,将括号中的改为n

    #if AV_GCC_VERSION_AT_LEAST(4,3)

        #define av_alloc_size(n) __attribute__((alloc_size(__VA_ARGS__)))

    #else

        #define av_alloc_size(n)

    #endif

     

    4,出现Cannot open include file: 'stdint.h': No such file or directory

    在出现 #include <stdint.h>的地方注掉即可

     

    5,处理template类错误的方法,在extern前检查宏定义

    #undef __cplusplus

    extern "C" {

    #include "libavutil/avutil.h"

    #include "libavformat/avformat.h"

    }

    #define __cplusplus

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    18.综合应用判断素数
    17.综合应用判断素数
    16.综合应用判断素数
    15.for循环的三个表达式是可以省略
    14.循环的理解
    myeclipse2014中搭建SSH环境注意事项
    Java web设计模式学习
    问题1:myeclipse中导入新JSP项目出现红色感叹号
    Java集合类学习笔记
    Java 复习第一部分:知识体系、变量、运算部分
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706853.html
Copyright © 2011-2022 走看看