智能广告机系统

2025 | 个人项目 · 设备端软件

CQt 6LinuxMQTTSQLite多进程

广告机需要无人值守运行:远程下发广告资源、本地缓存管理、大屏自适应播放、本地配置台一样不能少。设备端按职责拆分为配置、主控、展示、更新四个进程,配置变更与网络通信互不阻塞。

系统架构

C + CMake 多进程架构,抽离 libads_common_shared.so 公共库封装 IPC 能力,经 make install 统一发布动态库与头文件;POSIX System V 消息队列(long type + text[256] 固定消息体)实现进程间解耦,以配置文件路径而非配置内容作为消息载荷,使 ini 文件成为唯一数据源;Qt6 界面进程经 QMqttClient 订阅 adsList/<area> 主题,利用 MQTT 服务端主题过滤实现多设备内容隔离,后端无需维护设备-连接映射表。

核心功能

  • SHA256 内容寻址增量同步:服务端下发资源签名,本地对已有文件计算哈希比对,一致则完全跳过下载;下载完成后二次校验,不一致自动删除回滚,杜绝半截视频进入播放列表
  • 文件与数据库记录不一致时自动补偿,同步流程幂等可重入
  • QMediaPlayer / QVideoWidget / QAudioOutput 三段式自适应播放(顶部信息栏 10% / 视频 60% / 图片 30%),基于 EndOfMedia 状态驱动轮播
  • mongoose 内嵌 HTTP 配置台(/api/config、/api/login),静态资源与 API 分流,配置经 glib GKeyFile 持久化为 ini
  • SQLite 本地广告缓存(广告主表 + 资源表),DAO 层封装增删改查
  • libcurl + cJSON 设备注册;设备序列号读取 /sys/class/dmi/id/product_serial,零产线工序

个人职责

负责设备端全部软件开发,完成跨 Windows / Linux 双端联调,梳理并统一两端配置项与数据契约。

技术栈

CC++Qt 6LinuxCMakeSystem V IPC(消息队列)pthreadpaho-mqtt / QMqttClientmongoose v7.20libcurlcJSONglib GKeyFileSQLiteSHA256Git