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

简介: 最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展。将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基本视频流格式(如H.264等)和音频流格式,再运用live555中对基本音视频流的处理方式处理后,发送到客户端进行解码播放,这其中运用到了ffmpeg库,为了便于调试,开发环境初步选择了在wi
最近在做流媒体开发这一块,在服务器端,所用的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库了。

 

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

  

1Cannot 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

相关文章
|
5月前
|
安全 数据安全/隐私保护 Windows
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
244 15
如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡
|
5月前
|
关系型数据库 虚拟化 UED
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
191 7
Omnissa Horizon Windows OS Optimization Tool 2503 - Windows 系统映像优化工具
|
1月前
|
Ubuntu Linux Windows
windows11系统安装ubuntu系统详细步骤
安装后,您可以直接从商店启动应用程序来源
326 0
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
Windows中安装WSL 2和Ubuntu系统的教程
回看这一路,有趣吧?你已经跨界成为了一个Windows和Linux的桥梁。期待在代码的世界里,把一切玩得风生水起!
167 13
|
2月前
|
持续交付 Windows
如何使用Sysprep准备Windows系统并使用自动应答
通过Sysprep准备Windows系统,可实现SID重置与系统定制。进入Sysprep后,可安装软件、设置默认桌面文件,并使用Windows SIM创建应答文件以实现自动化部署。适用于系统克隆与批量部署场景。
|
4月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
1719 0
|
8月前
|
Ubuntu 开发工具 git
Ubuntu编译ffmpeg解决错误:ERROR: avisynth/avisynth_c.h not found
通过本文的详细指导,您可以顺利地在Ubuntu系统上配置和编译FFmpeg,并解决Avisynth头文件缺失的问题。
317 27
|
6月前
|
算法 关系型数据库 测试技术
WHQL微软驱动签名方案,让驱动程序在Windows系统流畅运行
WHQL认证(Windows徽标认证)是微软设立的严格测试标准,旨在确保驱动程序的兼容性、稳定性和互通性。本文介绍了三种WHQL微软驱动签名方案:单系统签名、多系统签名和硬件兼容性测试方案,分别满足不同开发商的需求。通过WHQL认证,不仅能消除Windows安装警告,提升用户体验,还能获得“Designed for Windows”徽标授权,入列全球Windows Catalog及HCL产品表,提升品牌权威性和采购优先权。此外,访问微软OCA可获取错误反馈,助力产品质量改进。选择合适的签名方案,让驱动在Windows系统中流畅运行!
|
8月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
592 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
6月前
|
Windows
Windows系统云服务器配置多用户登录
本教程介绍了在Windows云服务器上配置远程桌面服务的详细步骤,包括安装桌面会话主机和远程桌面授权、允许多用户远程连接以及配置新用户并加入远程桌面用户组。通过添加角色和功能、设置组策略以及管理用户权限,实现多用户同时登录和远程访问。按照指引操作,可顺利完成服务器的远程访问配置,提升管理和使用效率。
647 0