在windows XP系统下编译和使用ffmpeg

最近在做流媒体开发这一块,在服务器端,所用的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:\MinGW\msys\1.0

4, ffmpeg 0.8.5(源码可以在官网上找到)

5,ffmpeg编译里面的汇编代码需要yasm.exe,去yasm官网(http://yasm.tortall.net/Download.html)下一个windows合适的最新版本,弄好改名成yasm.exe放到C:\WINDOWS\system32下去(主要是省得加环境变量)或者放到C:\MinGW\msys\1.0\bin文件夹下。最好nasm也弄一个,经常某些库编译用的上。不放也无所谓,就是生成的东西不支持汇编,所以速度会很受影响。

 

二、编译过程

 

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

    call "C:\Program Files\Microsoft Visual Studio \VC98\bin\vcvars32.bat"

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

2、双击C:\MinGW\msys\1.0\msys.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:\MinGW\msys\1.0\local目录下,有对应的头文件(include中),dll以及lib等库文件(bin中),还有ffmpeg.exe等运行程序。

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

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

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

这样就可以调用ffmpeg库了。

 

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

  

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

1、找到include目录中的ffmpeg\common.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目录中的ffmpeg\common.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

时间: 2024-10-27 11:20:36

在windows XP系统下编译和使用ffmpeg的相关文章

Windows XP系统下如何共享打印机

  Windows XP系统下如何共享打印机 一般您家中的几台电脑都用一个交换机(也可能是集线器或路由器)连在一起. 现在无线也普及了,许多都用无线路由器连接. 一般家中的路由器或交换机都具有自动设置 IP 地址的功能. 所以我们可以把 IP 地址设成自动获取. 开始 -> 右键网上邻居-> 属性-> 右键本地连接-> 属性-> 双击 Internet 协议(TCP/IP)-> 把 IP 地址和 DNS 服务器全部选成自动.

Windows XP系统下禁用不需要的系统服务

  Windows XP系统下禁用不需要的系统服务           第1步,在Windows XP系统桌面上右键单击"我的电脑"图标,选择"管理"命令. 第2步,打开"计算机管理"窗口,在左窗格中展开"服务和应用程序"目录,并选中"服务"选项. 然后在右窗格中双击准备禁用的服务名称(如Terminal Services),如图2010040531所示. 图2010040531 "计算机管理&q

Windows XP系统下管理员账户不见了怎么办?

  Windows XP系统下管理员账户不见了怎么办? 方法如下: 1.点击"开始--运行",输入"regedit"命令后按回车键; 2.在打开的注册表编辑器窗口中,在左侧依次展开以下注册项目: HKEY_LOCAL_MACHINE--SOFTWARE--Microsoft--Windows NT--CurrentVersion--Winlogon--SpecialAccounts--UserList; 3.在右侧窗口右键Administrator,选择修改; 4.

Windows XP系统下架设FTP服务器的步骤

如今家庭应该是普遍使用包月的宽带接入Internet了,我们在充分享受极速冲浪的快感时,是否考虑过利用现有资源为自己做点什么呢?对啦,今天本文的目的就是带大家在本机上架设一个FTP服务器,建立这种服务器用于远程资源共享实在是个不二的选择!以下架设步骤主要以Windows Xp系统为例. 如今的国内电信运营商已经把宽带的资费调整到了一个容易被大家接受的水平了,人们在享受宽带带给我们的便利与迅捷的同时,越来越多的人开始考虑是不是应该利用现有的充足资源来做更多的事情.很多人把目标瞄准了FTP服务器.的

Windows XP系统下安装Vmware6.0虚拟机

虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所以你可以随意修改虚拟机的设置,而不用担心对自己的电脑造成损失.虚拟机中有自己的CPU.主板.内存.BIOS.显卡.硬盘.光驱.软驱.网卡.声卡.串口.并口和USB等设备. 虚拟机简介 一.虚拟机的简介 虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所以你可以随意修改虚拟机的设置,而不用担心对自己

Windows XP系统下设置PPTP/L2TP连接的正确步骤

  虽然说,微软已经宣布:Windows XP系统退出历史舞台,但是,仍然有许多用户的电脑中安装着Windows XP系统.一些Windows XP系统用户发现想设置PPTP/L2TP连接的时候,按照Windows 7系统的教程去设置是不行的,那么,Windows XP系统用户该怎么正确设置PPTP/L2TP连接呢?一起来看看今天的教程吧! 第一步,您要有一个VPN帐号; 第二步,点击任务栏"开始"→"设置"→"控制面板",双击"网络连

声卡无法在Windows XP系统下使用怎么办

  问:在Windows XP下,已经安装了系统自带的声卡驱动,而且任务栏的通知区域也有显示音量控制图标,但就是没有声音,请问如何解决? 答:如果确定扬声器连接无误,那么应该是声卡驱动的问题.许多老的声卡在Windows 2000或Windows XP中都显示驱动安装成功,但就是无法工作.解决的方法是到上下载当前声卡在Windows 2000或XP相应驱动进行安装.

Windows XP系统下壁纸如何设置更好看

  在风格突出的现代,好的壁纸也是给人个性的一种呈现,壁纸的功用如今已经变得十分重大了,因此壁纸之类的问题也引起了很多人的关注.好的壁纸能带给我们好的工作心情,下面系统之家就给大家讲述一些经典的壁纸设置技巧. 一.壁纸用BMP还是JPEG格式好? 在Windows 9x中,如果使用的壁纸格式不是BMP格式的,而是JPEG格式的,桌面属性必须打开Web支 持才能顺利看到壁纸效果;而在windows xp中,使用任何图片格式,系统都可自动处理.笔者的建议是:在物理内存较大的时候,使用BMP格式图片,

Windows XP系统下如何跟踪IP地址

  跟踪IP地址有时候是必需的,如果你的网络发生问题或者需要改变些设置的时候,这个东西就派上用场了. 作为网管员,在我们解决Windows 操作系统的DHCP故障时,有时要找出某个地址范围内有哪些地址没有被使用.本人以前介绍过一种方法:打开命令提示窗口,在For-in-Do循环中调用ping命令. 例如,为了找出在地址范围192.168.1.1 到 192.168.1.100有哪些地址没有被使用,可以使用这个命令:For /L %f in (1,1,100) Do Ping.exe -n 2 1