============================================================
一、工程开发基础
============================================================
[ ] 01. CMake 与工程构建
学习内容:
– 多文件工程组织:.h、.cpp、模块划分
– CMakeLists.txt、子目录和目标管理
– target_include_directories()、target_link_libraries()
– 静态库 .a、动态库 .so
– GCC/G++ 编译和链接过程
– 头文件搜索路径、库文件搜索路径
– Makefile 基础与第三方库集成
验收标准:
– 从零创建一个多模块工程
– 链接第三方库
– 能独立排查编译错误和链接错误
[ ] 02. Git 版本管理
学习内容:
– git init、add、commit、log、diff
– branch、merge、rebase 的基本使用
– .gitignore、冲突处理、回退与恢复
– 合理的提交记录与分支管理
验收标准:
– 能管理项目分支
– 能解决一次合并冲突
– 能恢复误修改的文件
[ ] 03. Linux 命令行与系统排错
学习内容:
– 文件与文本处理:find、grep、sed、awk
– 进程管理:ps、top、kill
– 磁盘与内存:df、du、free
– 日志:dmesg、journalctl(取决于系统)
– 程序检查:file、readelf、ldd
– 权限、环境变量、软链接、信号
验收标准:
– 能排查程序无法启动、动态库缺失、权限错误
– 能检查进程和系统资源占用
============================================================
二、C/C++ 工程质量与系统编程
============================================================
[ ] 04. RAII 与资源生命周期管理
学习内容:
– 栈、堆、指针和对象生命周期
– 构造、析构、拷贝和移动语义
– std::unique_ptr、std::shared_ptr
– 文件描述符、锁、内存和媒体资源的自动释放
– 异常安全与资源所有权
验收标准:
– 封装一个文件描述符类
– 保证正常返回或异常退出时资源都能正确释放
[ ] 05. 调试与内存错误检测
学习内容:
– GDB:断点、单步、调用栈、变量检查、线程调试
– AddressSanitizer:越界、释放后使用等问题
– UndefinedBehaviorSanitizer:未定义行为
– Valgrind:适用环境下的内存错误检查
– core dump、崩溃堆栈和日志定位
验收标准:
– 复现、定位并修复段错误
– 定位内存错误并解释原因
[ ] 06. Linux 系统调用与设备访问
学习内容:
– open、read、write、close
– 文件描述符、fcntl、ioctl、mmap
– 信号处理、错误码与系统调用返回值
– 串口、设备节点、/proc、/sys
– 应用程序、设备驱动与内核之间的关系
验收标准:
– 编写串口收发程序
– 理解应用层通过设备节点访问硬件的基本过程
[ ] 07. 进程管理与进程间通信(IPC)
学习内容:
– fork、exec、waitpid
– 管道、FIFO、共享内存、消息队列
– Unix Domain Socket
– 僵尸进程、孤儿进程
– 多进程与多线程的适用场景
验收标准:
– 编写两个独立进程之间的通信程序
– 正确处理进程退出和通信异常
============================================================
三、并发、网络与工程运行
============================================================
[ ] 08. 多线程与并发编程
学习内容:
– pthread_create、pthread_join
– 互斥锁、条件变量、读写锁、信号量
– 生产者—消费者模型
– 线程安全、竞态条件、死锁
– 有界队列、线程池、线程退出和资源回收
验收标准:
– 实现线程安全的有界任务队列
– 支持多个生产者和消费者
– 能正确停止线程并释放资源
[ ] 09. TCP/UDP 网络编程
学习内容:
– Socket 的创建、连接、收发和关闭
– TCP 字节流、部分读写、应用层消息边界
– UDP 数据报与丢包处理
– select、poll、epoll
– 非阻塞 I/O、超时、心跳、断线重连
– 缓冲区、背压与异常处理
验收标准:
– 独立实现多客户端 TCP 服务端
– 处理客户端异常断开
– 处理粘包、拆包和连接恢复
[ ] 10. 日志与配置管理
学习内容:
– 日志级别、时间戳、线程信息
– 配置文件解析与参数校验
– 错误码、异常信息与日志轮转
– 避免日志阻塞业务线程
– 配置、业务逻辑与硬编码参数分离
验收标准:
– 通过配置文件设置端口、线程数、超时时间
– 输出便于定位问题的日志
[ ] 11. 性能分析与稳定性测试
学习内容:
– perf、strace、pidstat、vmstat
– CPU、内存、线程数、文件描述符监控
– 吞吐量、延迟、队列长度
– 长时间运行、异常输入、故障注入
– 性能瓶颈分析与优化前后对比
验收标准:
– 能设计测试并记录数据
– 能解释一个真实的性能瓶颈或稳定性问题
============================================================
四、嵌入式 Linux 平台与部署
============================================================
[ ] 12. ARM 交叉编译与依赖管理
学习内容:
– 交叉编译工具链与目标架构
– sysroot、头文件和库文件
– ABI、动态链接器与运行时依赖
– CMake Toolchain File
– 静态库、动态库和第三方依赖的目标平台适配
验收标准:
– 将包含第三方库的 C++ 工程交叉编译到目标板
– 排查架构、链接和 ABI 问题
[ ] 13. 开发板部署与进程运行管理
学习内容:
– SSH、scp、rsync
– 环境变量与动态库路径
– systemd 或 BusyBox init
– 开机启动、进程守护和日志保存
– 程序升级、配置管理和版本回退
验收标准:
– 应用能在目标板上按要求自动启动
– 能记录日志,并按设计进行故障恢复
============================================================
五、RK3568/RK3588 音视频方向
============================================================
[ ] 14. FFmpeg 与音视频基础
学习内容:
– 容器、编码格式、压缩码流
– AVFormatContext、AVPacket、AVFrame
– 解封装、解码、像素格式
– PTS、DTS、时间基
– 音视频数据的缓冲与资源管理
验收标准:
– 使用 FFmpeg API 编写文件解封装与解码程序
[ ] 15. RTSP 网络视频接入
学习内容:
– RTSP 会话与 RTP 媒体传输基础
– 使用 FFmpeg 拉流
– TCP/UDP 传输方式
– 超时、断流检测和自动重连
– 多路流管理、有界队列与帧率统计
验收标准:
– 实现至少两路 RTSP 拉流
– 支持断线恢复
– 记录延迟和帧率
[ ] 16. Rockchip MPP 硬件编解码
学习内容:
– MPP API 与官方 Demo
– 硬件解码输入输出流程
– 解码帧、stride、像素格式
– 缓冲区生命周期与内存拷贝
– 软件解码和硬件解码的性能比较
验收标准:
– 在 RK 开发板上运行硬件解码程序
– 输出可信的性能测试数据
[ ] 17. Rockchip RGA 图像处理加速
学习内容:
– 图像缩放、裁剪、旋转
– RGB、NV12 等像素格式转换
– 输入输出缓冲区与对齐
– CPU 图像处理与 RGA 对比
– 与 MPP 解码输出的衔接
验收标准:
– 完成图像处理 Demo
– 验证输出正确性
– 测量处理耗时和 CPU 占用
============================================================
六、建议学习顺序(10~12 周参考计划)
============================================================
第 1~2 周:工程基础
– CMake、Git、Linux 命令行
– RAII、GDB、ASan
– 产出:规范的多文件 C++ 工程,具备调试和内存排错能力
第 3~4 周:系统编程
– 系统调用、进程管理、IPC、多线程与同步
– 产出:线程安全任务队列和进程间通信程序
第 5~6 周:网络与工程运行
– TCP/UDP、epoll、日志配置、性能分析、交叉编译
– 产出:多客户端网络服务端,能够部署到 ARM 板上
第 7~8 周:FFmpeg 与 RTSP
– 文件解码、多路网络拉流、重连和统计
– 产出:可以独立运行的多路视频流管理程序
第 9~12 周:MPP、RGA 与综合项目
– 硬件解码、图像加速、性能测试和稳定性验证
– 产出:可展示、可测试的 RK 音视频项目
说明:这是参考计划。如果某个阶段没有达到验收标准,先补齐再进入下一个阶段。
============================================================
七、最终综合项目建议
============================================================
项目名称(暂定):基于 RK3568/RK3588 的多路 RTSP 视频接入与硬件加速处理系统
建议模块:
– StreamManager:管理多路视频流与连接状态
– RtspClient:使用 FFmpeg API 接入 RTSP
– PacketQueue:管理压缩数据、有界缓冲与背压
– Decoder:抽象解码接口,支持软件与 MPP 后端
– ImageProcessor:CPU/RGA 图像处理
– MetricsCollector:统计 FPS、延迟、CPU、内存与重连耗时
– Logger:输出连接、解码与异常处理日志
项目验收:
[ ] 至少接入 2 路 RTSP 视频流
[ ] 支持软件解码与 MPP 硬件解码对比
[ ] 支持 RGA 图像处理与 CPU 对照实现
[ ] 单路流故障不会导致其他流退出
[ ] 服务端恢复后能够自动重连
[ ] 队列有固定容量上限
[ ] 记录 FPS、CPU、内存、队列长度
[ ] 记录重连耗时和丢帧数量
[ ] 明确区分处理耗时与端到端延迟
[ ] 连续运行至少 2 小时并记录异常与资源变化
[ ] 提供构建、部署、测试说明和性能报告
性能测试建议:
– 软件解码与硬件解码使用相同输入、分辨率、帧率、运行时间和输出条件
– 记录软件版本、驱动版本与环境配置
– 不预先承诺固定路数或性能数字,以实测数据为准
– 解释性能瓶颈,以及优化前后数据变化
============================================================
八、官方资料入口
============================================================
FFmpeg 文档:
https://ffmpeg.org/documentation.html
FFmpeg 协议文档:
https://www.ffmpeg.org/ffmpeg-protocols.html
Rockchip MPP GitHub:
https://github.com/rockchip-linux/mpp
MPP 中文开发指南:
https://github.com/rockchip-linux/mpp/blob/develop/doc/Rockchip_Developer_Guide_MPP_CN.md
Rockchip RGA GitHub:
https://github.com/airockchip/librga
RGA 文档目录:
https://github.com/airockchip/librga/tree/main/docs
============================================================
学习原则
============================================================
1. 前 13 项构成通用嵌入式 Linux 应用开发能力,后 4 项是 RK 音视频方向。
2. 不要只背技术名词;每项尽量完成一个可运行的小项目。
3. 遇到错误时,练习复现、定位、修复并记录原因。
4. 项目性能必须通过测试数据证明,不要凭感觉声称优化有效。
5. 优先把通用基础练扎实,再集成 FFmpeg、RTSP、MPP、RGA。


