Android Liunx ffmpeg交叉編譯

? ? ? ? 本文的交叉編譯在window上安裝VMware,使用Ubuntu20.4進行的編譯。

一、安裝NDK:

? ? ? ? 1、下載解壓:

????????在NDK 下載 ?|? Android NDK ?|? Android Developers下載Liunx平臺的NDK。

? ? ? ? 本人下載的是android-ndk-r27c-linux.zip版本的。

? ? ? ? 解壓android-ndk-r27c-linux.zip

    unzip android-ndk-r27c-linux.zip 

? ? ? ? 在存放NDK的目錄下解壓?android-ndk-r27c-linux.zip:

? ? ? ? 2、修改android-ndk-r27c-linux文件權限:? ? ??

sudo chmod 777 -R android-ndk-r27c

? ? ? ? 3、NDK的環境變量的配置:

? ? ? ? 編輯/etc/profile:

    sudo vim /etc/profile

? ? ? ? 將NDK存放的路徑加入到環境當中:

? ? ? ? 路徑為NDK存放的路徑,可以cd到NDK文件夾下pwd后獲取:

? ? ? ? 之后配置如下環境變量:?

export PATH=/home/wyy/Android/sdk/platform-tools:$PATH
export PATH=/home/wyy/Android/sdk/tools:$PATH
export ANDROID_NDK=/home/wyy/Android/NDKS/android-ndk-r27c
export PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin

? ? ? ?在/etc/profile文件中配置退出“INSERT”模式后“:wq”保存設置。

? ? ? ? 更新/etc/profile配置:

source /etc/profile

? ? ? ? 驗證NDK版本:

ndk-build --version

? ? ? ?

二、下載解壓FFmpeg:

? ? ? ? 1、下載ffmpeg:

? ? ? ? 通過ffmpeg的下載頁面下載需要的ffmpeg的版本:Download FFmpeg

????????本人下載的是:ffmpeg-5.1.6.tar.xz版本的

? ? ? ? 2、解壓ffmpeg:

? ? ? ? 解壓ffmpeg-5.1.6.tar.xz

    tar -xvf ffmpeg-5.1.6.tar.xz

? ? ? ? 3、修改文件權限

sudo chmod 777 -R ffmpeg-5.1.6

三、創建編譯腳本

? ? ? ? ?1、在ffmpeg的文件目錄下運行./configure:

? ? ? ? 會出現的錯誤提示:?

? ? ? ? 如未安裝yasm,則需要安裝yasm:

????????

? ? ? ?2、創建android_build1.sh編譯腳本:

? ? ? ? 在ffmpeg-5.1.6文件夾下創建android_build1.sh:

sudo gedit android_build1.sh

? ? ? ? 輸入如下腳本代碼:

