开发历程与版本沿革
依据 opencode 会话记录(12 个会话、3124 条消息、2026-08-11 → 2026-10-22)、
原始工作目录 /root/hd-ws(rtsp / rtsp588 / rtsp568)以及 deploy 目录下的
18 个部署包整理。
1. 项目背景与目录沿革
| 目录 |
说明 |
时间 |
/root/hd-ws/rtsp |
最早版本(RK3588 平台原版拷贝) |
2026-08 前 |
/root/hd-ws/rtsp588 |
中间快照(RK3588 平台) |
2026-08 前 |
/root/hd-ws/rtsp568 |
转 RK3568 后的正式版本(8-11 定为正式版) |
2026-08-11 |
/root/layoutx |
2026-09-04 迁移并修复后的现行开发目录 |
2026-09-04 起 |
项目:多路 RTSP 视频流多画面合成显示系统,运行于 Orange Pi / Rockchip SoC
(RK3568),配合西门子 PLC 点位信号自动切换布局(车间随动监控)。
2. 开发时间线
阶段一 2026-08-11 ~ 08-14(hd-ws/rtsp568):RK3588 转 RK3568 与功能重构
- RK3588 → RK3568 平台迁移:编译、依赖、字体缺失检查与修复
- 移除推理(YOLO/检测器)相关无用功能与资源占用
- 单通道 layout 自动使用主码流逻辑(原配置全为子码流)
- 摄像头离线处理:不再卡死最后一帧 + 自动重连
- PLC 离线右下角红字告警(出现"画面闪"问题后暂撤)
- run_local 本地测试安装脚本;进程残余/CPU/闪/tearing 排查与修复
- 布局系统大改造:多行自适应布局(第一行 N 个、第二行 M 个、按比例占高)、
大/小画面组合(layout0-4:1~3 个大画面 + 其余小画面)、字符占位配置、
总高度撑满、宽高比不变形
- 网格线叠加
- 海康 ISAPI 批量配置摄像头主/子码流(channels_isapi.conf)
- 画面撕裂(tearing)修复
阶段二 2026-08-25:管线优化调研(只读分析)
- 视频管线核心模块(decoder/composer/display)与应用层审计,输出优化点清单
阶段三 2026-09-04 ~ 09-05(layoutx 新目录):部署化准备
- 目录迁移
/root/hd-ws/rtsp568 → /root/layoutx,build.sh 修复、花屏修复
- plc_server.sh 改为前台运行,Ctrl+C 可完全退出全部服务
- 新增
deploy/ 与 pack.sh 一键生成部署包(首次打包 20260904)
- PLC DB 块地址解析与 plc_sim 同步修正
- 自动重启设备功能(日/周周期 + 重启时间,channels.conf 可配)
- 一键部署到新主机脚本(默认 192.168.1.243 / root / 123456)+ README 更新
阶段四 2026-09-05 ~ 10-13:部署实战与网页配置
- 离线依赖问题暴露(现场板子不便联网),依赖安装方案调整
- 部署后标题 logo 缺失修复、PLC 未监听 0.0.0.0 修复
- 上下分割布局落地:第一行 30%(5 路小画面)/第二行 70%(1~3 路,随 PLC 切换,
按宽高比居中放置)
- PLC 规则语义重写(最具体者胜):点位组的"任一触发/全部触发"规则、
无匹配时回退默认布局、恢复后回到默认
- web 配置页面(端口 8080,密码 3730):PLC 地址、摄像头地址、layout、
tsap 参数可视化修改;中文页面;保存格式(等号空格/多余键)修复
- 断线重连机制完善(摄像头掉线/PLC 离线再上线)
- 现场根目录写满事件(kern.log/syslog 各 12G):日志清理与治理结论
- 现场闪屏根治:RGA "MMU unsupported memory larger than 4G" → 输出缓冲改用
system-uncached-dma32 优先分配(其次 cma,再普通内存)
- 无显示器开机只显示桌面修复:display_init 参与等待显示器重试,
HDMI 分配器/录像机切换场景排查,
display: AtomicCommit EINVAL 修复
--hdmi 参数调研后取消,start.sh 还原,不改现场 service
- 紫色画面问题:HDMI RGB 输出
color_format 代码硬编码 display_set_color_format(1)
阶段五 2026-10-13 ~ 10-22:生产板部署与稳定性
- 部署到生产板 216:标题栏字体问题修复、TSAP(西门子 1200)、
PLC 连接状态角标(右上角绿/红)、网页可配 tsap
- 216 / 217 双板部署:完全离线安装(install.sh 依赖自检 ldd+gst-inspect)
- 布局防抖:
plc_debounce_ms(默认 300ms,连续稳定才切换),
修复"点位瞬间触发闪切";网页可配防抖参数
- 网页添加多网段 IP 改走 NetworkManager(nmcli con mod + reapply,
持久化到 /etc/NetworkManager/system-connections/),
替换 ifupdown 旧路径(/etc/network/interfaces)
- systemctl stop 卡 90 秒修复:display_init 等显示器循环增加
g_running
检查,SIGTERM 及时退出(实测 90s → 363ms)
- 安装包内置静态 IP 步骤:给 eth0 追加
192.168.100.245/24(保留 DHCP)
- 画面左下角 IP 角标:显示 eth0 全部 IPv4(每秒刷新),
忘记 IP 时直接从画面读出
- 拔插显示器死机修复(核心修复):根因=启动时按当时显示器模式分配的
NV12 缓冲区(如 1280x720)在拔插后显示器改为首选模式(1920x1080),
drmModeAddFB2(NV12) 用模式尺寸+缓冲区 stride → EINVAL 死循环;
修复:重建时优先选与缓冲区匹配的模式 + plane SRC/CRTC 几何分离(支持缩放)
- 换新显示器仍需重新上电才出原生分辨率(缓冲区只建一次,用户决定保持现状)
3. 部署包(平台版本)沿革
deploy/ 下共 18 个 tar.gz(20260904 → 20261020),关键版本:
| 部署包时间戳 |
二进制 md5 |
主要变化 |
| 20260904_092418 / 093406 |
- |
首批打包(部署化试行) |
| 20260905_003525 / 20260909_045758 |
- |
部署脚本调整 |
| 20261013_080759 / 084753 |
- |
⚠️ 已弃用(紫色画面修复前) |
| 20261013_085429 ~ 092459 |
- |
color_format 硬编码、生产板初部署 |
| 20261014_022843 |
69ad… |
⚠️ 已弃用 |
| 20261014_025142 |
ce428058 |
布局防抖 |
| 20261014_030341 |
7b8460d6 |
+ 网页防抖参数 |
| 20261014_032433 |
0d8e313f |
+ 网页加 IP 走 NetworkManager |
| 20261014_034552 |
5785af80 |
+ systemctl stop 秒退修复 |
| 20261014_062749 |
d2b642cc |
+ 画面 IP 角标(217 现仍是此版) |
| 20261020_010600 |
63252ff9 |
+ 拔插显示器分辨率自适应(当前最新) |
4. 当前版本状态(2026-10-22)
- 开发机(232)编译产物:
63252ff9afca147bd89edd1c3907280d
- 生产板 216:
63252ff9…(最新,含拔插修复)
- 生产板 217:
d2b642cc…(缺拔插修复,离线待更新)
- 现场约定:换不同分辨率显示器后重新上电即可出原生分辨率
5. git 版本管理
- 仓库位置:
/root/layoutx(自 2026-10-22 起)
- 忽略项(.gitignore):build/、build_asan/、deploy/*.tar.gz、models/(143M 权重文件,
教程见 convert_yolov8_rknn.py;推理已移除)、plc_sim/capture_fb 二进制、运行日志
- ⚠️ channels.conf* 内含摄像头验证账号(URL 中)与网页密码,仓库仅限内网/离线保存
- 原始历史(/root/hd-ws 三个目录)保持原样不纳入 git,如需可作为分支导入