当前位置: 首页 > news >正文

编译支持 RKmpp 和 RGA 的 ffmpeg 源码

一、前言

        RK3588 支持VPU硬件解码,需要rkmpp进行调用;支持2D图像加速,需要 RGA 进行调用。

        这两个库均能通过 ffmpeg-rockchip 进行间接调用,编译时需要开启对应的功能。

二、依赖安装

        编译ffmpeg前需要编译 rkmpp 和 RGA,我尝试直接调用板端的库,ffmpeg 编译可以通过,但是使用 rkmpp 解码时会导致段错误,debug 发现是库调用相关的报错,应该是版本差距较大,所以建议下载最新的 rkmpp 和 RGA 进行编译。

1、编译RKmpp

源码来自大佬的GitHub:

https://github.com/nyanmisaka

git clone -b jellyfin-mpp --depth=1 https://github.com/nyanmisaka/mpp.git rkmpp
cd rkmmp
mkdir install
cmake . \
    -DCMAKE_INSTALL_PREFIX=$PWD/install \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_TEST=OFF
    
make -j $(nproc)
make install

我个人喜欢将编译后的库与板端隔离,防止破坏系统库的依赖,所以安装到当前 install 目录下。配置参数与源码的 WIKI 保持一致,省去了 pushd 指令。

2、编译RGA

编译 RGA 需要用到 meson 和 ninja,如果没有,可以直接安装:

sudo apt-get install meson
sudo apt install ninja-build

如果想编译 ninja 的最新源码,我这里也提供方法:

git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap
(optional) cp ninja /usr/bin

编译 RGA:

git clone -b jellyfin-rga --depth=1 https://github.com/nyanmisaka/rk-mirrors.git rkrga
cd rkrga
mkdir install rkrga_build
# . 源代码目录,rkrga_build 是构建目录
meson setup . rkrga_build \
    --prefix=$PWD/install \
    --libdir=lib \
    --buildtype=release \
    --default-library=shared \
    -Dcpp_args=-fpermissive \
    -Dlibdrm=false \
    -Dlibrga_demo=false
meson configure rkrga_build
ninja -C rkrga_build install

源码也是出自 nyanmisaka 大佬。大佬的 WIKI 在源码的父目录进行编译,我这里改成了在源码下编译,看个人喜好。

3、编译 ffmpeg

git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg
mkdir install
./configure --prefix=$PWD/install --enable-gpl --enable-version3 \
--enable-libdrm --enable-rkmpp --enable-rkrga \
--extra-cflags="-I$(pwd)/../rkmpp/install/include/rockchip -I$(pwd)/../rkrga/install/include/rga" \
--extra-ldflags="-L$(pwd)/../rkmpp/install/lib -L$(pwd)/../rkrga/install/lib -Wl,-rpath,$(pwd)/../rkmpp/install/lib:$(pwd)/../rkrga/install/lib -lrockchip_mpp -lrga"

make -j $(nproc)
make install

        这里我主要是增加了动态库和头文件的搜索路径,指定为刚刚编译的 RKmpp 和 RGA。另外使用-Wl,-rpath指定了运行时库的搜索路径,防止使用系统的库。

三、验证

        (1)在 ffmpeg 源码目录下,查看编译后的支持情况:

./ffmpeg -decoders | grep rkmpp # 查看是否有 rk 的解码器
./ffmpeg -encoders | grep rkmpp # 查看是否有 rk 的编码器
./ffmpeg -filters | grep rkrga # 查看是否有 rk 的 rga

输出分别为:

