首页 > 系统相关 >FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

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

时间:2024-03-24 12:56:42浏览次数:18  
标签:FFmpeg 编译 sh Linux x264 Android config 源码

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

标签:FFmpeg,编译,sh,Linux,x264,Android,config,源码
From: https://www.cnblogs.com/aqi00/p/18062906

相关文章

  • FFMpeg笔记(十二)升级FFmpeg6.1
      FFmpeg最新版已更新6.1,许多之前标记为deprecated的api被彻底删除了,同时也增加了好多新的特性和功能。FFmpeg团队持续优化代码,新版本往往具有更高的编码和解码效率,因此及时更新FFmpeg版本,有利于提升应用的处理速度和资源利用率。本文记录项目中FFmpeg更新至6.1版本过程中遇到......
  • Linux指令入门
    目录Linux1.版本2.指令基本认识指令ls指令pwdcdtouch.mkdir**指令(重要):treermdir**指令**&&rm指令(重要):mv相当于window系统的剪切man指令cpmvcatmore重定向简单的while循环(构建一个大文件)head时间相关的指令cal(日历)find**指令:(灰常重要-namegrep......
  • 在Linux中,文件权限有哪些?有什么作用?
    在Linux中,文件权限是系统安全性的关键组成部分,它决定了哪些用户或用户组可以访问文件或目录。文件权限主要有以下几种:读权限(r):表示可以读取文件的内容。例如,使用cat或less命令查看文件内容时,需要该文件具有读权限。写权限(w):允许用户修改文件的内容。例如,使用vim或vi等文本编辑器......
  • 在Linux中,`/etc/passwd` 和 `/etc/shadow` 文件分别有什么作用?
    在Linux系统中,/etc/passwd和/etc/shadow文件是用于存储系统用户账户信息的关键配置文件,它们各自扮演不同的角色,共同管理系统的用户身份验证和密码安全性。/etc/passwd文件:作用:存储了系统中的每个用户的基本信息,包括用户名、用户ID(UID)、组ID(GID)、用户信息描述(GECOS)、用......
  • 在Linux中,如何在Linux下移动、复制和删除文件或目录?
    在Linux系统中,移动、复制和删除文件或目录的操作主要通过命令行工具完成,以下是具体命令和用法:1.移动文件或目录(mv)移动单个文件:mvoldfilenewfile此命令会将文件oldfile改名为newfile,相当于在同一个目录内重命名文件。如果你想将文件移动到另一个目录中:mvoldfile/pa......
  • 在Linux中,如何查看当前工作目录?
    在Linux中,你可以使用多种命令来查看当前工作目录,即你当前所在的文件夹路径。以下是最常用的方法:使用pwd命令:pwd是“printworkingdirectory”的缩写,它用于显示当前工作目录的完整路径。在终端中输入pwd并回车,即可看到当前所在的目录路径。$pwd/home/username/current_di......
  • 在Linux中,如何查看系统上运行的进程?
    在Linux中查看系统上运行的进程有多种命令和工具可用,以下是一些常见的方法:1.ps命令查看当前终端下运行的进程:ps显示所有进程:ps-e显示所有进程的完整信息(包括父进程ID、启动时间、CPU和内存使用等):ps-ef显示所有进程并按照用户和CPU使用排序:ps-aux2.t......
  • Linux C编程一站式学习 part2: C语言本质
    LinuxC编程一站式学习(akaedu.github.io)22.Makefile基础1.基本规则欲更新目标,必须首先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随之被更新。“更新”:执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头对于Makefile中的每个以Tab开头......
  • Linux操作系统的简单终端(Terminal)命令
    ls:列出当前目录下的文件和文件夹。你可以使用ls-l来查看详细信息,或者使用ls-a来显示包括隐藏文件在内的所有文件。cd:用于切换目录。例如,cdDocuments会进入Documents文件夹。你还可以使用cd..来返回上一级目录,或者使用cd~来回到你的主目录。pwd:显示当前所在的目录路径。chm......
  • linux命令详解——uniq,wc,tr
     uniquniq可以对查看内容去重但在我们使用时会发现,uniq的去重逻辑是,当遇到连续多行内容相同时,去除重复行,而对间隔重复内容,无法实现去重功能这里想到可以将sort与uniq结合使用,先对文件内容进行排序,将相同内容行紧邻,然后再使用uniq去重(使用管道符将一个命令的结果作为另一个......