# ffmpeg_rkmpp_drm **Repository Path**: DevilcLo/ffmpeg_rkmpp_drm ## Basic Information - **Project Name**: ffmpeg_rkmpp_drm - **Description**: 使用ffmpeg中rkmpp 硬解码插件解出来DRM_PRIME格式数据,然后使用DRM框架直接渲染显示。 - **Primary Language**: C/C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2025-04-09 - **Last Updated**: 2025-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1.项目介绍 **板子**:正点原子**RK3588**开发板 **SDK**:正点原子官方提供,[正点原子RK3588开发板 — 正点原子资料下载中心 1.0.0 文档](http://47.111.11.73/docs/boards/arm-linux/RK3588Linux.html?highlight=rk3588) **交叉工具编译链**:gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu **编程语言**:c/c++ **cmake**: 3.22.1 **os**:ubuntu22.04(wsl2) 本项目是在**PC**上搭建交叉编译环境进行编译最后将程序部署在板子端,功能为:应用层使用ffmpeg+rkmpp插件对h.264格式的mp4进行硬解码,然后将得到的AV_PIX_FMT_DRM_PRIME格式帧使用DRM框架进行渲染显示。 题外话,市面上流行的共有三套方案: (1)ffmpeg使用CPU进行软解,占用cpu资源高,但是稳定; (2)ffmpeg进行解封装,然后使用瑞芯微提供的mpp框架进行硬解码; (3)ffmpeg+rkmpp硬解码。 其实2跟3的原理是差不多,只是3把官方的mpp杂糅进了ffmpeg里面。经过实测下来方案三在稳定性上更胜一筹,并且使用流程和ffmpeg一致,基本没有再学习成本。 # 2.项目文件架构介绍 ``` ├───3rd :使用的第三模块,包括mpp、DRM、ffmpeg、x264、opencv、 | ├───install/ :交叉编译生成的头文件和库 | ├───source/ :第三模块的源代码 ├───example :参考代码,大部分是单独模块的实现和测试 | ├──drm-howto/ :DRM的原子操作示例 | ├──drm-test/ :DRM的测试 | ├─── drm_atomic_ctrc.c :最简单的DRM 原子操作,不使用plane,使单颜色铺满屏幕 | ├─── drm_atomic_plane.c:使用plane的DRM原子操作,使单颜色铺满屏幕 | ├─── drm_atomic_jpg.c:使用opencv和plane显示一张jpg图片到屏幕上 | ├─── drm_test.c : 不使用原子操作,用最原始的方式(已过时)使用DRM框架显示彩色方块 | ├──ffmpeg_player/ :ffmpeg+sdl2实现最简单的播放视频,想**了解使用ffmpeg流程**的可以查阅 ├───source:项目的DRM显示和ffmpeg解码渲染源代码,也是**最关键**的代码 | ├───drmDisplay.cpp:DRM相关的操作和对象 | ├───drmDisplay.h | ├───ffmpegPlayer.cpp:ffmpeg相关的操作和对象 | ├───ffmpegPlayer.h ├───toolchain:交叉编译工具链放置地点 ├───main.cpp:程序的入口函数 ... ``` # 3.使用说明 由于gitee对个人用户git-lfs有限制不能上传大文件,所以交叉编译工具链无法上传,不过大家的板子不一样,SDK不一样,使用的编译链也不一样,就算上传了用处也不大hhh。所以程序要运用到各自的板子上的话要**重新配置交叉编译工具链**,使用你们的交叉工具链重新编译对应模块,再编译链接成可执行程序。 (1) 拉取源码 ```bash git clone https://gitee.com/freecry039/ffmpeg_rkmpp_drm.git cd ./ffmpeg_rkmpp_drm ``` (2) 更新子模块,获取第三方官方库 ```bash git submodule update --init --recursive ``` (3) 重新编译第三方库: ​ 参考项目根目录下的 /path/to/ffmpeg-rkmpp-drm/docs/ffmpeg_rkmpp_drm.md (4) 创建build目录编译生成对应的执行文件 ```bash mkdir ./build cd ./build cmake .. make -j36 ``` (5)在项目根目录下会出现bin目录,里面会生成main.exe执行程序,/path/to/ffmpeg_rkmpp_drm/bin/main/.exe,将其使用u盘或者frp等拉取到板子上运行即可。