音視頻(四)android編譯

前言
前面已經講了在windows上應用了,這章主要講述android上編譯

1:環境
git 如果失敗 直接跑到相應網站 手動下載
ubuntu22.*
android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hl=uk
為什么用這個,用過最新的28的,不是編譯子so有問題 就是最后編譯 ffmpeg 時有問題,花太多時間不劃算
libx264 git clone https://code.videolan.org/videolan/x264.git or 手動 master (沒找到版本號)
(https://code.videolan.org/videolan/x264/-/tree/master?ref_type=heads 右上角代碼里下載要下的類型 一般zip就可以了)
libx265 git clone https://bitbucket.org/multicoreware/x265_git.git or 手動 3.3 (https://bitbucket.org/multicoreware/x265_git/downloads/)
這里先說明下,4.1可以編過,但是 合到ffpmeg 里 有問題沒解決(弄了大半天,耗不起),先用3.3代替了,有空再研究下
fdk-aac git clone https://github.com/mstorsjo/fdk-aac.git or 手動 2.0.3
(https://github.com/mstorsjo/fdk-aac/tags)
zlib https://zlib.net/zlib131.zip
ffpmeg download
cmake 3.22.* 自動安裝
編譯 x265 4.1的 需要安裝 GUI 版本的 sudo apt install cmake-curses-gui 不然ccmake 跳出配置項 需要修改環境的
autoconf 也裝下 其他automake libtool 自行決定 這里是一塊裝了 sudo apt-get install autoconf automake libtool
在這里插入圖片描述
在這里插入圖片描述

**2:編譯 **
在這里插入圖片描述
在這里插入圖片描述
先看下結果吧, 過程太折騰了
在這里插入圖片描述

臨時把虛擬機 core 調高點,不然 編譯太慢了,也可以在windows下用 msys2 編譯
這里編譯的全是 26 版,其他版本自行修改,ndk r21e 最高只能到30
腳本 參考網上其他人的 再修改的

#!/bin/bash
export NDK=/home/ubuntu22/ffpmeg/android-ndk-r21e # 這里需要替換成你本地的 NDK 路徑,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=26
cd x264
function build_android
{
./configure \--prefix=$PREFIX \--disable-cli \--enable-shared \--enable-static \--enable-pic \--host=$my_host \--cross-prefix=$CROSS_PREFIX \--sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \make clean
make -j4
make install
}#arm64-v8a
PREFIX=/home/ubuntu22/ffpmeg/android/x264/arm64-v8a
my_host=aarch64-linux-android
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
build_android

2>x265 3.3版的

rm -rf $(pwd)/x265/build/android
rm -rf $(pwd)/buildmkdir x265/build/android
cp -rf build_script/* x265/build/androidexport NDK_ROOT=/home/ubuntu22/ffpmeg/android-ndk-r21e # 換成自己的實際 NDK 路徑 android-ndk-r21e
export ANDROID_API_VERSION=26
export NUMBER_OF_CORES=2
export OUTPUT_PREFIX=/home/ubuntu22/ffpmeg/android/x265
#aarch64-linux-android26#export CC="$TOOLCHAIN/bin/${TARGET}${API_LEVEL}-clang"
#export CXX="$TOOLCHAIN/bin/${TARGET}${API_LEVEL}-clang++"#pushd x265/build/android/armeabi-v7a
#bash build.sh
#popdpushd x265/build/android/arm64-v8a
bash build.sh
popd

build_script/arm64-v8a/build.sh


#set(CMAKE_C_COMPILER,$CC)
#set(CMAKE_C_COMPILER,$CXX)export CMAKE_C_COMPILER=aarch64-unknown-linux-gnu-gcc
export CMAKE_CXX_COMPILER=aarch64-unknown-linux-gnu-g++cmake ../../../source \-DCMAKE_SYSTEM_NAME=Android \-DCMAKE_SYSTEM_VERSION=${ANDROID_API_VERSION} \-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \-DCMAKE_ANDROID_NDK=${NDK_ROOT} \-DCMAKE_ANDROID_STL_TYPE=c++_static \-DNEON_ANDROID=1sed -i 's/-lpthread/-pthread/g' CMakeFiles/cli.dir/link.txt
sed -i 's/-lpthread/-pthread/g' CMakeFiles/x265-shared.dir/link.txt
sed -i 's/-lpthread/-pthread/g' CMakeFiles/x265-static.dir/link.txtmake -j${NUMBER_OF_CORES}
#make DESTDIR=${OUTPUT_PREFIX}/arm64-v8a install
make DESTDIR=${OUTPUT_PREFIX}/arm64-v8a install
#make PREFIX=${OUTPUT_PREFIX}/arm64-v8a install

3> zlib

#!/bin/bash
export NDK=/home/ubuntu22/ffpmeg/android-ndk-r21e # 這里需要替換成你本地的 NDK 路徑,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export API=26
#"armeabi-v7a arm64-v8a x86_64 x86"
#ARCHS="arm64-v8a"
#ARCHS="armeabi-v7a arm64-v8a x86_64 x86"
#configure [--const] [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]#   [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]#   [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]cd  zlibfunction build_android
{
./configure \--prefix=$PREFIX \--64	\--archs="-arch arm"make clean
make -j2
make install
}#arm64-v8a
PREFIX=/home/ubuntu22/ffpmeg/android/zlib/arm64-v8a
my_host=aarch64-linux-android
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
build_android

4>aac

#!/bin/bash# ndk目錄
export NDK=/home/ubuntu22/ffpmeg/android-ndk-r21e # 這里需要替換成你本地的 NDK 路徑,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
export TARGET=aarch64-linux-android# 架構
#archs="armeabi-v7a arm64-v8a x86 x86_64"
# api等級
export API=26
# --- 輸入參數指定 End ---PREFIX=/home/ubuntu22/ffpmeg/android/aac/arm64-v8a
my_host=aarch64-linux-android
export TARGET=aarch64-linux-android
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-#export AS=$TOOLCHAIN/bin/$TARGET$API-as
export AS=$TOOLCHAIN/bin/$TARGET-as
export LD=$TOOLCHAIN/bin/$TARGET-ld
export NM=$TOOLCHAIN/bin/$TARGET-nm
export STRIP=$TOOLCHAIN/bin/$TARGET-strip
export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib
export AR=$TOOLCHAIN/bin/$TARGET-arcd  aac./autogen.sh
# config
#CXXFLAGS="-std=c++11 -DDEBUG=1"
#CFLAGS="-std=c11"
#${log-lib}
#LDFLAGS="${LDFLAGS} -llog"
#LIBS="${LIBS}"
#LT_SYS_LIBRARY_PATH= "aarch64-linux-android"
#export LDFLAGS="${LDFLAGS} -L$TOOLCHAIN/sysroot/usr/lib/aarch64-linux-android/26"#export LDFLAGS="-L/home/ubuntu22/ffpmeg/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/26"
#export LIBS="${LIBS} -llog"
#/home/ubuntu22/ffpmeg/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/26/liblog.so
#echo $LDFLAGS./configure \
--host=$my_host \
--enable-shared \
--enable-static \
--target=android \
--disable-frontend \
--enable-static \
--prefix=$PREFIX \
--sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot # make
make clean
make -j2
make install

5> ffmpeg

#!/bin/bash
export NDK=/home/ubuntu22/ffpmeg/android-ndk-r21e # 這里需要替換成你本地的 NDK 路徑,其他的不用修改
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
#export API=26cd FFmpegfunction build_android
{
#echo "The start of FFmpeg with x264,fdk-aac for $CPU is completed"
echo "The start of FFmpeg "./configure \
--prefix=$PREFIX \
--enable-neon  \
--enable-hwaccels  \
--enable-gpl   \
--disable-postproc \
--enable-static \
--enable-shared \
--disable-debug \
--enable-small \
--enable-jni \
--enable-mediacodec \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--enable-libx264 \
--enable-libx265 \
--enable-libfdk-aac \
--enable-encoder=libx264 \
--enable-encoder=libx265 \
--enable-encoder=libfdk-aac \
--enable-nonfree \
--enable-muxers \
--enable-decoders \
--enable-demuxers \
--enable-parsers \
--enable-protocols \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$X264_INCLUDE -I$X265_INCLUDE -I$FDK_INCLUDE -I$ZLIB_LIB -I$SYSROOT/usr/include -Os -fpic $OPTIMIZE_CFLAGS $OTHER_CFLAGS" \
--extra-ldflags="-lm -L$FDK_LIB -L$X264_LIB -L$X265_LIB -L$ZLIB_LIB -L$SYSROOT/usr/lib " \
--target-os=android \
--disable-large-tests \
--pkg-config=/usr/bin/pkg-configmake clean
make -j2
make install
#echo "The Compilation of FFmpeg with x264,fdk-aac for $CPU is completed"
echo  "########################################"
echo  $OPTIMIZE_CFLAGS
echo $ADDI_LDFLAGS
#$ADDI_LDFLAGS
pkg-config --libs x265
echo  "########################################"
}
#--disable-avdevice \#--extra-cflags="$(pkg-config --cflags glib-2.0)" \#   --extra-ldflags="$(pkg-config --libs glib-2.0)"#--pkg-config=/usr/local/bin/pkg-config \
#armv8-a
ARCH=arm64
CPU=armv8-a
API=26
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=/home/ubuntu22/ffpmeg/android/ffpmeg/arm64-v8a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
OTHER_CFLAGS="-fno-rtti -fno-exceptions"#BASE_PATH=/root/workspace
BASE_PATH=/home/ubuntu22/ffpmeg/android
LIB_TARGET_ABI=arm64-v8a#指定 fdk-aac 的頭文件和靜態庫目錄
###PREFIX= /home/ubuntu22/ffpmeg/android/acc/arm64-v8a
FDK_INCLUDE=$BASE_PATH/aac/$LIB_TARGET_ABI/include
FDK_LIB=$BASE_PATH/aac/$LIB_TARGET_ABI/lib
echo $FDK_INCLUDE
echo $FDK_LIB#指定 x264 的頭文件和靜態庫目錄
#PREFIX=/home/ubuntu22/ffpmeg/android/x264/arm64-v8a
X264_INCLUDE=$BASE_PATH/x264/$LIB_TARGET_ABI/include
X264_LIB=$BASE_PATH/x264/$LIB_TARGET_ABI/libecho $X264_INCLUDE
echo $X264_LIB#指定 x264 的頭文件和靜態庫目錄
#/home/ubuntu22/ffpmeg/android/x265/arm64-v8a
X265_ROOT=/home/ubuntu22/ffpmeg/android/x265/arm64-v8a/usr/local
X265_INCLUDE=$X265_ROOT/include
X265_LIB=$X265_ROOT/lib#X265_INCLUDE=$BASE_PATH/x265/$LIB_TARGET_ABI/include
#X265_LIB=$BASE_PATH/x265/$LIB_TARGET_ABI/libecho $X265_INCLUDE
echo $X265_LIB#指定 zlib 的頭文件和靜態庫目錄
#PREFIX=/home/ubuntu22/ffpmeg/android/zlib/arm64-v8a
ZLIB_INCLUDE=$BASE_PATH/zlib/$LIB_TARGET_ABI/include
ZLIB_LIB=$BASE_PATH/zlib/$LIB_TARGET_ABI/libecho $ZLIB_INCLUDE
echo $ZLIB_LIBexport PKG_CONFIG_PATH=$X265_LIB/pkgconfig:$X264_LIB/pkgconfig:$FDK_LIB/pkgconfig:$PKG_CONFIG_PATH
#export PKG_CONFIG_PATH=/home/ubuntu22/ffpmeg/android/x265/arm64-v8a/lib/pkgconfig:$PKG_CONFIG_PATH
#export PKG_CONFIG_PATH=/home/ubuntu22/ffpmeg/android/x265/arm64-v8a/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
#pkg-config --libs x264
#export PKG_CONFIG_PATH=/path/to/custom/pkgconfig:$PKG_CONFIG_PATH 會將 /path/to/custom/pkgconfig 目錄添加到 pkg-config 的搜索路徑中
echo "###############################"
echo $X265_LIB/pkgconfig
pkg-config --libs x265  #pkg-config --list-all|grep x265
echo "###############################"build_android
#../FFmpegn4/configure --arch=x86_64 --target-os=mingw64 --prefix=/d/code/ffpmep/ffmpegLib2 --enable-shared --disable-static --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-nonfree --enable-zlib --enable-bzlib --disable-postproc
#--extra-ldflags="-lm -L$FDK_LIB -L$X264_LIB $ADDI_LDFLAGS" # -lm 即是鏈接數學庫
#因為 FFmpeg 鏈接的 fdk-aac 需要用到數學庫,不鏈接的話會報如下錯誤:
#cp $FDK_LIB/libfdk-aac.a $PREFIX/lib
#cp $X264_LIB/libx264.a $PREFIX/lib

3: 拷貝子庫到 ffmpeg lib 下
部分需要去掉 so.版號 變為 so 網上 自行搜索 這里直接跳過
把so 及 include 打包好

番外x265 4.1版本 照這個來吧 ccmake 會跳出框的
PREFIX ASSEMBLY CLI 這三個修改下,其他這里也沒修改
修改后 按 c 再按e 再按g
在這里插入圖片描述
acc 編譯有錯需要改下
寫這里吧 這里純粹偷懶
在這里插入圖片描述
在這里插入圖片描述
4:如果對你又幫助,麻煩點個贊,加個關注
寫個android 測試下章

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

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

相關文章

【kind管理腳本-3】腳本函數說明文檔 —— 便捷使用 kind 創建、刪除、管理集群腳本

下面是一份詳細的說明文檔,介紹該腳本的功能、用法及各部分的含義,供您參考和使用: Kind 集群管理腳本說明文檔 此腳本主要用于管理 Kind(Kubernetes IN Docker)集群,提供創建、刪除、導出 kubeconfig、加…

【計算機行業發展與重塑】

計算機行業正經歷前所未有的變革,AI技術的爆發式發展與產業升級的深度融合,正在重塑行業格局與就業市場。以下從行業趨勢、AI的核心價值、就業需求三個維度展開分析。 一、行業趨勢:AI驅動下的多極增長 AI成為核心引擎 生成式AI的突破&#…

(高頻SQL50題)1667. 修復表中的名字

問題 表: Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | name | varchar | ------------------------- user_id 是該表的主鍵(具有唯一值的列)。 該表包含用戶的 ID 和名字…

基于人工智能的醫學影像關聯分析:利用潛在空間幾何混雜因素校正法|文獻速遞-深度學習醫療AI最新文獻

Title 題目 AI-based association analysis for medical imaging using latent-spacegeometric confounder correction 基于人工智能的醫學影像關聯分析:利用潛在空間幾何混雜因素校正法 01 文獻速遞介紹 人工智能(AI)已成為各個領域的…

開源免費虛擬化軟件PVE功能介紹

Proxmox VE(PVE)提供了一個基于 Web UI(管理界面)的虛擬化管理平臺,用戶可以通過瀏覽器管理 虛擬機(VM)、容器(LXC)、存儲、網絡、備份、用戶權限等。 一、PVE Web 界面…

新球體育比分狀態監控

文章目錄 目標分析監控邏輯代碼目標分析 網頁監控地址:aHR0cHM6Ly9saXZlLnRpdGFuMDA3LmNvbS9pbmRleDJpbjEuYXNweD9pZD0x 監控邏輯 比分等數據主要是依賴JS加載得到,通過ajax后端進行渲染 代碼 # -*- coding: utf-8 -*-import warnings warnings.filterwarnings(ignore) f…

【lodash的omit函數詳解 - 從入門到精通】

lodash的omit函數詳解 - 從入門到精通 小白視角:什么是omit? omit在英文中意為"忽略"或"省略"。在編程中,它就是從一個對象中刪除不需要的屬性,返回一個新對象。 // 原始對象 const person {name: "…

軟考筆記9——數據庫技術基礎

第九章節——數據庫技術基礎 數據庫技術基礎 第九章節——數據庫技術基礎一、基本概念1. 數據庫與數據庫系統2. 數據庫的三級模式2.1 內模式2.2 概念模式2.3 外模式2.4 數據庫的兩級映射2.5 數據庫設計的基本步驟 二、數據模型1. 基本概念2. E-R模型2.1 實體2.2 聯系2.3 屬性 3…

Django分頁教程及示例

推薦超級課程: 本地離線DeepSeek AI方案部署實戰教程【完全版】Docker快速入門到精通Kubernetes入門到大師通關課AWS云服務快速入門實戰目錄 完整代碼示例:結論Django的分頁模塊允許你將大量數據分割成更小的塊(頁面)。這對于以可管理的方式顯示項目列表,如博客文章或產品…

int 與 Integer 的區別詳解

1. 本質區別 特性intInteger類型基本數據類型(Primitive)包裝類(Wrapper Class)存儲位置棧(或作為對象成員在堆中)堆(對象實例)默認值0null(可能導致 NullPointerExcept…

mariadb使用docker compose方式安裝

問題 本地mac m1上面的mysql和mariadb突然不用使用了,重新安裝也不想,最近mac系統也更新了,brew也更新了,重新安裝mariadb還是不能正常使用,現在我打算使用docker來安裝本地的mariadb了。 默認配置文件my.cnf 從容器…

基于React + Antd + Java的OFD文件上傳預覽實現方案(OFD文件轉圖片)

一、前端實現方案(React + Antd) import React, {useState } from react; import {Upload, Button, Image, Carousel } from antd; import {UploadOutlined } from @ant-design/icons;const OFDUploadPreview = () => {const [previewImages, setPreviewImages] = useSta…

從零構建大語言模型全棧開發指南:第四部分:工程實踐與部署-4.3.1LangChain與Dify平臺實戰:從RAG到Agent工作流

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 LangChain與Dify平臺實戰:從RAG到Agent工作流 - 4.3.1 LangChain與Dify平臺實戰:從RAG到Agent工作流1. LangChain核心組件與RAG架構設計1.1 LangChain核心模塊1.2 RAG架構實現流程2. RAG實戰:企業知識…

操作 Office Excel 文檔類庫Excelize

Excelize 是 Go 語言編寫的一個用來操作 Office Excel 文檔類庫,基于 ECMA-376 OOXML 技術標準。可以使用它來讀取、寫入 XLSX 文件,相比較其他的開源類庫,Excelize 支持操作帶有數據透視表、切片器、圖表與圖片的 Excel 并支持向 Excel 中插…

R Excel 文件:高效數據處理與可視化工具的完美結合

R Excel 文件:高效數據處理與可視化工具的完美結合 引言 在數據分析和處理領域,R語言因其強大的數據處理能力和豐富的可視化功能而備受青睞。而Excel作為最常用的電子表格軟件,其廣泛的應用也使得R與Excel的結合成為數據處理與可視化的理想…

[ctfshow web入門] 零基礎版題解 目錄(持續更新中)

ctfshow web入門 零基礎版 前言 我在刷題之前沒有學過php,但是會python和C,也就是說,如果你和我一樣會一門高級語言,就可以開始刷題了。我會以完全沒學過php的視角來寫題解,你也完全沒有必要專門學習php,這…

linux第三次作業

1、將你的虛擬機的網卡模式設置為nat模式,給虛擬機網卡配置三個主機位分別為100、200、168的ip地址 2、測試你的虛擬機是否能夠ping通網關和dns,如果不能請修改網關和dns的地址 3、將如下內容寫入/etc/hosts文件中(如果有多個ip地址則寫多行&…

如何開發 HTML 游戲

開發 HTML 游戲適合初學者學習編程和游戲開發的基礎知識。HTML 游戲通常結合了 HTML、CSS 和 JavaScript 技術,利用瀏覽器的渲染能力來實現交互式的游戲體驗。 1. 確定游戲類型 在開始開發之前,你需要明確你的游戲類型。例如: 簡單游戲&…

我的NISP二級之路-02

目錄 一.數據庫 二.TCP/IP協議 分層結構 三.STRIDE模型 四.檢查評估與自評估 檢查評估 自評估 五.信息安全應急響應過程 六.系統工程 七.SSE-CMM 八.CC標準 九.九項重點工作 記背: 一.數據庫 關于數據庫恢復技術,下列說法不正確的是&#xff1a…

結構化需求分析:專業方法論與實踐

結構化需求分析是一種用于軟件開發或其他項目中的系統分析方法,旨在全面、準確地理解和描述用戶對系統的需求。以下是關于結構化需求分析的詳細介紹: 一、概念 結構化需求分析是采用自頂向下、逐步分解的方式,將復雜的系統需求分解為若干個…