ubuntu下交叉編譯安卓FFmpeg 和 官方指導鏈接

將之前的編譯方法在此記錄

Linux系統:Ubuntu 18.04.6 LTS

交叉編譯工具鏈:gcc-aarch64-linux-gnu g+±aarch64-linux-gnu

ffmpeg版本:5.1.3

1.下載源碼

ffmpeg官網:https://ffmpeg.org/download.html#releases

img

下載完成后,壓縮包解壓到Ubuntu中。

2.安裝依賴

a.安裝交叉編譯工具鏈
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
b.安裝依賴項
sudo apt-get install -y pkg-config-aarch64-linux-gnu
sudo apt-get install libmp3lame-dev libx264-dev libxvidcore-dev
sudo apt-get update && sudo apt-get -y install \autoconf \automake \build-essential \cmake \git-core \libass-dev \libfreetype6-dev \libgnutls28-dev \libmp3lame-dev \libsdl2-dev \libtool \libva-dev \libvdpau-dev \libvorbis-dev \libxcb1-dev \libxcb-shm0-dev \libxcb-xfixes0-dev \meson \ninja-build \pkg-config \texinfo \wget \yasm \zlib1g-dev \libunistring-dev

3.生成Makefile文件

首先cd到解壓好的ffmpeg源碼目錄中。(如果之前編譯過,需要先make clean 一下)

chmod +x configure
./configure --enable-cross-compile --target-os=android --arch=aarch64 --enable-neon --cross-prefix=/usr/bin/aarch64-linux-gnu- --cc=/usr/bin/aarch64-linux-gnu-gcc --cxx=/usr/bin/aarch64-linux-gnu--g++ --prefix=/home/LIB/ffmpeg-5.1.3_linux_arm64 --disable-asm  --enable-parsers --disable-decoders --enable-decoder=h264 --enable-decoder=aac --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc 
//可不加此配置--extra-ldflags="-L/usr/aarch64-linux-gnu/lib -lm"
解釋:
--enable-cross-compile 表示啟用交叉編譯模式。
--target-os=android 表示編譯目標平臺為安卓系統。
--arch=aarch64 表示編譯目標架構為aarch64。
--cross-prefix 指定交叉編譯工具鏈的前綴路徑。上文下載gcc-aarch64-linux-gnu之后,默認安裝到了/usr/bin/aarch64-linux-gnu-gcc,這里使用/usr/bin/aarch64-linux-gnu-。
--cc 和 --cxx 分別指定C編譯器和 C++ 編譯器的路徑。
--prefix 指定安裝目錄,在執行make install之后才會安裝。
--disable-asm 表示禁用匯編優化。
--enable-parsers 表示啟用解析器。
--disable-decoders 表示禁用所有解碼器。
--enable-decoder=h264 和 --enable-decoder=aac 表示啟用 H.264 和 AAC 解碼器。
--disable-debug 表示禁用調試信息。
--enable-ffmpeg 表示編譯 FFmpeg 命令行工具。
--enable-shared 表示編譯動態鏈接庫,生成共享庫文件。
--disable-static 表示禁用靜態鏈接庫。
--disable-stripping 表示禁用剝離符號表。
--disable-doc 表示禁用文檔生成。
./configure --prefix=/home/mdz/Documents/Project/ffmpeg_android \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
--disable-avdevice \
--disable-swscale \
--disable-postproc \
--disable-avfilter \
--disable-network \
--disable-everything \
--enable-decoder=h264 \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mov \
--enable-parser=h264 \
--enable-bsf=h264_mp4toannexb \
--enable-openssl \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-hwaccel=h264_mediacodec \
--cross-prefix=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30- \
--target-os=android \
--arch=aarch64 \
--sysroot=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
--extra-cflags="-Os -fpic $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi" \
--extra-ldflags="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android"

4.編譯

需要sudo自己加

make -j$(nproc)

$(nproc)表示本系統線程數,為了多線程編譯。也可寫-j4。

