欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 音视频(四)android编译

音视频(四)android编译

2025/4/10 11:59:24 来源:https://blog.csdn.net/yunteng521/article/details/146800457  浏览:    关键词:音视频(四)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 测试下章

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词