1. 程式人生 > >Ffmpeg編譯過程

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