Python簡介 Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麵向對象的腳本語言。 Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。 Python 是一種解釋型語言:這意味著開發過程中沒有了編譯這個環節。類 ...
對於初學者來說,如何搭建FFmpeg的開發環境是個不小的攔路虎,因為FFmpeg用到了許多第三方開發包,所以要先編譯這些第三方源碼,之後才能給FFmpeg集成編譯好的第三方庫。
不過考慮到剛開始僅僅調用FFmpeg的API,不會馬上去改FFmpeg的源碼,因此只要給系統安裝編譯好的FFmpeg動態庫,即可著手編寫簡單的FFmpeg程式。比如這個網站https://github.com/BtbN/FFmpeg-Builds/releases提供了已經編譯通過的FFmpeg開發包,囊括Linux、Windows等系統環境的開發版本。對該網站提供的Linux版FFmpeg安裝包而言,需要事先安裝不低於2.22版本的glibc庫,否則編譯FFmpeg程式會報錯“undefined reference to `_ZGVdN4vv_pow@GLIBC_2.22'”。下麵介紹在Linux系統安裝已編譯的FFmpeg詳細步驟。
一、安裝glibc
1、到這個網址下載2.23版本的glibc源碼包http://ftp.gnu.org/gnu/glibc/。註意:雖然要求glibc版本不低於2.22,但是不宜安裝過高版本的glibc,因為較高版本的glibc依賴於python,去整python環境又得費一番功夫,所以弄個比2.22稍高一點的2.23版就夠了,也就是下載這個壓縮包http://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz。
2、先解壓glibc源碼包,再進入glibc源碼目錄,然後創建build目錄併進入該目錄,也就是依次執行以下命令:
tar zxvf glibc-2.23.tar.gz cd glibc-2.23 mkdir build cd build
3、在build目錄下依次執行以下命令配置、編譯與安裝glibc:
../configure --prefix=/usr make make install
安裝成功後,會在/usr/lib64目錄下找到最新的libc.so(還有libc.so.6和libc-2.23.so)和libmvec.so(還有libmvec.so.1和libmvec-2.23.so)等庫文件。
二、安裝FFmpeg
1、到這個網址下載Linux環境編譯好的FFmpeg安裝包https://github.com/BtbN/FFmpeg-Builds/releases,比如ffmpeg-master-latest-linux64-gpl-shared.tar.xz。
2、把下載好的FFmpeg安裝包解壓到/usr/local/ffmpeg目錄,也就是依次執行以下命令:
cd /usr/local tar xvf ffmpeg-master-latest-linux64-gpl-shared.tar.xz mv ffmpeg-master-latest-linux64-gpl-shared ffmpeg
3、輸入cd命令回到當前用戶的初始目錄,使用vi打開該目錄下的.bash_profile,也就是依次執行以下命令:
cd vi .bash_profile
4、把游標移動到文件末尾,按下a鍵進入編輯模式,然後在文件末尾添加下麵四行環境變數配置:
PATH=$PATH:/usr/local/ffmpeg/bin export PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib export LD_LIBRARY_PATH
接著保存並退出文件,也就是先按下Esc鍵退出編輯模式,再按下冒號鍵,接著輸入wq再按回車鍵,即可完成修改操作。
5、執行以下命令載入最新的環境變數:
source .bash_profile
接著運行下麵的環境變數查看命令:
env | grep PATH
發現控制台回顯的PATH串包含/usr/local/ffmpeg/bin,同時LD_LIBRARY_PATH串包含/usr/local/ffmpeg/lib,說明FFmpeg的bin目錄和lib目錄都載入進了環境變數。
三、編寫測試程式
1、創建C代碼文件名叫hello.c,填入下麵的代碼內容:
#include <libavutil/avutil.h> int main(int argc, char* argv[]) { av_log(NULL, AV_LOG_INFO, "hello world\n"); }
2、保存並退出該文件,執行以下命令編譯hello.c:
gcc hello.c -o hello -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm
3、運行編譯好的hello程式,也就是執行以下命令:
./hello
發現控制台回顯日誌信息“hello world”,表示測試程式運行正常,說明FFmpeg開發環境已經成功搭建。
4、剛纔的測試程式hello.c採用C語言編寫,並且使用gcc編譯。若要採用C++編程的話,則需改成下麵的hello.cpp代碼:
#include <iostream> // 因為FFmpeg源碼使用C語言編寫,所以在C++代碼中調用FFmpeg的話,要使用標記“extern "C"{……}”把FFmpeg的頭文件包含進來 extern "C" { #include <libavutil/avutil.h> } int main(int argc, char* argv[]) { av_log(NULL, AV_LOG_INFO, "hello world\n"); }
鑒於C++代碼採用g++編譯,於是hello.cpp的編譯命令變成下麵這樣:
g++ hello.cpp -o hello -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/bin -lavformat -lavdevice -lavfilter -lavcodec -lavutil -lswscale -lswresample -lpostproc -lm
編譯完畢,同樣生成名叫hello的可執行程式,如此就實現了C++代碼集成FFmpeg函數的目標了。