• v1.3.5 da024fb3fb

    v1.3.5 Stable

    yuanyuanxiang released this 2026-05-31 15:38:52 +00:00 | 7 commits to main since this release

    v1.3.5 (2026.5.31)

    ⚠️ 安全提示

    本软件涉及远程控制功能,请谨慎下载,建议在虚拟机中测试。主控程序会连接授权服务器进行必要的通讯和防破解检测。下载并使用本软件,即视为接受上述条款。

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

    本次发布历时约 11 天,跨 20 次提交,重点完成三件事:客户端硬件编码栈扩展(FFmpeg 路径补齐 H.264/AV1 GPU 编码 + 静屏跳编码)、多客户许可证的生产级硬化(hot-path 写抑制、4KB IP 截断修复、BindType 守护、合规可裁剪构建),以及子级运营自动化(FRP 子机自动启动、生成子级密码 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 路径。

    子级运营自动化

    • 下级主控自动起 frp client:上级在签发 V2 授权时可一并下发 frp 配置,子级主控启动即接通中继链路,无需人工配 frpc.tomlCLicenseDlg.cpp + 2015RemoteDlg.cpp 新增自动接入流程)
    • 菜单驱动的压缩 / 解压:自定义文件 + 文件夹选择器(ZstaPickerDlg),可以从远程主机直接选中混合的目录树打包,或选 zip 解压到目标路径;新增 compress.bmp / uncompress.bmp 菜单图标

    合规可裁剪构建

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

    改进

    多客户许可证:从能跑到生产可用

    • licenses.ini hot-path 写抑制 + 互斥锁:心跳路径每 5s × 客户数会写一次 licenses.ini,每次写都是 WritePrivateProfileString 全文件重写。本版本引入:
      • LicensesIniMutex()(Meyers singleton recursive_mutex)覆盖所有 15 个触碰 licenses.ini 的函数,关闭 SetPendingRenewal / DecrementPendingQuota 之间的 read-modify-write 竞态——之前用户反馈"预设续期配额莫名消失"就是这个 race
      • UpdateLicenseActivity 围绕 in-memory g_activityCache 重写:键为 (SN, IP, machine)(不是 SN 单独,因为同一 SN 可能被批量授权部署到上百台终端),无变更且 30s LastActiveTime 节流窗口未满则完全跳过磁盘写入
      • 实测(本地 2 客户端基线):写频从 0.60 → 0.07 次/秒;外推到 100 在线目标:~160 → ~3.3 次/秒(之前 100 在线接近文件 I/O 饱和)
    • licenses.ini IP 列表 4KB 截断修复WritePrivateProfileString 单值 4KB 上限会永久丢弃溢出尾部数据;改为分段写入避免 IP 历史链路被静默吞掉
    • BindType 校验:导入 SN 时按 BindType 字段严格校验绑定形态,避免离线版/在线版/试用版 SN 串库
    • 试用 SN 不再下发授权信息:trail SN 在握手阶段就被识别,不会进入授权下发分支
    • License 视图 IP 列表 UI 卸锁OnLicenseViewIPsm_ListLicense.SetItemText 移出临界区,critical section 只覆盖真正的磁盘 I/O

    客户端 / 运维

    • SCLoader 大瘦身:移除 client/SCLoader.cpp(一万行硬编码 stub),改为运行时使用主控下发的 DLL 注入——客户端 binary 大幅缩小,插件分发不再走源码内嵌路径
    • 客户端 logger 优雅退出:进程退出时刷出尚在队列里的日志,并记录退出信号——重启后能从最后一条 log 复原崩溃前 1-2 秒的上下文
    • IOCPClient 早期数据包防护:在 setManagerCallBack 之前抵达的数据包不再触发空回调崩溃(启动竞态修复)
    • 多显示器光标位置修正:trace cursor 在跨屏捕获时坐标系修正,远端鼠标位置不再偏移到错误显示器
    • MJPEG 录制翻转修复:MJPEG 回放上下颠倒;同时移除编码器打开失败时的 0 字节 AVI 残留
    • FRP privilegeKey 改用 UTC 时间戳:跨时区主控 / 中继 / 客户端之间不再因为各自本地时区让 frp auth 误判失效

    文档与发版基础设施

    • Linux 客户端 install.sh / uninstall.sh:补齐 Linux 一键部署 / 卸载脚本,与 macOS 一致
    • Go 服务端构建管线build.ps1 / build.cmd 把 Go 主控编译纳入主构建流程;同时修复 Web 登录在新构建产物下的一个回归 bug
    • Release / Download 链接迁移到 Gitea:v1.3.4+ 的发版只发到 Gitea(git.simpleremoter.com),README 三语版本和 server/go/README.md 中的下载按钮、release 徽章、章节锚点链接统一指向 Gitea;GitHub 镜像保留 stars / forks 徽章作为历史累计指标,但不再作为下载入口

    Bug 修复

    • Web 文件管理触屏双击不稳:触摸移动阈值放宽防止误判为拖拽;用两个连续 click 事件(间隔 20ms)模拟物理双击替代非标准 dblclick,修复 Windows/Linux/macOS 上文件夹重命名与点击无响应
    • 下级密码生成错误:向 sub-master 发送 AUTH 时密码生成路径走错,导致下级始终认证失败
    • 试用 SN 误下发授权:trail SN 不再进入 V2 / V1 授权下发分支,避免试用变相获得正式授权

    升级提示

    • 硬件编码默认关闭:FFmpeg 硬编码路径已并入 EncoderFactory,但默认仍优先 DIFF / RGB565 / x264。如需启用 NVENC / QuickSync / AMF,需确认运行时 FFmpeg 静态库已带对应编码器组件;旧 FFmpeg lib 不会破坏现有路径,只是新编码器不可用
    • 多客户许可证服务端:从 v1.3.4 升级的部署建议关注 licenses.ini 的并发安全——本版本将"100 在线 = 160 次/秒文件写入"降到 ~3.3 次/秒,配额竞态也已闭环。如果在生产中观察到"预设续期配额消失",升到 v1.3.5 即可
    • 合规可裁剪构建DISABLE_X264 / DISABLE_FFMPEG 是构建期开关,开启后输出二进制不含相关第三方依赖;运行时若不需要 H.264,仅靠 DIFF / RGB565 仍可正常远控
    • 下级 frp 自动化:v1.3.5 起,子级主控可在拿到 V2 授权的同时自动获取并启用 frp client 配置——如果你的部署链路中已经在外部跑了独立 frpc,升级后请检查是否重复启动两份 frpc
    • 客户端硬件编码静屏跳编码:静屏时帧上行带宽近 0;对自适应统计的 RTT / 帧率估算无影响(静屏不计入活跃帧率窗口)
    Downloads