Ffmpeg编译过程


一、      起因

在windos平台下,想深入了解FFMPEG代码,用VC2013开发工具跟踪调试的FFMPEG。

       由于本人在编译过程中走了不少弯路,所以整理该文档,希望能对和我一样的初学者带来帮助。

CSDN个人主页:http://my.csdn.net/caishi8860

二、      环境

系统

windows 8.1

开发工具

VC2013

Ffmpeg

版本:2.6.2

下载地址:http://ffmpeg.zeranoe.com/builds/source/ffmpeg/ffmpeg-20150414-git-013498b.tar.xz


MinGW Installation Manager

链接地址: http://sourceforge.net/projects/mingw/files/


Yasm

版本:1.3.0

下载地址: http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win32.exe

三、      配置过程

1.   MinGW Installation Manager下载安装包



2.   YASM

yasm-1.3.0-win32.exe改名为yasm.exe,复制到./MinGW/msys/1.0/bin

目录下

3.   msys.bat配置

配置./MinGW/msys/1.0/msys.bat,在此文件的最前面(@echo off之后)添加一行如下内容:

call"D:\Program Files\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat"

(依实际安装路径修)。

4.   link

重命名 ./MinGW/msys/1.0/bin/link.exelink_renamed.exe (依实际安装选择),这一步是防止这个link.exe与vc的link.exe发生冲突,编译完成后可修改回来。

四、      编译过程

1.    解压ffmpeg并启动msys

复制ffmpeg-20150414-git-013498b.tar.xz到./MinGW/msys/1.0/home目录下。解压到当前文件夹下,重命名目录为ffmpeg

执行msys.bat


2.   配置编译选项

静态库

./configure--enable-static --prefix=./vs2013_build --enable-debug --toolchain=msvc

动态库

./configure--enable-shared --prefix=./vs2013_build --enable-debug --toolchain=msvc


3.   编译


4.   安装

安装后的文件目录


注意:默认生成的静态库扩展名为.a,需要手动修改为.lib。


五、      测试实例

// FfmpegTest.cpp : 定义控制台应用程序的入口点。

//

#include"stdafx.h"

#include<stdlib.h>

#include<Windows.h>

//Crypto API 微软公司在NT4.0以上版本中提供了一套完整的Crypto API的函数,

//支持密钥交换,数据加密解密,数字签名,给程序员带来了很大方便,

//用户在对软件进行保护的时候可以直接利用Crypto API来完成这些工作。

//比如计算注册码,检查程序的完整性等。

#include<Wincrypt.h>

#pragmacomment (lib, "Advapi32.lib")

#pragmacomment(lib, "ws2_32.lib")

 

#ifdef__cplusplus

extern"C" {

#endif

 

#include"../ffmpegLib/include/libavcodec/avcodec.h"

#include"../ffmpegLib/include/libavformat/avformat.h"

#include"../ffmpegLib/include/libavdevice/avdevice.h"

#ifdef__cplusplus

}

#endif

 

#pragmacomment(lib,"..//ffmpegLib//lib//libswresample.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libswscale.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libavcodec.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libavdevice.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libavfilter.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libavformat.lib")

#pragmacomment(lib,"..//ffmpegLib//lib//libavutil.lib")

 

int_tmain(intargc, _TCHAR* argv[])

{

    av_register_all();

 

    system("pause");

    return 0;

}


六、      参考文档链接

n  http://blog.csdn.net/finewind/article/details/38854517

n  http://blog.csdn.net/leixiaohua1020/article/details/44587465

n  http://blog.csdn.net/langeldep/article/details/6804331

n  https://msdn.microsoft.com/en-us/library/windows/desktop/aa379886(v=vs.85).aspx

猜你喜欢

转载自blog.csdn.net/caishi8860/article/details/45056481