推荐响应式网站建设,个人养老保险怎么买合适,牡丹江到林口,厦门集美网站建设准备工作
环境准备
1.Windows安装Oracle VM VirtualBox 7.0.10#xff0c;安装ubuntu-22.04.3。
坑一#xff1a;无法往虚拟机里拖放复制文件#xff0c;解决办法#xff1a;登录Ubuntu虚拟机时切换到xorg方式登录#xff0c;参考地址#xff1a;Ubuntu Desktop 22.04…准备工作
环境准备
1.Windows安装Oracle VM VirtualBox 7.0.10安装ubuntu-22.04.3。
坑一无法往虚拟机里拖放复制文件解决办法登录Ubuntu虚拟机时切换到xorg方式登录参考地址Ubuntu Desktop 22.04 无法实现拖放复制操作解决办法-CSDN博客 下载文件
下载ndk25 官网下载ndk官网 网盘下载android-ndk-r25c-linux.zip 注意这是linux环境下的ndk。 下载FFmpeg 5.1.3 官网下载FFmpeg官网 网盘下载FFmpeg 5.1.3 解压文件
解压文件 #解压ffmpeg-5.1.3.tar.xz
tar -xf ffmpeg-5.1.3.tar.xz#解压android-ndk-r25c-linux.zip
unzip android-ndk-r25c-linux.zip ndk配置环境变量
配置环境变量命令sudo gedit ~/.bashrc 注意替换为你的ndk路径
export NDK_HOME/你的ndk路径/android-ndk-r25c
export PATH$NDK_HOME:$PATH
输入命令 ndk-build查看配置环境变量成功没只要没出command not found就证明环境变量配置成功,如果成功显示如下 下载所需编译软件
首先更新包列表 sudo apt update 然后下载需要的编译软件
sudo apt 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 \
libaom-dev \
libdav1d-dev \
pkg-config配置root用户
注意编译的时候用root用户我用普通用户编译失败
普通用户登录成功后设置 root 用户的登录密码然后 su 登录
$ sudo passwd root
[sudo] password for dummy: # 此处需输入普通用户的登录密码
New password: # 此处输入 root 用户的登录密码新设置密码
Retype new password: # 此处再次输入 root 用户的登录密码确认与上面的密码输入一致
passwd: password updated successfully
$ su
Password: # 此处输入上面设置的 root 用户登录密码回车即可登录至 root 用户
# exit # 退出登录 root 用户回到普通用户登录态 到这一步编译所需的准备工作就做完了接下来终于可以开始编译了。 编译FFmpeg
修改FFmpeg的configure文件将文件中
SLIBNAME_WITH_MAJOR$(SLIBNAME).$(LIBMAJOR)
LIB_INSTALL_EXTRA_CMD$$(RANLIB)$(LIBDIR)/$(LIBNAME)
SLIB_INSTALL_NAME$(SLIBNAME_WITH_VERSION)
SLIB_INSTALL_LINKS$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)
替换为
SLIBNAME_WITH_MAJOR$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)
LIB_INSTALL_EXTRA_CMD$$(RANLIB)$(LIBDIR)/$(LIBNAME)
SLIB_INSTALL_NAME$(SLIBNAME_WITH_MAJOR)
SLIB_INSTALL_LINKS$(SLIBNAME) 在FFmpeg目录下新建build_android.sh想了解详细配置参数请前往这里。
# touch 新建文件
[rootCentOS6 ffmpeg-5.1.3]# touch build_android.sh
# vim 编辑build_android.sh
[rootCentOS6 ffmpeg-5.1.3]# vim build_android.sh写入脚本内容
#!/bin/bash
#特别注意 以下路径需要修改成自己Linux系统中的NDK目录前面上传的ndk解压文件当中
TOOLCHAIN/usr/local/src/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64
# 最低支持的android sdk版本
API21
# --extra-cflags中添加-DVK_ENABLE_BETA_EXTENSIONS0, 防止引用vulkan_beta.h头文件
function build_android
{
echo Compiling FFmpeg for $CPU
./configure \--prefix$PREFIX \--disable-neon \--disable-hwaccels \--disable-gpl \--disable-postproc \--enable-shared \--enable-jni \--disable-mediacodec \--enable-small \--enable-gpl \--disable-decoderh264_mediacodec \--disable-static \--disable-doc \--disable-programs \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-avdevice \--disable-symver \--cross-prefix$CROSS_PREFIX \--target-osandroid \--arch$ARCH \--cpu$CPU \--cc$CC \--cxx$CXX \--enable-cross-compile \--sysroot$SYSROOT \--extra-cflags-DVK_ENABLE_BETA_EXTENSIONS0 -mno-stackrealign -Os -fpic $OPTIMIZE_CFLAGS \--extra-ldflags$ADDI_LDFLAGS \$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4
make install
echo The Compilation of FFmpeg for $CPU is completed
}#armv8-a
ARCHarm64
CPUarmv8-a
# r21版本的ndk中所有的编译器都在/toolchains/llvm/prebuilt/darwin-x86_64/目录下clang
CC$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX$TOOLCHAIN/bin/aarch64-linux-android$API-clang
# NDK头文件环境
SYSROOT$TOOLCHAIN/sysroot
CROSS_PREFIX$TOOLCHAIN/bin/llvm-
# so输出路径
PREFIX$(pwd)/android/$CPU
OPTIMIZE_CFLAGS-march$CPU
build_android# 交叉编译工具目录,对应关系如下
# armv8a - arm64 - aarch64-linux-android-
# armv7a - arm - arm-linux-androideabi-
# x86 - x86 - i686-linux-android-
# x86_64 - x86_64 - x86_64-linux-android-# CPU架构
#armv7-a
ARCHarm
CPUarmv7-a
CC$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
SYSROOT$TOOLCHAIN/sysroot
CROSS_PREFIX$TOOLCHAIN/bin/llvm-
PREFIX$(pwd)/android/$CPU
OPTIMIZE_CFLAGS-mfloat-abisoftfp -mfpuvfp -marm -march$CPU
build_android# #x86
# ARCHx86
# CPUx86
# CC$TOOLCHAIN/bin/i686-linux-android$API-clang
# CXX$TOOLCHAIN/bin/i686-linux-android$API-clang
# SYSROOT$TOOLCHAIN/sysroot
# CROSS_PREFIX$TOOLCHAIN/bin/i686-linux-android-
# PREFIX$(pwd)/android/$CPU
# OPTIMIZE_CFLAGS-marchi686 -mtuneintel -mssse3 -mfpmathsse -m32
# build_android# #x86_64
# ARCHx86_64
# CPUx86-64
# CC$TOOLCHAIN/bin/x86_64-linux-android$API-clang
# CXX$TOOLCHAIN/bin/x86_64-linux-android$API-clang
# SYSROOT$TOOLCHAIN/sysroot
# CROSS_PREFIX$TOOLCHAIN/bin/x86_64-linux-android-
# PREFIX$(pwd)/android/$CPU
# OPTIMIZE_CFLAGS-march$CPU -msse4.2 -mpopcnt -m64 -mtuneintel
# 方法调用
# build_android
赋权限755
在FFmpeg目录下的ffbuild目录中将图中sh文件权限改为755否则编译过程中可能报错无权限执行该文件。build_android.sh文件也赋权一下。
chmod 755 build_android.sh执行脚本
./ build_android.sh 编译成功可以看到已经生成了.so动态库文件。
坑二最后强调赋权限和执行build_android.sh 都使用root用户我普通用户编了半天也不成功。 参考连接
FFmpeg5.1.3编译动态库详细教程(基于Linux虚拟机)-CSDN博客 【Android音视频开发】FFmpeg库编译详解2022最新版_android 编译ffmpeg_JesseAndroid的博客-CSDN博客 【精选】ffmpeg编译参数详解_--disable-swscale-alpha-CSDN博客