在使用ffmpeg过程当中,ffmpeg在Linux(包括mac,android)编译非常容易,直接configure,make即可,Android需要交叉编译,在windows就比较麻烦,庆幸的是ffmpeg官方提供已编译好Windows版本的二进制库(http://ffmpeg.org/download.html#build-windows),通常情况下直接拿来使用。但如果要对ffmepg就行二次开发(功能定制,定制等)就需要自己动手编译了。本文简单介绍ffmpeg的Windows版本编译的基本方案。
一、基本原理
ffmpeg项目来自linux项目,所以在类Linux中编译非常容易(unix,mac,android),只需要configure,make即可,当然android需要在Linux宿主机上交叉编译,由于windows和Linux 文件系统和环境组织结构不一样,无法执行shell脚本和make命令。所以在Windows上要模拟一个Linux环境。使用Linux风格编译Windows版本程序有主要有3种方案
1)cygwin方案
cygwin就是一个windows上类unix环境,可以在cygwin使用Linux的思路编译Windows 程序。cygwin安装使用了 setup-x86_64.exe安装器,镜像源可以选择163(网易的)地址,这样下载包比从国外源快,以前安装过一次cygwin,,不知如何选包,全部安装了,结果占用5个G。现在的cywin默认是最小化安装,但并不包括Gcc,如果要使用gcc,g++,make,gdb工具,是需要选择这些包的 gcc-core、gcc-g++、make、gdb、binutils,五个包都在Category下的Devel下 。
该方法优点完整Linux模拟环境,完全可以像在Linux发行版一样容易编译。缺点是程序在Windows上运行需要依赖cygwin核心库。类似于QT程序依赖Qt核心库一样。当然cygwin只是一个Windows上模拟的Linux环境,我们可以将他当做Linux环境使用交叉编译器做嵌入式开发。嵌入式开发通常都是交叉编译。通常是在Linux发行版上编译嵌入式程序,当然不想安装一个独立Linux系统,也可以在Windows上安装cygwin开发嵌入式程序(早期很多做嵌入式就是用这个方式)。见到早期更直接在Windows上编译嵌入式程序(当然需要Windows版本的工具链+Windows版本的make程序结合Windows的bat程序)。
2)mysys2+minGW方案
Mysys2是一个cygwin的裁剪版本,是一个精简的类unix环境,minGW只是一个Windows的编译工具链。该方法优点就是使用minGW交叉编译出来的程序可以直接跑在Windows上,不需要依赖第三方库(当然cygwin也可以安装minGW工具链交叉编译ffmpeg,直接跑在Windows上)。
3)mysys2+MSVC方案
mysys2只是精简的Linux环境,我们也可以使用微软的MSVC编译ffmpeg,编译的cpp库能直接被Visual studio调用,而不需要按照C语言风格导出符号表。
4)Linux环境+minGW方案
该方案本质就是Linux上使用minGW 工具链交叉编译出Windows程序,无论是ubuntu,centos,还是国产Linux,只要能下载到minGW工具链就可以采用该方案,不过建议还是ubuntu,ubuntu上源相对丰富,更容易下载到最新版本的minGW工具链。
二、总结
以上方法普遍适应于Linux 风格程序移植到Windows上(如ffmpeg,vlc,x264,openssl等)。后面将针对Windows平台编译ffmpeg进行实战演练。更多更新信息请关注公众号:AV_Chat