在windows XP系统下编译和使用ffmpeg
最近在做流媒体开发这一块,在服务器端,所用的live555不支持mp4,avi等视频容器格式,所以打算运用ffmpeg来进行扩展。将MP4文件先运用ffmpeg进行解析,解析成live555所支持的基本视频流格式(如H.264等)和音频流格式,再运用live555中对基本音视频流的处理方式处理后,发送到客户端进行解码播放,这其中运用到了ffmpeg库,为了便于调试,开发环境初步选择了在windows下进行,所以需要在windows下编译ffmpeg。然后再扩充live555源代码。所用的版本为ffmpeg0.8.5.本文主要介绍如何编译ffmpeg,以及被vc6.0调用。
msys的目录是C:\MinGW\msys\1.0
二、编译过程
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库了。
附:编译时遇到的一些问题:
,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
在windows XP系统下编译和使用ffmpeg的更多相关文章
- Windows XP系统下添加任务计划常出现问题解决办法
Windows XP系统下添加任务计划常出现问题解决办法 计划任务就是让电脑在指定的时间内执行指定的动作(计划动作),这些动作可以是一个程序,也可以是一个批处理,但是至少是可以运行的(通俗一些就是双击 ...
- Intel Nehalem微架构Calpella平台机型Windows XP系统下如何开启AHCI硬盘工作模式(XP系统下如何加载AHCI驱动)
问题描述用户来电表示使用IDE模式安装XP系统后开启AHCI模式会出现开机蓝屏重启的问题,咨询如何在XP下加载AHCI驱动,以便开启BIOS中AHCI选项来发挥硬盘的最佳性能 问题分析 Windo ...
- 在Windows XP系统下架设FTP服务器需要5个步骤。
4步win7下简单FTP服务器搭建:http://blog.sina.com.cn/s/blog_3f7e47f20100haur.html 申请网域护照(即帐户),开通免费域名.连接到www.ora ...
- Windows XP SP3下编译安装check-0.10.0
软件环境:visual studio 2010 cmake-3.6.3-win32-x86 从github.com下载check-0.10.0到本地,解压出目录check-0.10.0 下载cmake ...
- Windows XP SP3下编译安装openssl-1.1.0b
软件需要: openssl-1.1.0b visual studio 2010(cn_visual_studio_2010_ultimate_x86_dvd_532347.iso) perl:Acti ...
- Windows XP环境下 搭建Android NDK环境
搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygw ...
- 我持续推动Rust语言支持Windows XP系统
前言 Rust好像长期以来不支持Windows XP系统.有不少用户发帖提议官方支持XP,基本上都被Rust官方开发人员明白的拒绝了.他们的对话大致上是以这种形式開始和结束的(当中乙方代表官方及其拥趸 ...
- xp系统下硬盘安装centos6.5
引言: 电脑系统是Windows XP,电脑没有光驱.手头没有U盘.没有移动硬盘.电脑主板不支持U盘启动,在这种情况下想安装CentOS 6.0,有木有办法? 答案:有办法,请看下面教程! 必备工具: ...
- Windows 10 x64 下编译 Hadoop 源码
Windows 10 x64 下编译 Hadoop 源码 环境准备 Hadoop并没有提供官方的 Windows 10 下的安装包,所以需要自己手动来编译,官方文档中 BUILDING.txt 文件中 ...
随机推荐
- 多对多中间表详解 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- Mysql高可用架构(主从同步)
做高可用的优势 1.成本低 2.解决单点故障 3.不容易遇到性能瓶颈 一 .Mysql主从同步架构搭建案例 优点如下:·在业务繁忙阶段,在从服务器上可以执行查询工作(即我们常说的读写分离),降低主服务 ...
- 二目运算符 “->”
-> 在C语言中称为间接引用运算符,是二目运算符,优先级同成员运算符“.”.用法:p->a,其中p是指向一个结构体的指针,a是这个结构体类型的一个成员.表达式p->a引用了指针p指向 ...
- rabbitMQ的安装和配置(一)
erlang是一门面向并发的编程语言,流行的消息队列rabbitMQ是基于erlang环境运行的: 系统环境 操作系统:oracle-linux7.3 erlang版本:otp_src_20.0 下载 ...
- Apache 配置SSI速记
1. 启用模块 httpd.conf LoadModule filter_module modules/mod_filter.so 2. <Directory 的Options配置中增加Incl ...
- 【OCR技术系列之三】大批量生成文字训练集
放假了,终于可以继续可以静下心写一写OCR方面的东西.上次谈到文字的切割,今天打算总结一下我们怎么得到用于训练的文字数据集.如果是想训练一个手写体识别的模型,用一些前人收集好的手写文字集就好了,比如中 ...
- springboot(二十):使用spring-boot-admin对spring-boot服务进行监控
上一篇文章<springboot(十九):使用Spring Boot Actuator监控应用>介绍了Spring Boot Actuator的使用,Spring Boot Actuato ...
- Hadoop学习笔记四
一.fsimage,edits和datanode的block在本地文件系统中位置的配置 fsimage:hdfs-site.xml中的dfs.namenode.name.dir 值例如file:// ...
- BZOJ 3450: Tyvj1952 Easy [DP 概率]
传送门 题意:$ox?$组成的序列,$?$等概率为$o\ or\ x$,得分为连续的$o$的长度的平方和,求期望得分 一开始没想出来,原因在于不知道如何记录长度 其实我们同时求得分和长度的期望就好了 ...
- 数据分析之pandas教程-----概念篇
目录 1 pandas基本概念 1.1 pandas数据结构剖析 1.1.1 Series 1.1.2 DataFrame 1.1.3 索引 1.1.4 pandas基本操作 1.1.4. ...