V..... av1_rkmpp            Rockchip MPP (Media Process Platform) AV1 decoder (codec av1)
 V..... h263_rkmpp           Rockchip MPP (Media Process Platform) H263 decoder (codec h263)
 V..... h264_rkmpp           Rockchip MPP (Media Process Platform) H264 decoder (codec h264)
 V..... hevc_rkmpp           Rockchip MPP (Media Process Platform) HEVC decoder (codec hevc)
 V..... mpeg1_rkmpp          Rockchip MPP (Media Process Platform) MPEG1VIDEO decoder (codec mpeg1video)
 V..... mpeg2_rkmpp          Rockchip MPP (Media Process Platform) MPEG2VIDEO decoder (codec mpeg2video)
 V..... mpeg4_rkmpp          Rockchip MPP (Media Process Platform) MPEG4 decoder (codec mpeg4)
 V..... vp8_rkmpp            Rockchip MPP (Media Process Platform) VP8 decoder (codec vp8)
 V..... vp9_rkmpp            Rockchip MPP (Media Process Platform) VP9 decoder (codec vp9)
V..... h264_rkmpp           Rockchip MPP (Media Process Platform) H264 encoder (codec h264)
 V..... hevc_rkmpp           Rockchip MPP (Media Process Platform) HEVC encoder (codec hevc)
 V..... mjpeg_rkmpp          Rockchip MPP (Media Process Platform) MJPEG encoder (codec mjpeg)
 ... overlay_rkrga     VV->V      Rockchip RGA (2D Raster Graphic Acceleration) video compositor
 ... scale_rkrga       V->V       Rockchip RGA (2D Raster Graphic Acceleration) video resizer and format converter
 ... vpp_rkrga         V->V       Rockchip RGA (2D Raster Graphic Acceleration) video post-process (scale/crop/transpose)

        (2)如果有视频文件,可以执行以下指令测试硬件解码:

./ffmpeg -c:v h264_rkmpp -i 720p60hz.mp4 -f null -

在 Stream mapping 部分可以查看使用的解码方式,输出为(h264_rkmpp)。

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (h264_rkmpp) -> wrapped_avframe (native))
  Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))

        (3)测试 RGA 需要初始化硬件设备,不能只设置过滤器。

ffmpeg -init_hw_device rkmpp=hw -filter_hw_device hw \
-c:v h264_rkmpp -i 720p60hz.mp4 \
-vf "hwupload,scale_rkrga=w=1920:h=1080:format=nv12" \
-f null -

-init_hw_device rkmpp=hw 初始化一个名为hw的 RKMPP 硬件设备;

-filter_hw_device hw指定过滤器链使用之前初始化的硬件设备hw;

-vf hwupload,scale_rkrga=w=1920:h=1080:format=nv12 将输入的视频帧上传到硬件设备(RKMPP),使用 RKMP 提供的 scale_rkrga 过滤器将视频帧缩放到 1920x1080 分辨率,并转换像素格式为 NV12。

相关文章:

  • 【面试】Redis
  • 数据类设计_图片类设计之5_不规则类图形混合算法(前端架构)
  • Git的详细使用方法
  • 【每日学点HarmonyOS Next知识】路由栈问题、图片圆角、颜色资源转十六进制字符串、数据集变化崩溃、组件声明周期
  • Selenium 中的 alert 处理
  • VLAN和Trunk实验
  • 套接字缓冲区以及Net_device
  • Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)
  • 全面解析:将采购入库单数据集成到MySQL的技术实施
  • 大模型LLM基于PEFT的LoRA微调详细步骤---第一篇:模型下载篇
  • Mysql 的事务隔离级别相关问题
  • SealOS部署k8s集群(单节点)
  • 视频推拉流EasyDSS案例分析:互联网直播/点播技术与平台创新应用
  • Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)
  • 【毕业论文格式】word分页符后的标题段前间距消失
  • 面试题:实现学生管理系统
  • kotlin基础知识点汇总
  • 在Eclipse 中使用 MyBatis 进行开发,通常需要以下步骤:
  • UVC摄像头命令推流,推到rv1126里面去
  • MongoDB 数据导出与导入实战指南(附完整命令)
  • 中国纪检监察刊文:力戒形式主义官僚主义关键是要坚持实事求是
  • 征稿启事|澎湃·镜相第三届非虚构写作大赛暨2026第六届七猫现实题材征文大赛
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 李成钢:近期个别经济体实施所谓“对等关税”,严重违反世贸组织规则
  • 奥古斯都时代的历史学家李维
  • 上海锦江乐园摩天轮正在拆除中,预计5月底6月初拆完