如果出現xxx權限不夠,使用chmod加執行權限

sudo chmod -R 777 ./

5.安裝

需要sudo自己加

 make install

此時,編譯好的庫文件就會被安裝到上面configure配置的安裝目錄中了,找到復制完成文件夾就可以在android項目開發時使用。

6.移動和使用

由于安裝的鏈接庫目錄中存在link,所以需要打包后再進行移動,解壓后再在項目中使用。

tar -zcvf 壓縮包 被壓縮1

官方的FFmpeg編譯說明和指導

安卓:
在Ubuntu下,clone這個倉庫,配置好所需環境,即可開始編譯。
編譯說明:https://github.com/arthenica/ffmpeg-kit/tree/main/android#21-prerequisites

其他:
參考官方指導:https://trac.ffmpeg.org/wiki/CompilationGuide

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

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

相關文章

Edge瀏覽器“此頁存在問題”解決思路

Edge瀏覽器顯示“此頁存在問題”解決思路 大家平時使用Edge瀏覽器時,是否和我一樣會突然出現“此頁存在問題”的情況? 經過百度查詢后我找了一種情況和解決辦法,能夠大大減少這類問題的出現。出現“此頁存在問題”可能是因為之前使用過軟件…

每天一個數據分析題(三百四十一)

如何獲取更多優質流量是電商行業中重要課題,下列哪些屬于流量類指標 A. 平均訪問深度 B. 跳失次數 C. 瀏覽量 D. 客單價 數據分析認證考試介紹:點擊進入 題目來源于CDA模擬題庫 點擊此處獲取答案

Linux基礎命令[27]-gpasswd

文章目錄 1. gpasswd 命令說明2. gpasswd 命令語法3. gpasswd 命令示例3.1 不加參數3.2 -a(將用戶加入組)3.3 -d(從組中刪除用戶)3.4 -r(刪除組密碼)3.5 -M(多個用戶一起加入組)3.6 …

React中 將UI 視為樹

當 React 應用程序逐漸成形時,許多組件會出現嵌套。那么 React 是如何跟蹤應用程序組件結構的? React 以及許多其他 UI 庫,將 UI 建模為樹。將應用程序視為樹對于理解組件之間的關系以及調試性能和狀態管理等未來將會遇到的一些概念非常有用。…

Python教程:使用Python和PyQt編寫進制轉換器工具

1.介紹 在現代計算中,進制轉換是一項常見且重要的任務。為了簡化這個過程,我們也可以利用Python和PyQt自己寫一個直觀且易于使用的進制轉換器工具。這個工具將支持二進制、八進制、十進制和十六進制的相互轉換,并提供良好的用戶界面和交互體…

Java設計模式(23種設計模式 重點介紹一些常用的)

創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。行為型模式,共十一種:…

MySQL---函數與約束

