windows 10 x64環境下編譯帶有ffplay的ffmpeg

windows下編譯ffmpeg的核心在於要搭建一個類linux的編譯環境,換句話說就是需要在windows環境中運行gcc、make等命令工具。本文詳細介紹windows下編譯環境的搭建與ffmpeg的編譯過程,併成功生成ffplay。

編譯環境搭建

windows下類linux的編譯環境常見的有兩種,一種是MinGW,一種是cygwin。下面先簡單介紹一下兩者的區別。

MinGW與cygwin的區別

MinGW

  • MinGW全稱 Minimalistic GNU for Windows,某種程度上可以看做是windows版本下的GCC。MinGW有一個Msys的子項目,可以提供一些模擬Linux的shell和基本的Linux工具,Msys是一個輔助環境。
  • MinGW 有專門的Win32 API的頭文件,來把代碼中Linux方式的系統調用替換爲對應的Windows下的調用方式,某種程度上可以稱之爲將Linux調用翻譯爲Windows調用。

cygwin

  • Cygwin 則是一個在Windows平臺上運行的unix模擬環境,是cygnus solutions公司開發的自由軟件。Cygwin更像一個平臺,模擬了Linux的接口,提供了運行在它上面的程序使用,提供了很多Linux環境下的GNU軟件。
  • Cygwin 通過Cygwin1.dll的文件實現操作系統API的轉換,模擬了Linux的調用接口給程序,程序以Linux的方式調用系統API,但這個API的目標庫是Cygwin1.dll,Cygwin1.dll再調用Windows對用的方式實現,再把結果返回給程序。

本篇文章介紹使用MinGW做爲編譯環境編譯ffmpeg。

MinGW環境搭建

安裝MinGW installation manager

到官網下載安裝程序:https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download

下載完成後按照提示步驟安裝。

安裝MinGW和Msys

打開MinGW Installer主界面,按照如下圖所示勾選:

之後在菜單中依次選擇“Installation->Aplly changes”提交修改,然後就開始了自動安裝,你會看到每個步驟執行的詳細進度。

如果中途有某個包有安裝失敗類的提示,可以重複“Aplly changes”操作,直到所有的包都安裝成功爲止。

編譯ffmpeg

工具安裝

1、yasm

yasm是彙編編譯器,因爲ffmpeg中爲了提高效率用到了彙編指令,比如MMX和SSE。因此需要安裝這個工具。

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

下載完成後改名爲“yasm.exe”放到“C:\MinGW\msys\1.0\bin”目錄下。

2、nasm

下載nasm。

官網下載地址:https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip

下載完成後將"nasm.exe"放到“C:\MinGW\msys\1.0\bin”目錄下。

3、pkg-config

pkg-config是一個輔助的配置、鏈接工具,可以方便的支持gcc自動配置。

官網下載地址:http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip

下載完將bin目錄中的”pkg-config.exe“放到“C:\MinGW\msys\1.0\bin”目錄。

下載pkg-config依賴庫glib:

官網下載地址:http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18/glib_2.18.4-1_win32.zip

下載完成後將bin目錄中的“libglib-2.0-0.dll”放到“C:\MinGW\msys\1.0\bin”目錄。

注意:glib的依賴庫必須要有,否則在運行pkg-config時會出現如下圖所示錯誤,在下一步對ffmpeg做configure操作時會無法找到相關的依賴庫(如libx264,libfdk-aac等)。

功能模塊準備

此處只列舉幾個常用的庫,如需打開ffmpeg的其他功能,可按此類方法操作。

進入“C:\MinGW\msys\1.0”目錄,打開msys.bat,進入到類linux的控制檯,如下圖所示:

在該控制檯中使用到的命令跟linux是一樣的,可以理解爲在windows上模擬了一個linux終端。下述所涉及的所有命令均在該控制檯輸入。

1、libx264

官網下載:http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20190331-2245.tar.bz2

下載完成後拷貝到“C:\MinGW\msys\1.0\home\xxx\”目錄中,xxx是你windows當前登錄的用戶名,然後依次執行下列命令:

tar -jxvf x264-snapshot-20190331-2245.tar.bz2
cd x264-snapshot-20190331-2245
./configure --enable-shared --enable-static --enable-yasm
make
make install

2、libfdk-aac

官網下載:https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.0.tar.gz

下載完成後拷貝到“C:\MinGW\msys\1.0\home\xxx\”目錄中,依次執行下列命令:

tar -zxvf fdk-aac-2.0.0.tar.gz
cd fdk-aac-2.0.0
./configure
make
make install

3、SDL

官網下載:https://www.libsdl.org/release/SDL2-2.0.8.tar.gz

下載完成後拷貝到“C:\MinGW\msys\1.0\home\xxx\”目錄中,依次執行下列命令:

tar -zxvf SDL2-2.0.8.tar.gz
cd SDL2-2.0.8
./configure
make
make install

FFmpeg編譯

本文介紹的是對FFmpeg-n4.1.3版本的編譯,如需編譯早期版本,步驟跟本文是一樣的,但是要注意使用的依賴庫,原則就是“所用依賴庫版本發佈的時間不能晚於相應FFmpeg版本的發佈時間”。

1、下載ffmpeg源碼

github下載:https://codeload.github.com/FFmpeg/FFmpeg/zip/n4.1.3

下載完將其放到“C:\MinGW\msys\1.0\home\xxx\”目錄中,並解壓到FFmpeg-n4.1.3目錄。

2、修改源碼

在FFmpeg-n4.1.3/libavformat/os_support.h文件的頭部,加入“#include <winerror.h>”,如下所示:

#ifdef _WIN32
#include <winerror.h>
#if HAVE_DIRECT_H
#include <direct.h>
#endif
#if HAVE_IO_H
#include <io.h>
#endif
#endif

此處修改作用是爲FFmpeg在windows下的編譯提供幾個宏定義的支持,若不加此頭文件,編譯時會有找不到定義的錯誤。

3、配置

如果想將其他的庫也編譯進來,可在此步用類似--enable-xxx的方式來打開。

依次按以下命令執行:

cd FFmpeg-n4.1.3
./configure --enable-shared --enable-yasm --enable-libx264 --enable-avfilter --enable-gpl --enable-sdl --enable-avresample --enable-libfdk-aac --enable-nonfree

配置成功會有類似下述信息打印:

4、開始編譯

依次執行如下命令:

make
make install

在終端中輸入ffmpeg並回車,如出現下述畫面,即爲編譯並安裝成功:

在終端中輸入ffplay並回車,可以看到,我們已經正確編譯出來了ffplay:

5、打包

我們按照此步驟編譯安裝的ffmpeg可以在MinGW的終端上運行,如需在windows的環境下使用,只需將所有依賴的dll和exe拷貝出來打包即可。

 

參考文章:

https://www.cnblogs.com/harlanc/p/9569960.html

https://www.cnblogs.com/zoe-mine/p/7056369.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章