瑞芯微RK3576平台FFmpeg硬件编解码移植及性能测试实战攻略
本文介绍瑞芯微RK3576平台,FFmpeg硬件编解码移植及性能测试方法。
FFmpeg简介与实测数据
-
FFmpeg简介
FFmpeg是一套多媒体框架,能够解码、编码、转码、复用、解复用、流、过滤和播放数字音频、视频,提供了录制、转换以及流化音视频的完整解决方案。
-
实测数据
(1)2K视频编解码,视频文件大小为103MB
硬件解码+编码数据:
软件解码+编码数据:
(2)4K视频编解码,视频文件大小为128MB
硬件解码+编码数据:
软件解码+编码数据:
交叉编译与移植FFmpeg
以下操作在PC端虚拟机里面进行
-
下载7.1版本ffmpeg源码:
git clone -b 7.1 --single-branch https://gitee.com/work_public/ffmpeg-rockchip.git
-
交叉编译FFmpeg
(1)进入FFmpeg源码目录:
cd ffmpeg-rockchip
(2)设置pkgconfig 环境变量:
export PKG_CONFIG_SYSROOT_DIR=/sysroot_rk35xx_ubuntu2204/
export PKG_CONFIG_PATH=/sysroot_rk35xx_ubuntu2204/usr/lib/aarch64-linux-gnu/pkgconfig
(3)创建install目录:
mkdir install
(4)执行configure_rk3576.sh 并写入如下参数:
./configure \
--prefix=$(pwd)/install \
--enable-gpl \
--enable-version3 \
--enable-libdrm \
--enable-rkmpp \
--enable-rkrga \
--enable-libv4l2 \
--enable-cross-compile \
--target-os=linux \
--arch=aarch64 \
--cross-prefix=/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu- \
--enable-static \
--enable-shared \
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
--pkg-config=/usr/bin/pkg-config \
--sysroot=/opt/sysroot_rk3576_ubuntu2204/ \
--extra-cflags="-I/opt/sysroot_rk3576_ubuntu2204/usr/include/aarch64-linux-gnu" \
--extra-ldflags="-B/opt/sysroot_rk3576_ubuntu2204/usr/lib/aarch64-linux-gnu -Wl,-rpath-link=/opt/sysroot_rk3576_ubuntu2204/usr/lib/aarch64-linux-gnu"
arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu
工具下载地址:
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads/11-3-rel1
(5)编译配置文件:
./configure_rk3576.sh
(6)开始编译:
make -j8
(7)安装
make install
(8)安装完成后,安装文件保存在install目录:
├── bin
│ ├── ffmpeg
│ ├── ffplay
│ └── ffprobe
├── include
│ ├── libavcodec
│ ├── libavdevice
│ ├── libavfilter
│ ├── libavformat
│ ├── libavutil
│ ├── libpostproc
│ ├── libswresample
│ └── libswscale
├── lib
│ ├── libavcodec.a
│ ├── libavcodec.so -> libavcodec.so.61.19.101
│ ├── libavcodec.so.61 -> libavcodec.so.61.19.101
│ ├── libavcodec.so.61.19.101
│ ├── libavdevice.a
│ ├── libavdevice.so -> libavdevice.so.61.3.100
│ ├── libavdevice.so.61 -> libavdevice.so.61.3.100
│ ├── libavdevice.so.61.3.100
│ ├── libavfilter.a
│ ├── libavfilter.so -> libavfilter.so.10.4.100
│ ├── libavfilter.so.10 -> libavfilter.so.10.4.100
│ ├── libavfilter.so.10.4.100
│ ├── libavformat.a
│ ├── libavformat.so -> libavformat.so.61.7.100
│ ├── libavformat.so.61 -> libavformat.so.61.7.100
│ ├── libavformat.so.61.7.100
│ ├── libavutil.a
│ ├── libavutil.so -> libavutil.so.59.39.100
│ ├── libavutil.so.59 -> libavutil.so.59.39.100
│ ├── libavutil.so.59.39.100
-
移植至主板端(以下操作在主板端进行)
(1)将刚才打包的ffmpeg_install.tar拷贝到主板上解压:
sudo mkdir /usr/local/ffmpeg
sudo tar -xvf ffmpeg_install.tar -C /usr/local/ffmpeg/
(2)设置环境变量,修改/home/industio/.bashrc,在末尾增加:
export PATH=/usr/local/ffmpeg/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH
(3)执行生效:
source /home/industio/.bashrc
编解码测试
-
测试常见命令(以下操作在主板端进行)
(1)测试时,需要主板端开启性能模式,且主板接上风扇散热,开启性能模式指令:
echo performance | tee $(find /sys/ -name *governor);
(2)测试时查看CPU使用率:
top -d 1
-
解码测试
(1)解码1080P的mp4视频
time ffmpeg -stream_loop -1 -hwaccel rkmpp -hwaccel_output_format drm_prime -afbc rga -i ./LG_1080p_60fps.mp4 -an -sn -vframes 5000 -f null -
(2)解码4K(3840*2160)mp4视频:
time ffmpeg -stream_loop -1 -hwaccel rkmpp -hwaccel_output_format drm_prime -afbc rga -i ./LG_2160p_30fps.mp4 -an -sn -vframes 5000 -f null -
-
编码测试
(1)1080P H.264, CQP rate control:
time ffmpeg -f lavfi -i testsrc2=s=1920x1080,format=nv12 -c:v h264_rkmpp -qp_init 26 -profile:v main -level 4.1 -g:v 100 -vframes 5000 -y /tmp/tmp.mp4
(2)2160p H.265, CQP rate control:
time ffmpeg -f lavfi -i testsrc2=s=3840x2160,format=nv12 -c:v hevc_rkmpp -qp_init 26 -profile:v main -level 4.1 -g:v 100 -vframes 5000 -y /tmp/tmp.mp4
至此,RK3576 FFmpeg的移植和测试教程已完成,关注触觉智能,将为您带来RK系列RK3562、RK3568、RK3576、RK3588的FFmpeg测试对比,敬请期待!
演示设备:触觉智能RK3576开发板
触觉智能RK3576鸿蒙开发板
板对板连接器核心板
触觉智能RK3576核心板
邮票孔封装核心板
触觉智能RK3576核心板邮票孔封装版,40.5*40.5mm