开发历程.md 7.0 KB

开发历程与版本沿革

依据 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,如需可作为分支导入