目錄 一、函數 1. 字符串函數 2. 數值函數 3. 日期函數 4. 流程函數 5. 總結 二、約束 1. 概述 2. 約束演示 3. 外鍵約束 3.1 添加外鍵 3.2 刪除外鍵 3.3 外鍵刪除更新行為 4. 總結 一、函數 1. 字符串函數 命令如下所示: -- concat select concat("Hel…

蘋果CMS:如何去掉首頁幫助提示信息

首先我們安裝好蘋果CMS,未安裝的可以參考蘋果cms:介紹及安裝 安裝好之后我們需要進入模版設置,可能對于剛剛接觸CMS框架的朋友是不清楚地址的: https://www.yourweb.com/admin_login.php/admin/mxpro/mxproset 其中【yourweb】…

愛設計AiPPT.cn趙充:營銷工作的AI進化

愛設計&AiPPT.cn是一家 AIGC 數字科技企業,致力于打造「下一代個人與組織的 Ai 工作站」 。目前旗下產品包括AiPPT.cn、愛設計AIGC 內容中臺、365 編輯器、愛設計在線設計工具、AiH5 等超過 10 余款應用 AI 能力的內容創作工具。日前,愛設計&AiP…

python的協程異步

參考資料 https://blog.csdn.net/qq_43380180/article/details/111573642?spm1001.2014.3001.5506 協程的概念 指的是在一個線程中,可以在某個地方掛起的特殊函數,并且可以重新在掛起處繼續運行。協程不是進程,也不是線程。 進程 VS 線程…

dcache-android框架中的設計模式詳解

引言:孤獨的人喜歡深夜,多情的人喜歡黃昏。幸福的人喜歡陽光,傷心的人偏愛風雨。 眾所周知,dcache-android是本人一行一行代碼手寫出來的Android數據緩存框架,寫了好幾年了,雖然不是每天寫,但一…

【go從入門到精通】精通并發編程-使用扇入扇出提升多個通道之間傳遞數據的效率

在并發編程領域,Golang 作為一種擅長處理并發的編程語言而脫穎而出。 Go 并發模型的一個關鍵組件是通道,它允許 goroutine 進行通信并同步其工作。在這里,我們將探討在 Go 中的多個通道之間傳遞數據的技術。當需要協調不同 goroutine 之間的工作并管理數據流時,這非常有用。…

TypeScript-類型斷言

類型斷言 當開發者比TS本身更清楚當前的類型是什么,可以使用斷言(as)讓類型更加精確和具體 const _link document.getElementById(link) console.log(_link.href) // 出錯了,如下圖 const _link document.getElementById(link) as HTMLAnchorElement…

【三數之和】python,排序+雙指針

暴力搜索3次方的時間復雜度,大抵超時 遇到不會先排序 排序雙指針 上題解 照做 class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:res[]nlen(nums)#排序降低復雜度nums.sort()k0#留兩個位置給雙指針i,jfor k in range(n-2):if nums[k]…

【再探】Java—泛型

Java 泛型本質是參數化類型,可以用在類、接口和方法的創建中。 1 “擦除式”泛型 Java的“擦除式”的泛型實現一直受到開發者的詬病。 “擦除式”的實現幾乎只需要在Javac編譯器上做出改進即可,不要改動字節碼、虛擬機,也保證了以前沒有使…

光伏電站在線監測智能診斷系統:開啟無人值守新紀元

光伏電站在線監測智能診斷系統:開啟無人值守新紀元 大家都知道光伏電站是通過汲取著太陽的光芒,為人類提供源源不斷的電能源。然而,隨著光伏電站規模的擴大和復雜性的增加,如何有效提高發電效率、減少人工維護成本,實…

YOLOV5算法多目標檢測系統

歡迎大家點贊、收藏、關注、評論啦 ,由于篇幅有限,只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景與意義 隨著計算機視覺技術的飛速發展,目標檢測已成為許多實際應用場景中的關鍵技術&…

AWS存儲之 Storage Gateway

AWS Storage Gateway是一項混合存儲服務,它允許您在本地環境和AWS云之間無縫地集成存儲解決方案。它提供了一種簡單、安全地方式,讓您可以將本地應用程序連接到云存儲服務,如Amazon S3、Amazon Glacier、Amazon EBS等。 比如一個公司如果想將…

數據結構之二叉樹的超詳細講解(2)--(堆的概念和結構的實現,堆排序和堆排序的應用)

個人主頁:C忠實粉絲 歡迎 點贊👍 收藏? 留言? 加關注💓本文由 C忠實粉絲 原創 數據結構之二叉樹的超詳細講解(2)--(堆的概念和結構的實現,堆排序和堆排序的應用) 收錄于專欄【數據結構初階】 本專欄旨在分享學習數據結構學習的一點學習筆記…

電腦卸載linux安裝windows后每次開機都出現grub

原因分析 這是因為電腦硬盤中還存在linux系統的引導程序,并且啟動順序還在windows之前,有時候通過bios根本找不到它的存在,以至于每次windows開機出現grub之后都要輸入exit退出linux的引導之后才能使得電腦進入windows,這個有時會…