#!/bin/bash
# 用于編譯android平臺的腳本# NDK所在目錄
NDK_PATH=/home/wyy/Android/NDKS/android-ndk-r27c # tag1
# macOS 平臺編譯,其他平臺看一下 $NDK_PATH/toolchains/llvm/prebuilt/ 下的文件夾名稱
HOST_PLATFORM=linux-x86_64  #tag1
# minSdkVersion
API=23TOOLCHAINS="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM"
SYSROOT="$NDK_PATH/toolchains/llvm/prebuilt/$HOST_PLATFORM/sysroot"
# 生成 -fpic 與位置無關的代碼
CFLAG="-D__ANDROID_API__=$API -Os -fPIC -DANDROID "
LDFLAG="-lc -lm -ldl -llog "# 輸出目錄
PREFIX=`pwd`/android
# 日志輸出目錄
CONFIG_LOG_PATH=${PREFIX}/log
# 公共配置
COMMON_OPTIONS=
# 交叉配置
CONFIGURATION=build() {APP_ABI=$1echo "======== > Start build $APP_ABI"case ${APP_ABI} inarmeabi-v7a)ARCH="arm"CPU="armv7-a"MARCH="armv7-a"TARGET=armv7a-linux-androideabiCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"# 交叉編譯工具前綴CROSS_PREFIX="$TOOLCHAINS/bin/arm-linux-androideabi-"EXTRA_CFLAGS="$CFLAG -mfloat-abi=softfp -mfpu=vfp -marm -march=$MARCH "EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--enable-neon --cpu=$CPU ";;arm64-v8a)ARCH="aarch64"TARGET=$ARCH-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"EXTRA_CFLAGS="$CFLAG"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="";;x86)ARCH="x86"CPU="i686"MARCH="i686"TARGET=i686-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"#EXTRA_CFLAGS="$CFLAG -march=$MARCH -mtune=intel -mssse3 -mfpmath=sse -m32"EXTRA_CFLAGS="$CFLAG -march=$MARCH  -mssse3 -mfpmath=sse -m32"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--cpu=$CPU ";;x86_64)ARCH="x86_64"CPU="x86-64"MARCH="x86_64"TARGET=$ARCH-linux-androidCC="$TOOLCHAINS/bin/$TARGET$API-clang"CXX="$TOOLCHAINS/bin/$TARGET$API-clang++"LD="$TOOLCHAINS/bin/$TARGET$API-clang"CROSS_PREFIX="$TOOLCHAINS/bin/$TARGET-"#EXTRA_CFLAGS="$CFLAG -march=$CPU -mtune=intel -msse4.2 -mpopcnt -m64"EXTRA_CFLAGS="$CFLAG -march=$CPU -msse4.2 -mpopcnt -m64"EXTRA_LDFLAGS="$LDFLAG"EXTRA_OPTIONS="--cpu=$CPU ";;esacecho "-------- > Start clean workspace"
make cleanecho "-------- > Start build configuration"CONFIGURATION="$COMMON_OPTIONS"CONFIGURATION="$CONFIGURATION --logfile=$CONFIG_LOG_PATH/config_$APP_ABI.log"CONFIGURATION="$CONFIGURATION --prefix=$PREFIX"CONFIGURATION="$CONFIGURATION --libdir=$PREFIX/libs/$APP_ABI"CONFIGURATION="$CONFIGURATION --incdir=$PREFIX/includes/$APP_ABI"CONFIGURATION="$CONFIGURATION --pkgconfigdir=$PREFIX/pkgconfig/$APP_ABI"CONFIGURATION="$CONFIGURATION --cross-prefix=$CROSS_PREFIX"CONFIGURATION="$CONFIGURATION --arch=$ARCH"CONFIGURATION="$CONFIGURATION --sysroot=$SYSROOT"CONFIGURATION="$CONFIGURATION --cc=$CC"CONFIGURATION="$CONFIGURATION --cxx=$CXX"CONFIGURATION="$CONFIGURATION --ld=$LD"# nm 和 stripCONFIGURATION="$CONFIGURATION --nm=$TOOLCHAINS/bin/llvm-nm"CONFIGURATION="$CONFIGURATION --strip=$TOOLCHAINS/bin/llvm-strip"CONFIGURATION="$CONFIGURATION $EXTRA_OPTIONS"echo "-------- > Start config makefile with $CONFIGURATION --extra-cflags=${EXTRA_CFLAGS} --extra-ldflags=${EXTRA_LDFLAGS}"./configure ${CONFIGURATION} \--extra-cflags="$EXTRA_CFLAGS" \--extra-ldflags="$EXTRA_LDFLAGS"echo "-------- > Start make $APP_ABI with -j1"make -j1echo "-------- > Start install $APP_ABI"make installecho "++++++++ > make and install $APP_ABI complete."}build_all() {#配置開源協議聲明COMMON_OPTIONS="$COMMON_OPTIONS --enable-gpl"#目標android平臺COMMON_OPTIONS="$COMMON_OPTIONS --target-os=android"#取消默認的靜態庫COMMON_OPTIONS="$COMMON_OPTIONS --disable-static"COMMON_OPTIONS="$COMMON_OPTIONS --enable-shared"COMMON_OPTIONS="$COMMON_OPTIONS --enable-protocols"#開啟交叉編譯COMMON_OPTIONS="$COMMON_OPTIONS --enable-cross-compile"COMMON_OPTIONS="$COMMON_OPTIONS --enable-optimizations"COMMON_OPTIONS="$COMMON_OPTIONS --disable-debug"#盡可能小COMMON_OPTIONS="$COMMON_OPTIONS --enable-small"COMMON_OPTIONS="$COMMON_OPTIONS --disable-doc"#不要命令(執行文件)COMMON_OPTIONS="$COMMON_OPTIONS --disable-programs"  # do not build command line programsCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffmpeg"    # disable ffmpeg buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffplay"    # disable ffplay buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-ffprobe"   # disable ffprobe buildCOMMON_OPTIONS="$COMMON_OPTIONS --disable-symver"COMMON_OPTIONS="$COMMON_OPTIONS --disable-network"COMMON_OPTIONS="$COMMON_OPTIONS --disable-x86asm"COMMON_OPTIONS="$COMMON_OPTIONS --disable-asm"#啟用COMMON_OPTIONS="$COMMON_OPTIONS --enable-pthreads"COMMON_OPTIONS="$COMMON_OPTIONS --enable-mediacodec"COMMON_OPTIONS="$COMMON_OPTIONS --enable-jni"COMMON_OPTIONS="$COMMON_OPTIONS --enable-zlib"COMMON_OPTIONS="$COMMON_OPTIONS --enable-pic"COMMON_OPTIONS="$COMMON_OPTIONS --enable-muxer=flv"#COMMON_OPTIONS="$COMMON_OPTIONS --enable-avresample"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=h264"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mpeg4"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mjpeg"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=png"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=vorbis"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=opus"COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=flac"echo "COMMON_OPTIONS=$COMMON_OPTIONS"echo "PREFIX=$PREFIX"echo "CONFIG_LOG_PATH=$CONFIG_LOG_PATH"mkdir -p ${CONFIG_LOG_PATH}#build "armeabi-v7a"build "arm64-v8a"build "x86"build "x86_64"
}echo "-------- Start --------"
build_all
echo "-------- End --------"

