网上有直接可以运行执行文件可下,但是还是想感觉一下ffmpeg在windows编译的过程.都说不容易,到底有多难呢?
这么大一份代码,了解它如何编译后,会对它的框架有一个大致的认识.
我的这个编译没有加入任何扩展库,很原始的,很简单的.等我把这个编译完成后,会加入第三方库的,譬如librtmp,x264等.
1 linux中编译
1 获取代码
wget http://ffmpeg.org/releases/ffmpeg-3.0.2.tar.bz2
tar -jxvf xx.tar.bz2
2 yasm
//是因为 FFMPEG为了提高编译速度,使用了汇编指令,如果系统中没有yasm指令的话,就会出现上述的问题。
# wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# tar zxvf yasm-1.3.0.tar.gz
# cd yasm-1.3.0
# ./configure
# make && make install
3 安装SDL
yum list *SDL*
yum install SDL.x86_64
yum install SDL-devel.x86_64
4 configure
cd /data1/home/wy/ffmpeg/ffmpeg-3.0.2
chmod +x configure
./configure --enable-shared --prefix=/data1/home/wy/ffmpeg/ffmpeg_install
5 make
make
make install
linuc编译很简单,并且相对快.主要是win下的编译.
在win7上编译,参考的网址是:http://blog.chinaunix.net/uid-28472581-id-3794394.html
编程成功后,我把我的步骤总结一下.
首先说明的是编译很慢,configure要十几分钟,make大约要半小时吧.
中间出现几处错误,我花了大半天时间才成功.
2下载文件.
先下载一些东西
- 下载MinGW : mingw-get-setup.exe
- 下载 yasm(汇编编译器) : yasm-1.3.0-win32.exe
- 下载 pthreadGC2.dll: pthreadgc2.dll是功能强大的处理数字化影视作品编辑软件premiere6运行所需的一个DLL文件。
- 下载 ffmpeg : ffmpeg-3.0.2
- 下载SDL: SDL-devel-1.2.15-mingw32.tar.gz
这是我下载的所有东西.开始安装
3安装
3.1 MinGw
MinGW(Minimalist GNU on Windows):一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时库。
安装这个时有点怪的,需要自己来选择一些工具的.最基本的是: C Compiler,C++ Compiler和MSYS等.这一些都是好像默认的,开始安装.
这个需要等一会,不用急.
我的安装路径是: c:/MinGw
里面有几个比较重要的路径:
C:\MinGW\msys\1.0
C:\MinGW\msys\1.0\bin
C:\MinGW\msys\1.0\lib
C:\MinGW\msys\1.0\include
C:\MinGW\bin
C:\MinGW\lib
C:\MinGW\include
有这几个路径后,说明安装成功了.
还要改一个东西,至于为什么要改,不知道.
C:\MinGW\msys\1.0\etc目录下:
复制一份fstab.sample,然后改名为:fstab
3.2 yasm
把 yasm-1.3.0-win32.exe 改名为 yasm.exe
并放入到:C:\Windows\System32
3.3 pthreadGC2.dll
放入到:C:\MinGW\bin中
3.4 SDL
解压后,会出现bin,lib,include文件夹.
修改bin下的 sdl-config文件:
prefix=/usr 改成: prefix=c:/mingw
其中:c:/mingw 为 mingw的安装路径,请根据你的安装进行修改。
为了编译时和运行是能够找到SDL,把这三个文件夹的内容移到这两个地方:
C:\MinGW\msys\1.0\bin
C:\MinGW\msys\1.0\lib
C:\MinGW\msys\1.0\include
C:\MinGW\bin
C:\MinGW\lib
C:\MinGW\include
E:\myproject\ffmpeg-3.0.2\bin
E:\myproject\ffmpeg-3.0.2\lib
E:\myproject\ffmpeg-3.0.2\include
E:\myproject\ffmpeg-3.0.2 是ffmpeg 解压后的目录,bin,lib,include是我自己创建的.
这三个地方其实只需要一个就可以了,为了避免麻烦,我直接放到了这三个地方.
3.5 ffmpeg
解压到文件夹:E:\myproject\ffmpeg-3.0.2 下
4 编译
4.1 启动 MinGW
打开: C:\MinGW\msys\1.0\msys.bat
cd 到E:\myproject\ffmpeg-3.0.2目录下
4.2 configure
ffmpeg的configure很复杂.第一次大部分走默认:
./configure --enable-shared --disable-static --enable-ffplay --disable-ffprobe --disable-ffserver --extra-cflags=-IE:/myproject/ffmpeg-3.0.2/include --extra-ldflags=-LE:/myproject/ffmpeg-3.0.2/lib --enable-memalign-hack
参数的意义是:
--enable-shared --disable-static //编译动态库
--enable-ffplay --disable-ffprobe --disable-ffserver //编译出ffplay
--extra-cflags=-IE:/myproject/ffmpeg-3.0.2/include //SDL的include路径
--extra-ldflags=-LE:/myproject/ffmpeg-3.0.2/lib //SDL的lib路径
--enable-memalign-hack //windows编译必须加上这个.
由于我的目标主要是FFMPLAY,第一次编译只出现了这个:ffmpeg.原因是configure时,没检测出SDL.
SDL support no
如果检测出了,会为yes.
网上给出的答案是,configure后,硬改,改完后确实成功了.
E:\myproject\ffmpeg-3.0.2目录下config.mak文件:
!CONFIG_FFPLAY=yes,
!HAVE_SDL=yes
注释掉的了.所以去掉前面的感叹号.
很蛋疼.
configure也忒慢了,执行一个命令而已,要十来分钟.半天等不出来.
4.3 make
make的时候出现了代码错误,出现地方在file.c文件中,网上给出答案是,正确答案.
#include <windows.h>
#include <unistd.h>
取代
#include <unistd.h>
make也半个多小时吧.耐心等待..
成功后,会在ffmpeg的目录下出现ffmpeg和ffplay文件.
make install的话,会出现把生成的文件拷贝到:C:\MinGW\msys\1.0\local\下.
4.4 测试成功
ffplay test.flv
测试成功.
5 总结
win编译,肯定会遇到问题,网上有很多种不同的别人的编译步骤.所以每个人的步骤大同小异,遇到问题后,再查google吧.应该会编译成功,只是会花点时间而已.
下一篇我要加上扩展库,librtmp和x264库.