ffmpeglinux交叉編譯
Linux 交叉編譯FFmpeg庫
配置環境
在Linux上配置NDK環境和FFmpeg,首先下載並解壓NDK,配置/etc/profile的環境變數,然後下載FFmpeg,解壓後使用./configure --help查看幫助文檔。
FFmpeg包含libavformat、libavcodec、libavutil、libswscale、libpostproc等模塊,為各種音視頻封裝格式的生成和解析、聲音/圖像編解碼、公共工具函數、視頻場景比例縮放和色彩映射轉換、後期效果處理以及工具和伺服器等。
編寫編譯腳本
定義NDK路徑,指定GCC路徑,設置FLAGS結合Linux環境修改,參考externalNativeBuild/xxx/build.ninja的傳參內容。學習資料推薦,免費報名學習音視頻知識,資料包括C/C++、Linux、FFmpeg等。
配置參數
優化大小、不編譯ffmpeg程序(命令行工具)、關閉avdevice模塊、關閉所有編碼器、關閉所有復用器、關閉所有濾鏡、開啟交叉編譯、設置GCC的前綴、關閉動態庫、開啟靜態庫、傳給gcc的參數等。
執行make完成編譯輸出
編寫腳本過程中注意關閉asm、許可權要求、手動創建輸出文件夾、命令行格式等。
移植到Android項目中使用
創建NDK項目,將編譯好的include文件夾復制到/src/main/cpp目錄下,將ffmpeg lib目錄下的文件復制到armeabi-v7a目錄下,Cmake文件中引入庫,即可愉快使用FFmpeg庫。
FFmpeg是純C的庫,需要在代碼中進行引用。顯示ffmpeg版本號完成整個流程。
至此,Linux交叉編譯FFmpeg庫的流程介紹完成。
② FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫
在Linux環境中進行FFmpeg庫的Android交叉編譯,首先需要下載Linux版本的android-ndk-r21e。登錄Linux伺服器,例如華為雲的歐拉系統,執行以下步驟:
1. 進入`/usr/local/src`目錄:
cd /usr/local/src
2. 下載並解壓ndk:
curl -O dl.google.com/android/r...
unzip android-ndk-r21e-linux-x86_64.zip
接下來,你需要將FFmpeg及相關庫(如x264、freetype、lame)的源碼上傳到伺服器,並進行必要的修改:
- 解壓源碼,替換`SYSTEM=windows-x86_64`為`SYSTEM=linux-x86_64`,並確保sh文件無回車符。
- 修改`config_x264.sh`、`config_freetype.sh`等文件,賦予可執行許可權:
chmod +x config_*.sh
3. 編譯x264庫,修改configure文件並執行編譯:
修改configure文件
./config_x264.sh
make -j4
make install
4. 對其他第三方庫進行類似操作:
./config_xxx.sh
make -j4
make install
5. 配置環境變數`PKG_CONFIG_PATH`:
在.bash_profile中添加環境變數
source .bash_profile
6. 最後,編譯FFmpeg庫:
./config_ffmpeg_full.sh
make -j4
make install
完成後,可以在指定目錄找到so文件,並將其復制到App工程的jniLibs\arm64-v8a目錄,然後按照《FFmpeg開發實戰:從零基礎到短視頻上線》的章節「12.1.3 App工程調用FFmpeg的so庫」進行App的配置、編譯和運行。
③ FFmpeg交叉編譯、腳本參數配置
一:下載並解壓ffmpeg源碼
使用git或wget下載ffmpeg源碼到/root/ff目錄,安裝git或wget後執行命令解壓。
檢查解壓後的文件。
使用tar命令解壓ffmpeg-3.4.tar.bz2文件。
使用unzip命令解壓NDK壓縮包。
查看目錄結構。
安裝make工具,用於自動化編譯工作,提高效率。
二:配置編譯腳本
定義環境變數,包括NDK目錄、架構下的so庫和頭文件、交叉編譯工具、CPU類型和輸出路徑。
使用env命令查看環境變數。
解決NDK版本r19後gcc兼容問題,通過修改cc路徑使用clang。
執行make命令進行編譯,使用-j參數指定並行任務數,編譯完成後執行make install安裝。
在指定路徑下生成輸出文件。
三:創建Shell腳本
創建並編輯android.sh文件,實現自動化交叉編譯流程。
調整腳本參數實現動態配置。
重新執行腳本,生成編譯結果。