? ? ? ?

? ? ? ? 3、運行android_build1.sh腳本:

sudo sh android_build1.sh 

????????

? ? ? ? 4、編譯完成:

? ? ? ? 經過一段時間的編譯后,在android的文件夾下。編譯完成的結果輸出如下:

? ? ? ??

? ? ? ? include文件夾:

? ? ? ? 包含編譯目標平臺的頭文件信息。

? ? ? ? lib文件夾:

? ? ? ? 包含編譯目標平臺的so庫。

????????

????????log文件夾:

??????包含編譯目標平臺編譯時的log信息。

? ? ? ? pkgconfig文件夾:

????????該文件包含了FFmpeg庫的相關信息,如頭文件路徑、庫文件路徑等。

????????

? ? ? ? share文件夾:

????????包含文檔和手冊,幫助用戶理解和使用FFmpeg。

????????以上的資源文件可在下面連接可下載:https://download.csdn.net/download/wangyongyao1989/91214032?spm=1001.2014.3001.5503

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89159.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89159.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89159.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

極海G32R501雙向數字電源解決方案 賦能AI服務器及電源應用創新

6月26日,Big-Bit商務網主辦的2025中國電子熱點解決方案創新峰會在東莞召開,峰會以“核心智變、能效躍遷”為主題,聚焦光儲充、800V超充、AI服務器、BMS、智能汽車照明與汽車中小電機電控應用。 峰會期間,珠海極海半導體有限公司&a…

【修電腦的小記錄】連不上網

問題概述 問題表現為:電腦連接網絡后,顯示已連接但無法上網。 環境信息: - DNS 修改無效,ping 外網(8.8.8.8)失敗 - 嘗試重置網絡參數、多種命令無果 🔍 排查過程 1. 執行以下命令重置網絡&a…

QT中QSS樣式表的詳細介紹

轉自個人博客 **Qt樣式表(Qt Style Sheets,簡稱QSS)**是一種類似于HTML中的CSS(層疊樣式表)的機制,用于自定義Qt應用程序的外觀。通過QSS,開發者可以輕松地修改控件的外觀,而無需更改…

Spring 依賴注入:官方推薦方式及最佳實踐

Spring 依賴注入:官方推薦方式及最佳實踐 你正在遭遇以下困境嗎? 項目變大后,依賴關系像一團亂麻,牽一發而動全身?單元測試難如登天,被迫啟動整個Spring容器?NullPointerException 總在運行時突…

javaweb聽課筆記day1

MySQL數據模型 關系型數據庫: 通過表來存儲數據 關系型數據庫是建立在關系模型基礎上的數據庫,簡單說,關系型數據庫是由多張能互相連接的二維表組成的數據庫 優點: 都是使用表結構,格式一致,易于維護;使用通用的SQL語言操作…

《從量子奇境到前端優化:解鎖卡西米爾效應的隱藏力量》

卡西米爾效應由荷蘭物理學家亨德里克卡西米爾于1948年提出,它源于量子場論中“真空不空”的奇異觀點。在傳統認知里,真空是一片虛無,但量子理論指出,真空中充滿了持續漲落的能量,即零點能。想象有兩片中性的金屬板被放…

【學習筆記】強化學習的數學原理

軟活硬整,納什又把RL翻出來講了一遍,我以為是溫故而知新,原來是在賣書。 不過溫故而知新還是沒啥毛病的。 PS:今天裝Notepad時看到的,我還以為現在連用個Notepad都要給天線寶寶們捐款了。 文章目錄 PART 11 overview…

