02.FFMPEG的安装和添加硬件加速自编译

说一个极其郁闷的事情,就在昨天收到3399的一块板子后,往电脑上面一插,然后悲剧的事情就发生了,我的电脑蓝屏重启了,这下好了,我写到一半的帖子也不见了,我的SSH里面的记录全部消失了,最关键的是SSH还没有退出,所以查询bash_history都查询不到,无语泪凝咽。所以,又重新刷机,然后重新整理思路,还得按照以前的步骤再来一遍,不过以前的不少弯路肯定是可以避免的了!

上次聊到刷机后已经成功通过SSH连接到板子了,先来看一下板子的内核吧,输入uname -a可以看到Linux yy3568-alip 4.19.232 #18 SMP Mon Jul 24 09:57:48 CST 2023 aarch64 GNU/Linux板子的内核是4.19的,通过cat /etc/issue可以看到Debian 10的系统,4.19的内核好像有点旧了,但是之后有个地方恰好就需要4版本的内核,这个先埋个伏笔。那么接下来我们的目标是做一个音视频处理设备,就要进行选择使用什么库来进行音视频处理,总不可能直接从底层一步一步来,我选择的是使用FFMPEG,所以需要先把FFMPEG安装起来!

一、APT形式安装FFMPEG

使用Debian系统的最大好处就是安装软件十分方便,我喜欢Debian的最主要的一个原因就在于此,首先看看软件源,通过cat /etc/apt/source.list进行查看,可以看到官方已经很贴心的切换到国内的网易源了,那就直接sudo apt update更新软件源吧,更新后再使用sudo apt upgrade进行软件升级,最后稍等一会儿就可以升级完成了。那么接下来就要使用APT的方式安装FFMPEG,但是,不建议你用这种方式,可以继续往下看,但别跟着来。直接一句sudo apt install ffmpeg,然后进行等待安装完成后,我们来看一下ffmpeg的信息,输入ffmpeg -version,截图如下:

可以看到版本号是4.1.11,版本号的高低倒是无所谓,关键是我们无法看到RK的硬编,那么接下来我们看一下ffmpeg的264编码器可以使用的有哪些?使用ffmpeg -encoders | grep 264

可以看到有5个编码器,前2个是软件编码器,后面3个是硬件编码器,但是很明显也不是RK的硬编,保险起见进行尝试调用,结果如我们的预期一致,全部失败!

所以现在只能将ffmpeg进行卸载了。使用sudo apt remove ffmpeg进行卸载。

二、下载源码进行编译

每次说到下载源码进行编译,总是让人恐惧,不由想起当年在大学的时候,树莓派2才刚出来,ARM板子的性能还在几百Mhz,所以必须要使用交叉编译来进行,不过对于RK3568来讲就完全没有这个烦恼了,直接在板子上面编译也是很快的。

1.安装GCC和G++

说了要自己编译,那么首先肯定第一步就是要安装编译器,编译器的安装是很简单的。

sudo apt install gcc g++ make

在安装好编译器后,接下来还不可以编译FFMPEG,而是要先编译一些别的库,比如支持软解软编的x264和RK的硬件加速。

2.编译RKMPP

cd
git clone https://github.com/rockchip-linux/mpp
cd mpp/build/linux/aarch64
bash make-Makefiles.bash
make -j4
sudo make install

在编译RKMPP的时候,需要注意一下内核版本最好是Linux4的,这一点在RKMPP的手册中有提到,所以咱们板子正好4.19的内核,非常符合这个要求!

3.编译x264

cd
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix=/usr/local/x264 --disable-opencl --enable-static --enable-shared
make -j4
sudo  make install

4.编译libdrm

cd
wget https://dri.freedesktop.org/libdrm/libdrm-2.4.89.tar.bz2
tar -jxvf libdrm-2.4.89.tar.bz2
cd libdrm-2.4.89
./configure --prefix=/usr/local/libdrm --host=aarch64-linux-gnu
make -j4
sudo make install

5.编译ffmpeg

去官网查了一下,目前FFMPEG的最新版本是6.0,那就它吧。

cd
wget https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz
sudo apt install xz-utils
xz -d ffmpeg-6.0.tar.xz
tar -xvf ffmpeg-6.0.tar
cd ffmpeg-6.0
export PKG_CONFIG_PATH=/usr/local/x264/lib/pkgconfig
./configure --prefix=/usr/local/ffmpeg --enable-version3 --enable-libdrm --enable-rkmpp --enable-libx264 --enable-nonfree --enable-gpl
make -j4
sudo make install

然后接下来使用sudo vim /etc/ld.so.conf命令,在最后一行加入x264,/usr/local/x264/lib,完成以后的ld.so.conf文件如下所示:

最后执行命令sudo ldconfig,然后我们看一下ffmpeg,/usr/local/ffmpeg/bin/ffmpeg -version,可以看到ffmpeg的版本是6.0,rkmpp和x264都已经启用了,就OK了!

当然,这里也可以把ffmpeg的命令添加到PATH里,这里就不多做叙述了。

接下来我们分别看看现在ffmpeg的解码和编码!

输入:/usr/local/ffmpeg/bin/ffmpeg -decoders | grep '264'

可以看到h264_rkmpp的解码器已经存在了,接下来看看编码器!

嗯,怎么没有出现rkmpp的编码器呢,其实是因为协议的问题,所以导致ffmpeg并不支持rkmpp的编码器,至少原版6.0的ffmpeg是不支持的,现在github上面有了一个支持RKMPP的ffmpeg版本,但是我就不去编译了,而我们使用的版本,如果直接使用ffmpeg进行硬件加速解码进行转码,也是不可以的,因为rkmpp解码器输出的是DRM帧,所以从下一篇开始就要正式进入使用RKMPP和FFMPEG进行RTMP上传啦。

相关推荐
叫我龙翔29 分钟前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
小诸葛的博客30 分钟前
Ubuntu如何如何安装tcpdump
linux·ubuntu·tcpdump
S hh1 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
康熙38bdc2 小时前
Linux 进程优先级
linux·运维·服务器
hhzz3 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂3 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫3 小时前
linux基础命令
linux·运维·服务器
cuisidong19974 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒4 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
南种北李4 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化