v1.3.5

硬件编码扩展(H.264 / AV1)& 多客户授权生产化 & FRP 子级自动化

历时约 11 天,跨 20 次提交。重点完成三件事:客户端硬件编码栈扩展(FFmpeg 路径补齐 H.264 / AV1 GPU 编码 + 静屏跳编码)、多客户授权服务的生产级硬化(hot-path 写抑制、4KB IP 截断修复、BindType 守护、合规可裁剪构建),以及子级运营自动化(FRP 子机自动启动、子级 AUTH 密码生成 bug 修复)。同时附带 SCLoader 大瘦身(-10K 行)、Linux 安装脚本、Web 文件管理触屏体验修复等运维向收尾。

客户端硬件编码(H.264 + AV1,FFmpeg 路径)

  • CFFmpegH264Encoder / CFFmpegAV1Encoder 通过 FFmpeg 调用 NVENC / Quick Sync / AMF 等 GPU 编码器,与现有 x264 软件编码路径并列
  • EncoderFactory 在运行时按可用编码器优选
  • 静屏跳编码:捕获层比较前后帧,完全相同时跳过编码与传输——硬件编码器在静屏时不再被强行喂入相同帧浪费带宽与 GPU 时间
  • AV1 通道铺好:未来可在硬件支持的机器(Intel Arc / NVIDIA Ada / AMD RDNA3+)上以更低比特率推送同等画质

备注:FFmpeg 静态库需更新到包含编码器组件的版本才会生效;旧 FFmpeg lib 不会破坏现有 x264 / DIFF / RGB565 路径。

多客户授权服务:从能跑到生产可用

licenses.ini 在 v1.3.4 的多客户授权流程里属于 hot path——心跳每 5s × 客户数会写一次,每次都是 WritePrivateProfileString 全文件重写。本版本:

  • hot-path 互斥锁 + 30s 节流LicensesIniMutex()(Meyers singleton recursive_mutex)覆盖所有 15 个触碰 licenses.ini 的函数;UpdateLicenseActivity 围绕 in-memory g_activityCache 重写,键为 (SN, IP, machine),无变更且 30s 窗口未满则完全跳过磁盘写入
  • 闭环了”预设续期配额消失”的 read-modify-write 竞态SetPendingRenewal / DecrementPendingQuota 现在原子化
  • licenses.ini IP 列表 4KB 截断修复WritePrivateProfileString 单值 4KB 上限会永久丢弃溢出尾部数据,改为分段写入

实测(本地 2 客户端基线):写频从 0.60 → 0.07 次/秒;外推到 100 在线目标:~160 → ~3.3 次/秒(之前 100 在线接近文件 I/O 饱和)。

子级运营自动化

  • 下级主控自动起 frp client:上级签发 V2 授权时一并下发 frp 配置,子级主控启动即接通中继链路,无需人工配 frpc.toml
  • 菜单驱动的压缩 / 解压:自定义文件 + 文件夹选择器(ZstaPickerDlg),可从远程主机直接选中混合的目录树打包,或选 zip 解压到目标路径
  • 下级 AUTH 密码生成 bug 修复:向 sub-master 发送 AUTH 时密码生成路径走错,导致下级始终认证失败——v1.3.4 部署如观察到下级认证异常,升 v1.3.5 即可

合规可裁剪构建

  • config.h 编译开关 DISABLE_X264 / DISABLE_FFMPEG:合规审查 / 出口管制场景下,可在不动源码的前提下产出完全不带 x264 / FFmpeg 的二进制
  • 配套 LICENSE-THIRD-PARTY.txt 收录第三方许可证摘要,Dependencies.md 补充裁剪说明

客户端 / 运维

  • SCLoader 大瘦身:移除 client/SCLoader.cpp(一万行硬编码 stub),改为运行时使用主控下发的 DLL 注入——客户端 binary 大幅缩小
  • 客户端 logger 优雅退出:进程退出时刷出尚在队列里的日志,并记录退出信号——重启后能从最后一条 log 复原崩溃前 1-2 秒的上下文
  • IOCPClient 早期数据包防护:在 setManagerCallBack 之前抵达的数据包不再触发空回调崩溃
  • 多显示器光标位置修正:trace cursor 在跨屏捕获时坐标系修正
  • MJPEG 录制翻转修复 + 0 字节 AVI 残留清理
  • FRP privilegeKey 改用 UTC 时间戳:跨时区主控 / 中继 / 客户端不再因本地时区让 frp auth 误判失效
  • 试用 SN 不再下发授权信息:trail SN 在握手阶段就被识别,不会进入授权下发分支
  • Linux 客户端 install.sh / uninstall.sh:补齐一键部署 / 卸载脚本

Bug 修复

  • Web 文件管理触屏双击不稳:触摸阈值放宽防误判拖拽 + 两次 click 模拟物理双击,修复跨平台文件夹重命名 / 点击无响应
  • 向 sub-master 发送 AUTH 密码生成路径错误
  • 试用 SN 误进入 V2 / V1 授权下发分支
  • 导入 SN 时未校验 BindType,可能把离线版 / 在线版 / 试用版 SN 串库

升级提示

  • 硬件编码默认关闭:FFmpeg 硬编码路径已并入 EncoderFactory,但默认仍优先 DIFF / RGB565 / x264。如需启用 NVENC / QuickSync / AMF,需确认运行时 FFmpeg 静态库已带对应编码器组件。
  • 多客户授权服务端:从 v1.3.4 升级的部署建议关注 licenses.ini 的并发安全——本版本将”100 在线 = 160 次/秒文件写入”降到 ~3.3 次/秒,配额竞态也已闭环。
  • 合规可裁剪构建DISABLE_X264 / DISABLE_FFMPEG 是构建期开关,开启后输出二进制不含相关第三方依赖。
  • 下级 frp 自动化:v1.3.5 起子级主控可在拿到 V2 授权的同时自动启用 frp client——升级后请检查部署链路中是否已经有独立 frpc 在跑,避免重复启动。