深入“火星棒球數據API”:用數據解鎖棒球世界的無限可能

在棒球運動日益數據化的今天,高效獲取和處理海量比賽信息已成為球隊制勝、媒體解讀、球迷深入理解比賽的關鍵。“火星棒球數據API” 應運而生,成為連接棒球智慧與大數據技術的橋梁。本文將探討這一API的核心價值、功能亮點及其如何重塑我們體驗和分析棒球…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+jsp實現的校園服務平臺管理系統,推薦!

摘 要 現代經濟快節奏發展以及不斷完善升級的信息化技術,讓傳統數據信息的管理升級為軟件存儲,歸納,集中處理數據信息的管理方式。本校園服務平臺管理系統就是在這樣的大環境下誕生,其可以幫助管理者在短時間內處理完畢龐大的數據…

「Java EE開發指南」如何用MyEclipse創建一個WEB項目?(三)

在本文中,您可以找到有關WEB項目的信息。將了解: Web項目結構和參數Web開發生產力工具JSP代碼完成和驗證 這些特性在MyEclipse中可用。在上文中(點擊這里回顧>>),我們為大家介紹了Web開發效率工具、Web項目參數…

笨方法學python -練習6

程序: print("Mary had a little lamb.") print("Its fleece was white as {}.".format(snow)) print("And everywhere that Mary went.") print("." * 10) # what′d that do? end1 "C" end2 "h&qu…

【MySQL】Binlog文件占用空間比較大,如何清理

一、前言 在進行一次數據導入之后,發現服務器磁盤爆滿,初步判斷是數據庫產生了大量binlog所致,接下來進行分析處理。 二、分析 1、查看磁盤空間 通過df -h命令,查看磁盤空間占用情況 2、查找占用文件或目錄 通過命令:…

車載診斷架構 --- 非易失性存儲器(NVM)相關設置項

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

C#: 輸入對話框窗口函數

這是一個 C# 輸入對話框函數,主要功能包括: 基礎功能:創建帶標題、提示文本和輸入框的對話框,返回用戶輸入或空字符串(取消時) 增強特性: 支持必填項驗證支持正則表達式格式驗證實時錯誤提示與…

PCB工藝學習與總結-20250628

一、PCB板材 1、結構組成 基板:作為電路板的支撐體,通常由絕緣材料制成,如玻璃纖維或塑料。 導線:用于連接電路板上的各個元件,傳輸電流和信號。 元件:包括電阻、電容、電感、二極管、晶體管等,用于實現電路的各種功能。 焊盤:用于焊接元件引腳的金屬片,確保元件…

VUE2與VUE3項目環境變量創建與使用區別

環境變量文件是項目中的.env開頭的文件,如下圖: 下圖是VUE2.env文件中的配置,是以VUE_APP開頭的 VUE_APP_PAGE_TITLE系統 VUE_APP_SERVICE_PREFIX/gateway/xxxxx在使用時 只需要 調用 process.env.VUE_APP_SERVICE_PREFIX 就可以獲取到值 而…

php flush實時輸出線上環境好使,本地環境等待一段時間后一次性輸出結果的原因

近期對接deepseek接口時為了擁有較好的用戶體驗,等待答案返回時采用了flush分布輸出,但是線上環境下可以正常分布輸出,同樣代碼在本地總是等待許久后一次性出結果,排查許久,發現竟然是本地和線上不同的php加載模式導致…

【世紀龍科技】東風風光580汽車維護與底盤拆裝檢修仿真教學軟件

在職業院校汽車專業的教學實踐中,傳統的汽車維護與底盤拆裝實訓常面臨諸多挑戰。實車操作不僅存在安全隱患,設備損耗、教學成本高的問題也不容忽視;部分學生因操作機會有限,難以系統掌握規范流程和儀器使用,教師在教學…

React大型項目目錄結構設計

以下這種結構設計適合以下場景: 10人以上開發團隊協作長期維護的中大型項目需要高度模塊化和可擴展性的項目需要嚴格類型檢查的TypeScript項目 根據實際需求,可以適當調整模塊劃分和目錄結構,但保持核心的模塊化思想和分層架構是關鍵。 Re…

【C語言】超市管理系統丨完整源碼與實現解析

通過這個完整的超市管理系統,您將掌握C語言核心數據結構與文件操作技術 設計思路與核心數據結構 本系統使用動態數組管理商品數據,支持商品增刪改查、文件存儲和數據統計功能。系統采用模塊化設計,分為商品管理、文件操作和用戶界面三大模塊…