FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

简介: 在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。

​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需FFmpeg的so库。

1、下载Linux版本的android-ndk-r21e

登录Linux服务器(比如华为云的欧拉系统),依次执行下面的命令。

cd /usr/local/src
curl -O https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip
unzip android-ndk-r21e-linux-x86_64.zip

2、上传FFmpeg相关库的源码

重新解压FFmpeg相关库的源码,包括FFmpeg、x264、freetype、lame等,并修改FFmpeg相关库的sh文件(包括config_x264.sh、config_freetype.sh、config_lame.sh、config_ffmpeg_full.sh,这几个sh文件见《FFmpeg开发实战:从零基础到短视频上线》随书源码的chapter12目录)。修改内容如下:
(1)把几个sh文件里的下面这行

SYSTEM=windows-x86_64

改为下面这行,也就是把“windows”替换为“linux”

SYSTEM=linux-x86_64

(2)去掉几个sh文件里的回车符
使用文本编辑软件UltraEdit可以去掉回车符,去除方式有两种,一种是把“^p”替换为“^n”;另一种是依次选择菜单:文件→转换→DOS转UNIX,因为UNIX文件格式不用回车符。
另外,记得给几个sh文件赋予可执行权限,也就是执行下面命令:

chmod +x config_*.sh

3、编译x264库的源码

在编译x264源码之前,要先修改x264的configure文件。与在Windows环境交叉编译相比,Linux系统在编译x264前只要修改configure,不用改Makefile。
打开x264-master目录下的configure文件,把下面这行(一共有一模一样的两行,两行都要改,别漏了)

    echo "SONAME=libx264.so.$API" >> config.mak

改为下面这行:

    echo "SONAME=libx264.so" >> config.mak

保存并退出configure文件,再依次执行下面的编译命令:

./config_x264.sh
make -j4
make install

4、编译其他第三方库的源码

FFmpeg用到的其他第三方库包括freetype、lame等,这几个库的编译命令如下(注意把xxx换成对应的库名):

./config_xxx.sh
make -j4
make install

5、配置环境变量PKG_CONFIG_PATH

Windows的profile文件位于msys安装目录下面的/etc/profile,而Linux的profile文件位于用户初始目录的.bash_profile。往.bash_profile的文件末尾添加下面两行:

export PKG_CONFIG_PATH=/usr/local/app_x264/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/app_freetype/lib/pkgconfig:$PKG_CONFIG_PATH

保存并退出.bash_profile之后,执行以下命令加载环境变量:

source .bash_profile

6、编译FFmpeg库的源码

进入FFmpeg的源码目录,依次执行下面的配置、编译和安装命令:

./config_ffmpeg_full.sh
make -j4
make install

编译完成后,即可在/usr/local/app_xxx/bin(xxx为每个库的库名)目录下找到生成的so文件,把这些so文件复制到App工程的src\main\jniLibs\arm64-v8a目录下,此后App工程的配置、编译和运行说明同《FFmpeg开发实战:从零基础到短视频上线》的“12.1.3 App工程调用FFmpeg的so库”。

目录
相关文章
|
12天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
13天前
|
编解码 Linux 5G
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器
AVS3,中国制定的第三代音视频标准,是首个针对8K和5G的视频编码标准,相比AVS2和HEVC性能提升约30%。uavs3d是AVS3的解码器,支持8K/60P实时解码,且在各平台有优秀表现。要为FFmpeg集成AVS3解码器libuavs3d,需从GitHub下载最新源码,解压后配置、编译和安装。之后,重新配置FFmpeg,启用libuavs3d并编译安装,通过`ffmpeg -version`确认成功集成。
29 0
FFmpeg开发笔记(二十)Linux环境给FFmpeg集成AVS3解码器
|
15天前
|
运维 监控 关系型数据库
【Zabbix 6(1),Linux运维组件化开发教程
【Zabbix 6(1),Linux运维组件化开发教程
|
15天前
|
Java 测试技术 开发工具
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
|
15天前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
17天前
|
Linux C语言
|
Java Android开发 安全
|
2天前
|
缓存 监控 Android开发
Android 开发中的内存优化策略
【5月更文挑战第30天】在移动应用的开发过程中,性能和用户体验始终是核心关注点。对于基于Android平台的应用程序,有效的内存管理是确保流畅运行和优异性能的关键因素之一。本文将深入探讨Android开发中常见的内存问题,并提出一系列实用的内存优化策略。我们将从内存泄漏的识别与防止开始,到合理使用内存缓存技巧,以及高效的数据结构选择等方面进行详细阐述。通过这些策略的实施,开发者可以显著减少应用的内存占用,提升应用的稳定性和响应速度,进而改善最终用户的体验。
|
2天前
|
搜索推荐 Android开发 开发者
安卓应用开发:打造高效通知管理系统
【5月更文挑战第30天】在移动应用的世界中,通知管理是提升用户体验的关键。本文将深入探讨如何在安卓平台上实现一个高效、用户友好的通知管理系统。我们将分析安卓通知渠道的优势,探索定制化通知的设计理念,并提供实用的编程技巧以优化通知的显示和用户交互。通过实例和代码片段,读者将学习如何有效地利用安卓系统服务来创建静默但强大的后台通知逻辑,从而在维持用户参与度的同时避免打扰用户。
|
3天前
|
编解码 测试技术 Android开发
安卓应用开发:打造高效用户界面的五大关键策略
【5月更文挑战第29天】 在竞争激烈的移动应用市场中,一个直观高效的用户界面(UI)对于吸引和保持用户至关重要。针对安卓平台,本文将探讨五种提升应用UI效率与用户满意度的关键策略。这些策略不仅基于最新的设计趋势,还结合了性能优化的实践技巧,旨在为开发者提供实用指南,帮助他们创建流畅、响应迅速且美观的应用体验。