FFmpeg开辟笔记(九)Linux交叉编译Android的x265库

张春  金牌会员 | 2024-5-15 21:16:46 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 905|帖子 905|积分 2715

​《FFmpeg开辟实战:从零底子到短视频上线》一书的“12.1.2  交叉编译Android需要的so库”介绍了怎样在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了怎样在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍怎样在Linux环境交叉编译Android所需x265的so库。1、安装cmake

执行以下下令安装cmake
  1. yum install cmake git
复制代码
2、下载Linux版本的android-ndk-r21e(如已下载则忽略)

登录Linux服务器(好比华为云的欧拉系统),依次执行下面的下令。
  1. cd /usr/local/src
  2. curl -O https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
  3. unzip android-ndk-r21e-linux-x86_64.zip
复制代码
3、上传x265的源码

从下面链接下载x265的源码包
https://bitbucket.org/multicoreware/x265_git/downloads/x265_3.5.tar.gz
解压x265源码包,修改x265_3.5/build/aarch64-linux目次下的crosscompile.cmake,把下面两行
  1. set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
  2. set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
复制代码
改为下面两行
  1. set(CMAKE_C_COMPILER aarch64-linux-android24-clang)
  2. set(CMAKE_CXX_COMPILER aarch64-linux-android24-clang++)
复制代码
4、配置x265的源码

进入x265_3.5下的build/aarch64-linux目次,执行以下下令配置x265:
  1. export PATH=$PATH:/usr/local/src/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin
  2. ./make-Makefiles.bash
复制代码
下令行弹出的选项界面中,注意下列三项修改:
(1)把CMAKE_INSTALL_PREFIX这项改为/usr/local/app_x265(按向下键定位到该项,再按回车键,即可按照vi方式编辑路径)
(2)把ENABLE_ASSEMBLY这项改为OFF(按向下键定位到该项,再按回车键,即可把ON改为OFF)
(3)把ENABLE_CLI这项改为OFF(按向下键定位到该项,再按回车键,即可把ON改为OFF)
接着按c键开始配置,再按e键退出配置,然后按g键开始生成。
5、修改x265的编译规则

进入x265_3.5源码下的build/aarch64-linux/CMakeFiles/x265-shared.dir目次,注意修改下面三个文件:
(1)修改该目次的link.txt,把文件中的所有“libx265.so.199”替换为“libx265.so”。同时删除文件末端的“ -lpthread -lrt”。
(2)同目次的relink.txt修改说明同link.txt。
(3)修改同目次下面的build.make,把该文件中的所有“libx265.so.199”替换为“libx265.so”,把所有的“libx265.so”替换为“libx265.so.199”。注意A和B交换名称的时候,可以设定第三个名称C,好比先把A替换为C,接着B替换为A,然后C替换为B。
6、编译和安装x265

进入x265_3.5源码下的build/aarch64-linux目次,执行以下下令编译和安装x265:
  1. make
  2. make install
复制代码
7、调整x265的pc形貌文件

修改/usr/local/app_x265/lib/pkgconfig下面的x265.pc,该文件的“Libs.private”选项里面去掉“-lrt”,也就是改成下面这行:
  1. Libs.private: -lc++ -lm -lgcc -ldl -lgcc -ldl -ldl
复制代码
8、添加PKG_CONFIG_PATH路径

Linux的profile文件位于用户初始目次的.bash_profile。执行以下下令编辑当前用户的profile文件:
  1. cd<br>vi .bash_profile
复制代码
往.bash_profile的文件末端添加下面一行:
  1. export PKG_CONFIG_PATH=/usr/local/app_x265/lib/pkgconfig:$PKG_CONFIG_PATH
复制代码
生存并退出.bash_profile之后,执行以下下令加载环境变量:
  1. source .bash_profile
复制代码
然后执行下面的环境变量查看下令,确保x265的环境变量已经乐成加载。
  1. env | grep PKG
复制代码
9、重新编译FFmpeg启用x265

打开《FFmpeg开辟实战:从零底子到短视频上线》随书源码的chapter12/config_ffmpeg_full.sh,将该文件另存为config_ffmpeg_x265.sh,并在文件内部这行
  1.   --enable-libx264 \
复制代码
的下面增加如下一行配置
  1.   --enable-libx265 \
复制代码
接着把config_ffmpeg_x265.sh上传到服务器的FFmpeg源码目次,执行下面下令赋予可执行权限。
  1. chmod +x config_ffmpeg_x265.sh
复制代码
然后运行下列下令配置、编译和安装FFmpeg
  1. ./config_ffmpeg_x265.sh
  2. make clean
  3. make -j4
  4. make install
复制代码
10、把so文件导入App工程

(1)把FFmpeg交叉编译好的include目次(位于/usr/local/app_ffmpeg/include)整个复制到App工程的src/main/cpp目次下。
(2)在src\main目次下创建jniLibs目次,并在jniLibs下面创建子目次arm64-v8a,把FFmpeg交叉编译好的8个so文件(位于/usr/local/app_ffmpeg/lib)全部复制到arm64-v8a目次下。
(3)config_ffmpeg_x265.sh里面启用的几个第三方库的so文件也一块复制到arm64-v8a目次下,包罗x264、x265、mp3lame、freetype等。
(4)给App工程的build.gradle的android→defaultConfig→externalNativeBuild→cmake节点内部增加下面配置。
  1.     abiFilters "arm64-v8a"
  2.     arguments '-DANDROID_STL=c++_shared' // FFmpeg集成x265时需要
复制代码
如果不加,App运行时会报错“java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found”。
(5)在Android Studio上编译运行App工程,观察App是否正常运行。​

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表