大家好,今天给大家分享一篇关于ffmpeg开发环境搭建的文章。 我很早之前也安装过ffmpeg源码,但是没有给你搭建开发环境,而且当时的版本也比较旧,细节很多。 没有告诉你如何解决!
今天给大家展示详细的ffmpeg最新版本5.1源码安装步骤以及vscode开发环境搭建! 我们要跟上技术的发展,所以这次我们使用最新的版本作为开发环境!
如果需要进行交叉编译,可以参考之前移植rv1126的教程!
好了,开始接下来的分享,推荐在ubuntu18上安装环境!
目录
1.编译安装所需的开源编码格式:
首先,在编译安装这个开源编码格式之前,我们需要了解一下为什么需要它们:
为什么有必要? 如果你对ffmpeg有一点了解的话ffmpeg源码编译,ffmpeg本身就是一个框架,它默认不支持这三种编码格式,所以我们需要自动添加它们来支持!
好了,明白了这些之后,我们就开始下载这三种开源编码格式的源码包:
1.编译aac:
aac下载链接:
wget https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.2.tar.gz
开始编译:
- 1、./configure --prefix=/usr/local/ffmpeg/ --enable-shared
- 2、make -j8 && make install
这里我把编译好的东西全部放在/usr/local/ffmpeg/下ffmpeg源码编译,这里只编译动态库; 您可以按照前两个步骤操作:
最终编译好的动态库放在/usr/local/ffmpeg/lib下,头文件在/usr/local/include下:
2.编译x264:
x264下载链接:
wget http://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20191024-2245-stable.tar.bz2
开始编译:
1、./configure --prefix=/usr/local/ffmpeg --enable-static --enable-pic
2、 make -j8 && make install
这里,编译好的东西也放在/usr/local/ffmpeg路径下,编译静态库:
注意:这里如果第一次安装会报错nasm版本太高。 这时需要重新下载nasm源码进行安装编译:
这里给大家介绍nasm的安装步骤; 首先是nasm的下载链接:
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2
编译步骤:
1、./configure
2、make -j8 && make install
好的,这个操作比较简单,按照这个操作即可; 如果你是第一次安装x264,可以通过重新安装nasm来解决错误,然后我们再安装x264:
最终生成的头文件和静态库也放在/usr/local/ffmpeg路径下:
3.编译x265:
x265下载链接:
wget http://ftp.videolan.org/pub/videolan/x265/x265_3.2.tar.gz
编译步骤:
1、cd x265_3.2/build/linux/
2、 ./make-Makefiles.bash
3、 make -j8 && make install
我们可以看到x265编译的库和头文件分别放在/usr/local/lib和/usr/local/include路径下!
2.编译安装最新的ffmpeg源码:
这里我们使用gitte上的源码,github上下载会有点慢:
git clone https://gitee.com/mirrors/ffmpeg/
我们下载了它并将分支切换到5.1版本:
git checkout -b remotes/origin/release/5.1
然后开始编译:
1、./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-shared --enable-version3 --enable-nonfree --enable-pthreads --enable-libx264 --enable-libx265 --enable-libfdk-aac
2、make -j8 && make install
这里第一步我们是自动强制打开aac、x264、x265编码格式。 这里还有其他enable的功能:
我们发现找不到libfdk_aac,那么怎么解决呢,问题是找不到它的路径,那么我们来配置一下环境变量:
vi ~/.bashrc
添加以下句子:
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig"
然后退出,执行source ~/.bashrc使其生效。 我们为什么要在这里这样做? 这里我们主要通过下面的fdk-aac.pc文件来定位fdk-aac:
这时再次执行昨天的配置就可以解决这个问题。 如果以后遇到类似的问题,可以参考这些方法来解决。 核心就是找到你编译的.pc后缀对应的文件:
然后下面继续编译,这个过程比较长,我只展示make install部分:
最后我们可以在/usr/local/ffmpeg/lib路径下看到生成的库:
可执行程序和头文件:
这里还要配置一下环境变量:
export PATH="$PATH:/usr/local/ffmpeg/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/ffmpeg/lib"
这时我可以在任意终端路径下查看ffmpeg的版本:
3、使用vscode搭建ffmpeg开发环境:
首先去vscode官网下载vscode:
https://code.visualstudio.com/
下载以下版本,因为我当前的环境是ubuntu18:
然后直接点击下载的包安装vscode:
最后可以看到安装的vscode:
现在我们来构建一个heh.c项目,并先安装c/c++和gdb插件:
终端编译:
gcc heh.c -lavutil -lavformat
终于:
对嵌入式音频开发感兴趣的同学可以加入txp玩Linux星球来学习。
Android 12正式版已经发布:。 Android 12正式版的代码也已经发布,官方文档也已更新:
本文将带您下载并编译最新的Android 12代码。 本地编译的代码有以下用途
可以刷真机,方便开发者本地调试。 同时可以将代码导出到Android Studio中进行Debug。 可以编译Userdebug版本,root并重新挂载,方便调试系统和App。 在Debug模式下,可以看到很多看不到的User版本。 同时,因为可以看到更多的信息,也方便分析App竞品和App行为分析,可以让学习Android源码变得更加容易。 本地版本可以打开很多系统级的Debug Logs,也可以添加自己的日志。 ,或者自己改变流程
如果不需要下载编译Debugandroid源码编译模块,只是单纯看代码,建议使用cs.android.com。想要深入了解Android系统的朋友以及Android系统开发初学者可以看一下。 建议编译配置如下
闲鱼购买一台二手解锁的Pixel 3及以上(Android 12仅支持Pixel 3及以上),硬盘足够大(最好是ssd),显存足够大(最好是32g,如果没有就用swap),不这么弱的cpu(不然会影响编译时间),一台安装了Linux的台式机 1.代码下载
由于国外使用Google官方下载站,下载不动,有时.repo无法下载,所以本教程以国外镜像站作为反例。 参考官方教程
中科大AOSP镜像站点地址:
下载时只需按照下面的步骤即可(以下方法可以在Ubuntu、WSL、WSL2、Mac上运行,但是在编译旁边的代码时,只能使用Linux,所以建议您使用Linux像Ubuntu这样的系统来下载、编译和开发代码)
1.1 第一步:Repo工具下载
1
2
3
4
mkdir ~/bin
PATH=~/bin:$PATH
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
1.2 第二步:配置个人信息
如果没有安装git,首先自己安装git,然后执行下面的命令,填写你的Name和Email
1
2
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
比如我填写的
1
2
git config --global user.name "Gracker"
git config --global user.email "dreamtale.jg@gmail.com"
1.2 第三步:创建项目目录
本地建立一个工作目录(名字随意,这里以Android_12_AOSP为例)
1
2
mkdir Android_12_AOSP
cd Android_12_AOSP
1.4 第四步:初始化仓库
仓库初始化有两种形式,一种是直接下载,另一种是添加标签下载特定标签版本。 下面将分别介绍这两种方式,大家可以选择选择哪种形式(注意:这里的两种下载方式会影响后续的驱动下载,所以请记住您使用的是哪种方式,并在驱动下载部分选择合适的驱动)
1.4.1 直接下载(推荐)
这个方法会下载所有代码,默认分支是master,如果不用担心空间的话,可以直接用这些方式下载
1
2
3
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
## 如果提示无法连接到 gerrit.googlesource.com,可以编辑 ~/bin/repo,把 REPO_URL 一行替换成下面的:
## REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
这里需要注意的是,默认repo使用的地址是REPO_URL = '',这里我们需要更改REPO_URL,否则会很难下载
修改1:在你的rc文件中,只需添加一个配置:REPO_URL=""修改2:直接打开~/bin/repo,并将REPO_URL行替换为以下内容:REPO_URL = ''
下载.repo后,会有以下信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
➜ Android12 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
Downloading Repo source from https://gerrit-googlesource.proxy.ustclug.org/git-repo
... A new version of repo (2.17) is available.
... You should upgrade soon:
cp /home/gracker/Code/Android12/.repo/repo/repo /home/gracker/bin/repo
Downloading manifest from git://mirrors.ustc.edu.cn/aosp/platform/manifest
remote: Enumerating objects: 91965, done.
remote: Total 91965 (delta 0), reused 0 (delta 0)
Your identity is: Gracker
If you want to change this, please re-run 'repo init' with --config-name
repo has been initialized in /home/gracker/Code/Android12
如果你选择直接下载,那么就不需要看3.2
1.4.2 下载特定标签
该方法是指只下载单个Tag对应的代码。 可以在此处查看此处的标签。 例如,我的开发机器是 Google Pixel 3 XL。 我在Tag列表中查看对应的型号,看看对应的型号有哪些TAG。 目前Android 12只发布了两个,如下
对应的Tags是android-12.0.0_r3和android-12.0.0_r1,所以我在下载的时候可以制定对应的TAG。 这很有用,因为下载的代码更少,下载速度会更快; 不方便的一点是更新不方便。 Google会定期发送电子邮件告诉您发布了哪些新标签。 您可以根据此更新代码
1
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.0.0_r3
1.5 第5步:同步代码
上面第3步只是下载了.repo文件,具体代码还需要执行reposync来下载。由于镜像站点的限制以及下载过程中可能遇到的问题,建议您使用- j4下载
1
repo sync -j4
然后就开始了漫长的下载。 由于下载过程中可能会出现失败,所以可以做一个sh步骤循环下载,一醒就下载完成。
1
2
3
4
5
6
7
8
repo sync -j4
while [ $? -ne 0 ]
do
echo "======sync failed ,re-sync again======"
sleep 3
repo sync -j4
done
具体方式
1
2
3
4
touch repo.sh # 1. 创建 repo.sh 文件
vim repo.sh # 2. 复制上面的脚本内容到 repo.sh 里面,这里你可以使用你自己喜欢的方法打开并修改文件,比如 vscode
chmod a+x repo.sh #3. 修改权限
./repo.sh # 4. 运行脚本,万事大吉
2.驱动下载
代码下载下来后,我们并不急于编译。 如果我们想在真机上运行,就需要从厂家下载一些闭源的驱动文件,这样后续编译出来的代码才能搬到真机上。
上面下载代码的时候我们谈到了两种形式,直接下载和下载特定Tag,不同的下载形式对应不同的驱动
2.1 直接下载形式对应的驱动程序
直接下载的代码使用master分支,驱动需要在这里下载
以我的pixel 3 XL为例,我需要下载的驱动程序是
点击Link下载两个文件,然后解压到代码根目录,然后执行sh脚本将驱动发布到合适的位置。 二进制文件及其相应的 makefile 将安装在源树的供应商/层次结构中
2.2 下载特定Tag代码对应的驱动
如果下载时加了-b,那么需要检查相应标签对应的驱动,地址如下:
以我的pixel 3 XL为例,下载的TAG是android-12.0.0_r3(repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.0.0_r3)
然后我们需要找到下面的部分,其中SP1A.210812.016.A1对应的是前面的4.2节,即Tag android-12.0.0_r3对应的Build ID是SP1A.210812.016.A1。可以找到对应的Build ID根据你下载的TAG,然后根据Build ID找到对应的驱动
对应4.2节下载的Tag:
2.3 驱动提取
下载的内容解压后,有两个sh文件。 以我的Pixel 3 XL为例,在代码根目录执行,使用D向上翻页,最后自动输入I ACCEPT
1
2
# 解压缩 extract-google_devices-crosshatch.sh
./extract-google_devices-crosshatch.sh
1
2
# 解压缩 ./extract-qcom-crosshatch.sh
./extract-qcom-crosshatch.sh
3. 代码编译
下载完代码和驱动后,就可以开始编译代码了。 由于新版本不再支持Mac编译,建议大家仍然使用Linux进行编译,推荐使用Ubuntu。
3.1 设置编译环境
参考:
在Ubuntu 18.04以上直接运行:
1
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
3.2 设置代码编译环境
每次关闭Shell都需要重新执行以下脚本,相当于配置了编译环境
1
source build/envsetup.sh
或者
1
. build/envsetup.sh
3.3 选择编译目标
1
lunch
吃完午饭后,会有一堆设备供你选择。 以我的 Pixel 3 XL 为例,它的代号是,in
Pixel 3 XL对应的代号是:crosshatch
所以我选择编译aosp_crosshatch-userdebug,这里可以输入数字或者直接输入aosp_crosshatch-userdebug
然后脚本会进行一系列配置并输出以下内容
3.4 编译全部
使用 m 来构建一切。 m 可以使用-jN 参数来处理并行任务。 如果您不提供 -j 参数,构建系统将手动选择您认为最适合您的系统的并行任务计数。
1
m
如上所述,您可以通过在 m 命令行上列出特定模块的名称来构建特定模块,而不是构建完整的设备映像。 此外,m还提供了一些用于各种特殊用途的伪目标。 这里有些例子:
droid - m droid 是一个普通版本。 该目标位于此处是因为默认目标需要名称。 all - m all 将构建 m droid 构建的所有内容,以及不包含 droid 标签的所有内容。 构建服务器运行此命令以确保构建包含 Android.mk 文件的树中包含的所有元素。 m - 从树的底部运行构建系统。 这很有用,因为您可以在子目录中运行 make。 如果设置了 TOP 环境变量,它将使用该变量。 如果不设置此变量,它将从当前目录中查找相应的树,试图找到树的顶层。 您可以通过运行不带参数的 m 来构建整个源代码树,也可以通过指定相应的名称来构建特定的目标。 mma - 在当前目录中构建所有模块及其依赖项。 mmma - 在提供的目录中构建所有模块及其依赖项。 croot - cd 到树的底部。 clean - m clean 将删除此配置的所有输出和中间文件。 这与 rm -rf out/ 相同。
运行 m help 查看 m 提供的其他命令
输入m后,第一次开始所有编译,等待时间较长,编译时间取决于你的笔记本配置...主要是cpu和显存,建议从32G显存开始,cpu不要太软
编译成功后会有如下输出
4、闪光灯
使用自己编译的UserDebug固件进行Debug,无论是Debug Framework还是Appandroid源码编译模块,都非常方便
编译完成后,开始救砖,以我的测试机Pixel 3 XL为例,依次执行以下命令
1
2
3
4
5
6
7
adb reboot fastboot
# 等待手机进入 fastboot 界面之后
fastboot flashall -w
# 刷机完成之后,执行 fastboot reboot 长期系统即可
fastboot reboot
刷机截图如下
之后手机会手动重启,然后进入主界面。 至此,我们的代码下载-编译-烧写就结束了。
自编译的AOSP Launcher比较丑陋,因为没有这些Google闭源包的支持,它看起来仍然很寒酸,内置的应用程序很少,而且基本没有维护。 这就是给予手机厂商的。
官方 Pixel Launcher 看起来仍然不错(由 Google 开发和维护)
如果在救砖过程中遇到问题,可以使用官方刷机包进行救砖:
5. 结束
本文主要讲如何下载、编译、烧录,以及后续代码导出、修改编译模块、代码Debug等,将在另一篇文章中介绍
关于我&&关于我的博客,我非常希望与您交流,共同进步。 博客内容导航,优秀博客文章记录——Android性能优化必知
一个人可以走得更快,一群人可以走得更远