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库”。

相关文章
|
15小时前
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
《FFmpeg开发实战》一书中,第10章示例程序playaudio.c原本仅支持mp3和aac音频播放。为支持ogg、amr、wma等非固定帧率音频,需进行三处修改:1)当frame_size为0时,将输出采样数量设为512;2)遍历音频帧时,计算实际采样位数以确定播放数据大小;3)在SDL音频回调函数中,确保每次发送len字节数据。改进后的代码在chapter10/playaudio2.c,可编译运行播放ring.ogg测试,成功则显示日志并播放铃声。
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
|
1天前
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
2天前
|
Java Android开发
Android开发--Intent-filter属性详解
Android开发--Intent-filter属性详解
|
2天前
|
物联网 Java 开发工具
安卓应用开发:打造未来移动生活
【5月更文挑战第10天】 随着科技的飞速发展,智能手机已成为我们日常生活中不可或缺的一部分。作为智能手机市场的两大巨头,安卓和iOS分别占据了一定的市场份额。在这篇文章中,我们将重点关注安卓应用开发,探讨如何利用先进的技术和创新思维,为用户打造更加便捷、智能的移动生活。文章将涵盖安卓应用开发的基本概念、关键技术、以及未来发展趋势等方面的内容。
|
4天前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
11 0
|
1月前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(三)
21 0
|
4月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
84 0
|
8月前
|
C++ Windows
FFmpeg入门及编译 3
FFmpeg入门及编译
57 0
|
8月前
|
编解码 API 开发工具
FFmpeg入门及编译 1
FFmpeg入门及编译
101 0
|
5天前
|
Linux
Linux编译FFmpeg
Linux编译FFmpeg
12 0