本文介紹瑞芯微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