用VS2013编译FFMPEG232
http://blog.csdn.net/finewind/article/details/38854517
如果只是拿来使用,网上有现成的SDK。但我是想深入研究FFMPEG代码,又不熟悉Linux开发环境,因此需要编译一个在windos平台下能用VS单步调试的FFMPEG,网上现有资料大部分都是基于很老的版本,不断摸索,终于成功了。
之所以选择VS2013,是因为VS2013支持大部分C99的特性,不需要改动代码,也不需要使用C99转C89的工具。
MinGW和yasm是绕不过去的,因为需要使用MinGW来生成config.h,而ffmpeg的汇编语法和VS的不一样,因此需要yasm。
具体步骤:
1. 下载FFMPEG源码,下载地址:http://ffmpeg.zeranoe.com/builds/;
2. 下载MinGW安装器,下载地址:http://www.mingw.org/;下载完成后安装,安装完成后点运行,标记上以下几项:
然后在Installation菜单下点击Apply Changes(mingw32-gcc-g++不用选择);
3. 下载yasm,下载地址: http://yasm.tortall.net/ ;下载后改名为yasm.exe,复制到C:/MinGW/msys/1.0/bin目录下;
4. 配置C:/MinGW/msys/1.0/msys.bat,在此文件的最前面(@echo off之后)添加一行如下内容:
call "D:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" (依实际安装路径修改路径);
5.重命名 C:/MinGW/msys/1.0/bin/link.exe 为link_renamed.exe (依实际安装选择路径),这一步是防止这个link.exe与vc的link.exe发生冲突,编译完成后可修改回来;
6. 配置编译,双击msys.bat,转到FFMPEG源代码根目录下,可运行 ./configure --help查看编译配置选项,我使用的选项为:
静态库:./configure --enable-static --prefix=./vs2013_build --enable-debug --toolchain=msvc
动态库:./configure --enable-shared --prefix=./vs2013_build --enable-debug --toolchain=msvc
等待配置完成返回;
7. 输入 make all 编译;
8. 输入make install安装。
完成,此时生成的头文件及库已经在ffmpeg源代码下的vs2013_build目录下,使用这个库,即可在VS下单步进入FFMPEG函数内部。
参考资料:
http://www.cnblogs.com/xylc/p/3683203.html
http://blog.csdn.net/lipengyao2010/article/details/52317243
■yasm
编译x264时候需要
http://www.tortall.net/projects/yasm/
下载:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz
解压,编译安装:
./configure –prefix=/mingw
make
make install
【基本库】
■zlib
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz
将其解压到C:\MinGW
删除C:\MinGW\lib\libz.dll.a(否则会使用动态链接,需要libz.dll)
■bzip2
http://sourceforge.net/projects/mingw/files/
下载如下压缩包:
MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz
将其解压到C:\MinGW
删除C:\MinGW\lib\libbz2.dll.a(否则会使用动态链接,需要libbz-2.dll)
■SDL
http://www.libsdl.org/
编译ffplay时候需要
下载:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz
解压,修改Makefile:CROSS_PATH := /mingw
编译安装:make cross
【FFmpeg基本编译】
源码取得:svn://svn.mplayerhq.hu/ffmpeg/trunk
配置编译:假设安装路径为/FFmpeg/Release
./configure –prefix=/FFmpeg/Release –enable-memalign-hack
make
make install
【编解码库】
假设第三方库安装路径为/olibs
■libgsm
GSM support via libgsm
GSM 06.10 lossy speech compression
http://user.cs.tu-berlin.de/~jutta/toast.html
下载gsm-1.0.12.tar.gz
解压,修改Makefile中的CC = gcc -ansi -pedantic为CC = gcc
编译安装:
make
编译到后来会出错,但库已经编译完成,用如下命令拷贝即可
cp lib/libgsm.a /olibs/lib/
cp inc/gsm.h /olibs/include/gsm/
ffmpeg编译参数:–enable-libgsm
■libmp3lame
MP3 encoding via libmp3lame
http://sourceforge.net/projects/lame/files/
下载lame-3.98.3.tar.gz
解压,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面这行
$(ECHO) “non_pic_object=’$*.o’” >>$@
为
$(ECHO) “non_pic_object=’ .libs/$*.o’” >>$@
编译安装:
./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
make
make install
ffmpeg编译参数:–enable-libmp3lame
■opencore-amr
AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb
http://sourceforge.net/projects/opencore-amr/
下载opencore-amr-0.1.1.tar.gz(0.1.2编译需要g++、libstdc++.dll.a)
解压,注释掉以下Makefile中的几行
./opencore-amr/amrnb/Makefile
install: libopencore-amrnb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
endif
./opencore-amr/amrwb/Makefile
install: libopencore-amrwb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
endif
编译安装:
make CC=gcc
make install PREFIX=/olibs
ffmpeg编译参数:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb
■libogg
供libvorbis和libtheora用
http://www.xiph.org/downloads/
下载libogg-1.1.4.tar.gz
解压,编译安装:
./configure –prefix=/olibs –disable-shared
make
make install
■libvorbis
Vorbis encoding via libvorbis
http://www.xiph.org/downloads/
下载libvorbis-1.2.3.tar.gz
解压,编译安装:
./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install
ffmpeg编译参数:–enable-libvorbis
■libtheora
Theora encoding via libtheora
http://www.xiph.org/downloads/
下载libtheora-1.1.1.zip
解压,编译安装:
./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install
ffmpeg编译参数:–enable-libtheora
■libx264
H.264 encoding via x264
http://www.videolan.org/developers/x264.html
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
下载最新的源码包
解压,编译安装:
./configure –prefix=/olibs
make
make install
ffmpeg编译参数:–enable-gpl –enable-libx264
■libxvid
Xvid encoding via xvidcore
http://www.xvid.org/
下载xvidcore-1.2.2.tar.gz
解压,修改:
./build/generic/configure: “libxvidcore. <- “xvidcore.
编译安装:
cd xvidcore/build/generic
./configure –prefix=/olibs –disable-shared
make
make install
删除/olibs/lib/libxvidcore.dll
ffmpeg编译参数:–enable-gpl –enable-libxvid
■libfaac、libfaad
ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布
【FFmpeg高级编译】
假设安装路径为/FFmpeg/Release,假设第三方库所在路径为/olibs
配置编译:
./configure \
–prefix=/FFmpeg/Release \
–disable-debug \
–disable-static \
–enable-shared \
–enable-gpl \
–enable-version3 \
–enable-avfilter \
–enable-avfilter-lavf \
–enable-memalign-hack \
–enable-avisynth \
–enable-libgsm \
–enable-libmp3lame \
–enable-libopencore-amrnb \
–enable-libopencore-amrwb \
–enable-libtheora \
–enable-libvorbis \
–enable-libx264 \
–enable-libxvid \
–extra-cflags=-I/olibs/include \
–extra-ldflags=-L/olibs/lib
make
make install
用VS2013编译FFMPEG232的更多相关文章
- VS2013编译google protobuf 出现问题error C3861: “min”:
问题描述: 今天用vs2013编译protobuf 2.4.1 报错: 错误 3 error C3861: "max": 找不到标识符 f:\google\protobuf\pro ...
- Vs2012(Vs2013) 编译 64位 Qt (动态库), 并使用自编译Qt建立工程(悲催经历)。(含遗留问题)
仅供参考. 体会:我个人此次编译不该使用Vs2013编译Qt. 使用以下程序: Qt : qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe ...
- vs2013编译boost1.55.0 32/64位
在使用vs2013编译boost-1.55.0之前,先要给boost做下修改: boost_1_55_0\boost\intrusive\detail\has_member_function_call ...
- VS2013编译python源码
系统:win10 手头有个python模块,是用C写的,想编译安装就需要让python调用C编译器.直接编译发现使用的是vc9编译,不支持C99标准(两个槽点:为啥VS2008都还不支持C99?手头这 ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- 用vs2013编译lua源码方法(一)
用vs2013编译lua源码方法 来源:网络 编辑:admin 1.下载lua源码:lua-5.2.3.tar.gz,解压 2.用vs2013建立一个win32工程: 1)下载后解压到一个目录下 ...
- net-snmp源码VS2013编译添加加密支持(OpenSSL)(在VS里配置编译OpenSSL)
net-snmp源码VS2013编译添加加密支持(OpenSSL) snmp v3 协议使用了基于用户的安全模型,具有认证和加密两个模块. 认证使用的算法是一般的消息摘要算法,例如MD5/SHA等.这 ...
- cocos2d-x项目与vs2013编译
cocos2d-x项目与vs2013编译 2014-12-17 cheungmine 因为C++11引入了众多开源软件的特性,导致cocos2d-x r3.3项目无法用 vs2010编译. 所以安装了 ...
- 解答VS2013编译报错不准确是什么原因
1.当程序在错误时,VS2013编译报出的错误有时不会一起全部报出,而是按错误的英文首字母逐个报出的 2.如果报错的信息双击点过去查看时又发现无明显错误问题时,这个这个时候可以是VS编译的缓存问题,这 ...
随机推荐
- Java实现验证码的制作
验证码概述 为什么使用验证码? 验证码(CAPTCHA)是一种全自动程序.主要是为了区分“进行操作的是不是人”.如果没有验证码机制,将会导致以下的问题: 对特定网站不断进行登录,破解密码: 对某个网站 ...
- c#检查网络文件是否存在
public bool IsExist(string uri) { HttpWebRequest req = null; HttpWebResponse res = null; try { req = ...
- oracle11g卸载,10g之类版本通用
鉴于oracle一些比较稀奇的问题,本人没碰到的不能帮忙解决的.而且比较着急赶时间的亲们,我就只能推荐先卸载在安装的办法了,这个方法一般用时也就1个小时到1个半小时之间,切记按步骤删除,别漏删了,不然 ...
- Linux命令下,cp,rm,mv命令的使用
Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制 cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件对比两文件的新旧而予以更新, 以 ...
- Jmeter - 分布式部署负载机
1. 原理图: 2.具体操作 ① 负载机 安装JDK.Jmeter[版本与Controller 调度机一致] ② 配置环境变量 ③ 负载机自定义端口号 a.进入Jmeter的bin目录,找到Jmete ...
- Minecraft Forge编程入门三 “初始化项目结构和逻辑”
经过前面两个教程Minecraft Forge编程入门一 "环境搭建"和Minecraft Forge编程入门二 "工艺和食谱",我们大体知道了如何自定义合成配 ...
- orchestrator-Raft集群部署
本文简要说明下orchestrator的Raft集群部署,其实部署很简单主要是好好研究下配置文件的配置,这里我的样例配置文件暂时只适用于我们这块业务 如果您自己使用请根据情况自行修改. 主要通过配置文 ...
- mysql insert中用case
insert into urls(company,counterType,mdUrl,tradeUrl) values('test', CASE 'test'WHEN 'CTP' THEN 1WHEN ...
- 数值和字符串相互转换(C++ 数据类型转换技巧)
类型转换是将一种类型的值映射为另一种类型的值.进行数据类型的转换. 是在实际代码编写中经常遇到的问题,特别是字符串和其他类型的转换. 1.将字符串转换为整数 (1).转换函数// 双精度函数doubl ...
- css中的clear:both,display:flex;
介绍两者一起讨论的原因: 在明天就国庆的日子里陪着程序员的只有代码,啤酒,还有音乐,然后就是灯光下默默陪伴自己的影子.好了,不矫情了. -------------------------------- ...