-
v1.3.5 Stable
released this
2026-05-31 15:38:52 +00:00 | 7 commits to main since this releasev1.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.toml(CLicenseDlg.cpp+2015RemoteDlg.cpp新增自动接入流程) - 菜单驱动的压缩 / 解压:自定义文件 + 文件夹选择器(
ZstaPickerDlg),可以从远程主机直接选中混合的目录树打包,或选 zip 解压到目标路径;新增compress.bmp/uncompress.bmp菜单图标
合规可裁剪构建
config.h编译开关DISABLE_X264/DISABLE_FFMPEG:合规审查 / 出口管制场景下,可在不动源码的前提下产出完全不带 x264 / FFmpeg 的二进制(LICENSE-THIRD-PARTY.txt同步收录第三方许可证摘要,Dependencies.md补充裁剪说明)
改进
多客户许可证:从能跑到生产可用
licenses.inihot-path 写抑制 + 互斥锁:心跳路径每 5s × 客户数会写一次licenses.ini,每次写都是WritePrivateProfileString全文件重写。本版本引入:LicensesIniMutex()(Meyers singleton recursive_mutex)覆盖所有 15 个触碰licenses.ini的函数,关闭SetPendingRenewal/DecrementPendingQuota之间的 read-modify-write 竞态——之前用户反馈"预设续期配额莫名消失"就是这个 raceUpdateLicenseActivity围绕 in-memoryg_activityCache重写:键为(SN, IP, machine)(不是 SN 单独,因为同一 SN 可能被批量授权部署到上百台终端),无变更且 30sLastActiveTime节流窗口未满则完全跳过磁盘写入- 实测(本地 2 客户端基线):写频从 0.60 → 0.07 次/秒;外推到 100 在线目标:~160 → ~3.3 次/秒(之前 100 在线接近文件 I/O 饱和)
licenses.iniIP 列表 4KB 截断修复:WritePrivateProfileString单值 4KB 上限会永久丢弃溢出尾部数据;改为分段写入避免 IP 历史链路被静默吞掉BindType校验:导入 SN 时按BindType字段严格校验绑定形态,避免离线版/在线版/试用版 SN 串库- 试用 SN 不再下发授权信息:trail SN 在握手阶段就被识别,不会进入授权下发分支
- License 视图 IP 列表 UI 卸锁:
OnLicenseViewIPs中m_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