瑞芯微RK3568平台FFmpeg硬件编解码移植及性能测试实战攻略

本文介绍瑞芯微RK3568平台,FFmpeg硬件编解码移植及性能测试方法。

FFmpeg简介与实测数据

  • FFmpeg简介

FFmpeg是一套多媒体框架,能够解码、编码、转码、复用、解复用、流、过滤和播放数字音频、视频,提供了录制、转换以及流化音视频的完整解决方案。

  • 实测数据

(1)2K视频编解码,视频文件大小为103MB

硬件解码+编码数据:

软件解码+编码数据:

(2)4K视频编解码,视频文件大小为128MB

硬件解码+编码数据:

软件解码+编码数据:

交叉编译与移植FFmpeg

操作之前需要压缩rootfs和挂载rootfs文件系统,操作细节可关注触觉智能CSDN留言获取。完成操作后,在PC端虚拟机里面进行交叉编译与移植。

(1)进入FFmpeg源码目录:

复制代码
cd ffmpeg-rockchip

(2)设置pkgconfig 环境变量:

复制代码
export PKG_CONFIG_SYSROOT_DIR=/opt/sysroot_rk3568_ubuntu2004/
export PKG_CONFIG_PATH=/opt/sysroot_rk3568_ubuntu2004/usr/lib/aarch64-linux-gnu/pkgconfig

(3)创建install目录:

复制代码
mkdir install

(4)新建configure_rk3568.sh 配置文件并写入:

复制代码
mkdir configure_rk3568.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/gcc-arm-9.2-2019.12-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_rk3568_ubuntu2004/ \
  --extra-cflags="-I/opt/sysroot_rk3568_ubuntu2004/usr/include/aarch64-linux-gnu" \
  --extra-ldflags="-B/opt/sysroot_rk3568_ubuntu2004/usr/lib/aarch64-linux-gnu -Wl,-rpath-link=/opt/sysroot_rk3568_ubuntu2004/usr/lib/aarch64-linux-gnu"

gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu工具下载

地址:

https://developer.arm.com/downloads/-/gnu-a

(5)编译配置文件:

复制代码
./configure_rk3568.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
│   ├── libpostproc.a
│   ├── libpostproc.so -> libpostproc.so.58.3.100
│   ├── libpostproc.so.58 -> libpostproc.so.58.3.100
│   ├── libpostproc.so.58.3.100
│   ├── libswresample.a
│   ├── libswresample.so -> libswresample.so.5.3.100
│   ├── libswresample.so.5 -> libswresample.so.5.3.100
│   ├── libswresample.so.5.3.100
│   ├── libswscale.a
│   ├── libswscale.so -> libswscale.so.8.3.100
│   ├── libswscale.so.8 -> libswscale.so.8.3.100
│   ├── libswscale.so.8.3.100
│   └── pkgconfig
└── share
    ├── doc
    ├── ffmpeg
    └── man

(9)将install 目录打包:

复制代码
cd install
tar -cvf ffmpeg_install.tar ./*

(10)另外将ffmpeg编译生成文件拷贝到

/opt/ffmpeg_rk3568_ubuntu20/,用于交叉编译应用程序:​​​​​​​

复制代码
sudo mkdir -p /opt/ffmpeg_rk3568_ubuntu20/
sudo cp ./* /opt/ffmpeg_rk3568_ubuntu20/ -rf
  • 移植至主板端(以下操作在主板端进行)

(1)卸载主板默认的 ffmpeg:

复制代码
sudo dpkg -r ffmpeg

(2)将刚才打包的ffmpeg_install.tar拷贝到主板上解压:​​​​​​​

复制代码
sudo mkdir /usr/local/ffmpeg
sudo tar -xvf ffmpeg_install.tar -C /usr/local/ffmpeg/

(3)设置环境变量,在/home/industio/.bashrc文件末尾增加代码:​​​​​​​

复制代码
export PATH=/usr/local/ffmpeg/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH

(4)执行生效:

复制代码
source /home/industio/.bashrc

编解码测试

  • 测试常见命令(以下操作在主板端进行)

(1)测试时,需要主板端开启性能模式,且主板接上散热片,开启性能模式指令:

复制代码
echo performance | tee $(find /sys/ -name *governor);

(2)测试时查看CPU使用率:

复制代码
top -d 1

(3)测试时查看VPU使用率:

复制代码
cat /proc/mpp_service/sessions-summary
  • 解码测试

(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

至此,RK3568 FFmpeg的移植和测试教程已完成,触觉智能还有RK系列RK3562、RK3576、RK3588合计的FFmpeg测试对比,可关注触觉智能CSDN往期文章查看。

相关推荐
源之缘-OFD先行者20 小时前
全栈开发实战:WPF+FFmpeg+GIS,打造工业级雷达探测终端
ffmpeg·wpf
MediaTea21 小时前
FFmpeg 8 使用指南
ffmpeg
MediaTea21 小时前
FFmpeg 8 命令参数详解
ffmpeg
Lueeee.1 天前
FFMPEG输出模块初始化
linux·ffmpeg
neardi临滴科技1 天前
Neardi Pi 4-3588:开启 8K 极速智能,赋能企业级边缘计算新时代
人工智能·嵌入式硬件·边缘计算·rk3588·开发板
Lueeee.1 天前
FFMPEG核心结构体
linux·ffmpeg
ShiMetaPi1 天前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 05 蓝牙
arm开发·fpga开发·fpga·rk3568
源之缘-专注WPF开发2 天前
全栈开发实战:WPF+FFmpeg+GIS,打造工业级雷达探测终端
ffmpeg·wpf·gis
Everbrilliant892 天前
FFmpeg解码OpenSL、ANativeWindow播放实现音视频同步
ffmpeg·音视频·opensl音视频同步播放·音视频同步播放·唇音同步·音视频时钟漂移·播放时钟同步
myzzb2 天前
python调用ffmpeg.exe封装装饰类调用
python·学习·ffmpeg·开发