billd-desk Documentation

基于Vue3 + WebRTC + Nodejs + Flutter搭建的远程桌面控制、游戏串流

8,662 stars TypeScript TypeScript 13 files · ~7,569 tokens #coturn#electron#flutter#nodejs#parsec#remote-desktop#rustdesk#socket-io
RAW Doc

File: README.md

BilldDesk Pro | BilldDesk 开源版

BilldDesk Pro

实测

  • 支持2K + 60 Fps
    • 被控端:系统:Windows 10,显卡:NVIDIA GeForce RTX 3060 Laptop
    • 主控端:Chrome浏览器/BilldDesk客户端
  • 支持2K + 120 Fps
    • 被控端:系统:Windows 11,显卡:NVIDIA GeForce RTX 5070
    • 主控端:Chrome浏览器/BilldDesk客户端
  • 支持1080P + 60 Fps
    • 被控端:系统:Windows 10,显卡:NVIDIA GeForce RTX 2070 Laptop
    • 主控端:Chrome浏览器/BilldDesk客户端
  • 支持1080P + 60 Fps
    • 被控端:系统:Windows 10,显卡:NVIDIA GeForce GTX 1060 6G
    • 主控端:Chrome浏览器/BilldDesk客户端

功能

  • web网页 控制 电脑端
  • web网页 控制 安卓端
  • web网页 控制 web网页(仅观看)
  • 电脑端 控制 电脑端
  • 电脑端 控制 安卓端
  • 电脑端 控制 web网页(仅观看)
  • 安卓端 控制 电脑端
  • 安卓端 控制 安卓端
  • 安卓端 控制 web网页(仅观看)
  • 硬件加速
    • 开启/关闭编码硬件加速
    • 开启/关闭解码硬件加速
    • 开启/关闭零拷贝
    • NVIDIA显卡(H264/H265/AV1),显卡驱动需要570.0+版本
    • AMD显卡(H264/H265/AV1)
  • 主流编解码协议
    • H264/H265
    • AV1
    • VP8/VP9
  • 驱动级键鼠(避免游戏风控)
  • 鼠标模式
    • 使用主控端鼠标
    • 使用被控端鼠标(fps游戏)
    • 智能鼠标
  • 屏幕墙
    • 支持Windows/macOS/Android
    • 支持单控
    • 支持群控
  • 多台设备同时远程一台设备
  • 一台设备同时远程多台设备
  • 多屏操作
  • 连接鉴权
  • 自定义设备码/连接密码
  • 自定义中继服务器
  • 自定义接口(wss、api)
  • 码率/帧率/画质调整
  • 按键映射
  • 剪贴板同步
  • 分辨率同步
  • 文件传输
    • 主控->被控
    • 主控<-被控
  • 文字互动
  • 本机被控结束后锁屏
  • 仅允许同账号远程
  • 远程开机(WOL)
  • 远程更新客户端版本(Windows)
  • 系统托盘
  • 开机自启(无人值守)
  • 进程保活(windows)
  • 在线更新/主控端远程更新被控端(windows)
  • 帧率模式
    • 根据画面变化,智能降帧率,优化带宽占用
  • 网络模式
    • 默认
    • 低延迟
  • 快捷键/常用操作
    • Ctrl+Alt+Del
    • 显示桌面
    • 打开设置
    • 任务视图
    • 任务管理器
    • 资源管理器
    • 重启
    • 关机
    • 注销
    • 锁定
  • 批量群控
  • 隐私屏
    • 自定义隐私屏图片
    • 自定义隐私屏文字
  • 虚拟屏
  • 扩展屏
  • 设备分组
  • 后台管理
  • 私有化部署
  • Docker一键部署

对比ToDesk

作者使用过很多远程软件:TeamViewer、向日葵、ToTesk、AnyDesk、RustDesk、UU远程、连连控,还有qq自带的远程协助等等,但用ToDesk比较多,因此用ToTesk和BilldDesk作对比~

BilldDesk BilldDesk Pro ToDesk
连接限制 无限制,免费 无限制,免费 80h/月,200次/月,24h/次,超出需要购买专业版(¥24/月)
画质限制 无限制,免费 限制1080p,免费 限制1080p,免费
帧率限制 无限制,免费 限制30帧,免费 限制30帧,免费
安卓被控 不支持 支持,免费 支持,需要购买专业版(¥24/月)或购买插件(¥15/月)
自定义设备码 支持,免费 支持,免费 不支持
设备分组管理 支持,免费 支持,免费 支持,免费
开机自启/无人值守 不支持 支持,免费 支持,免费
隐私屏 不支持 支持,免费 支持,需要购买专业版(¥24/月)
虚拟屏 不支持 支持,免费 支持,需要购买性能版(¥95/月)
远程时录屏 不支持 支持,免费 不支持
屏幕墙 不支持 支持,阶梯收费 支持,需要购买技术版(¥218/月)
批量群控 不支持 支持,屏幕墙自带 不支持
web网页发起远程控制 支持,免费 支持,免费 支持,需要购买专业版(¥24/月)
后台管理 不支持 支持,免费 支持,免费
远程控制web网页(仅观看) 支持,免费 支持,免费 不支持
通道数限制(同账号多主控同时发起远控) 无限制,免费 无限制,免费 限制1个,增加需要购买插件(¥233/月)
私有化部署/二次开发 支持,免费 支持,订阅源码 支持,需要ToDesk企业版,定价未知

跨平台支持

  • Windows 系统
    • Windows 10、Windows 11
    • Windows Server 2022
    • Windows Server 2019
    • Windows 7 不支持
    • 其他版本未实际测试
  • macOS 系统
    • macOS 15
    • 其他版本未实际测试
  • Android系统
    • Android 8 至 Android 16
    • Android 7,被控时支持观看,暂不支持操作
    • Android 6,不再支持安卓6
    • 其他版本未实际测试
  • Web浏览器(Chrome、Edge、Firefox、Via、Safari)
  • iOS系统
  • Linux 系统

技术架构

框架/第三方库:

  • Flutter
  • Vue
  • Koa2
  • ...

编程语言:

  • JavaScript/Typescript
  • Dart
  • Kotlin
  • C++
  • Swift
  • ...

Api:

  • WebRTC
  • Win32
  • Cocoa
  • AccessibilityService
  • ...

客户端下载

https://desk.hsslive.cn/#/download

预览

快速体验:https://desk.hsslive.cn

web网页/电脑端控制电脑端

web网页/电脑端控制安卓端

web网页/电脑端控制web网页

仅观看模式

web网页移动端

首页

控制页

屏幕墙

批量群控

设备分组

隐私屏

支持自定义隐私屏(图片、文字)

虚拟屏

鼠标、键盘仿真

安卓端控制电脑端【TODO】

安卓端控制安卓端【TODO】

安卓端控制web网页【TODO】

仅观看模式

文件传输

跨平台支持

[后台] 控制台

[后台] 黑名单

[后台] 设备分组

[后台] 远程管理

  • 远程记录

  • 在线远程

  • 在线设备

BilldDesk Pro免费吗?

  • 免费,你可以直接下载BilldDesk客户端,开始流畅的远程体验。
  • 有付费功能(隐私屏、虚拟屏、屏幕墙、高码率/帧率/画质),如果你经常使用到BilldDesk,推荐你购买任意VIP套餐(包月6元/月、包年4.2元/月)。

常见问题

https://desk.hsslive.cn/#/faq

问题反馈

欢迎提 issue

联系作者

https://desk.hsslive.cn/#/hi

BilldDesk Pro源码


File: LICENSE.txt

MIT License

Copyright (c) 2023-PRESENT shuishenghttps://github.com/galaxy-s10

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


File: package.json

{
"name": "billd-desk",
"version": "0.0.1",
"repository": {
"type": "git",
"url": "https://github.com/galaxy-s10/billd-desk"
},
"license": "MIT",
"author": "shuisheng [email protected]",
"type": "module",
"main": "electron-dist/index.cjs",
"scripts": {
"build:beta": "cross-env VITE_APP_RELEASE_PROJECT_ISWEB=true vite build",
"build:deb": "standard-version && vite build && electron-builder --linux deb",
"build:ele": "standard-version && vite build && electron-builder --mac --win --linux",
"build:linux": "standard-version && vite build && electron-builder --linux",
"build:mac": "standard-version && vite build && electron-builder --mac",
"build:mw": "standard-version && vite build && electron-builder --mac --win",
"build:prod": "cross-env VITE_APP_RELEASE_PROJECT_ISWEB=true vite build",
"build:win": "standard-version && vite build && electron-builder --win",
"copy": "ts-node ./deploy/handleGiteeJenkins.mjs",
"cz": "cz",
"deploy:beta": "node ./deploy/index.cjs --beta",
"deploy:prod": "node ./deploy/index.cjs --prod",
"dev": "rimraf electron-dist dist && vite",
"gen-icons": "electron-icon-builder --input=./build/source/billd.png --output=./build/ --flatten",
"lint": "eslint . --config ./eslint.config.js --cache",
"lint:fix": "eslint . --config ./eslint.config.js --cache --fix",
"preview": "vite preview",
"release": "standard-version"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
},
"dependencies": {
"@nut-tree-fork/nut-js": "^4.2.2",
"@nut-tree-fork/shared": "^4.2.2",
"@nut-tree/nut-js": "^4.0.0",
"@nut-tree/shared": "^4.0.1",
"@vicons/ionicons5": "^0.12.0",
"@vueuse/components": "^11.1.0",
"@vueuse/core": "^10.10.0",
"axios": "^1.4.0",
"billd-deploy": "^1.1.0",
"billd-html-webpack-plugin": "^1.2.0",
"billd-scss": "^0.0.8",
"billd-utils": "^0.0.25",
"js-cookie": "^3.0.5",
"naive-ui": "^2.34.4",
"pinia": "^2.1.6",
"pinia-plugin-persistedstate": "^3.2.1",
"socket.io-client": "^4.8.0",
"spark-md5": "^3.0.2",
"vconsole": "^3.15.1",
"vue": "^3.5.13",
"vue-i18n": "^9",
"vue-router": "^4.2.4"
},
"devDependencies": {
"@electron-toolkit/preload": "^3.0.0",
"@electron/rebuild": "^3.6.0",
"@eslint/js": "^9.10.0",
"@types/node": "^20.4.1",
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@typescript-eslint/parser": "^7.18.0",
"@vitejs/plugin-legacy": "^5.3.1",
"@vitejs/plugin-vue": "^5.2.1",
"@vue/eslint-config-prettier": "^8.0.0",
"@vue/eslint-config-typescript": "^11.0.3",
"commitizen": "^4.3.1",
"cross-env": "^7.0.3",
"electron": "^33.2.1",
"electron-builder": "^25.1.8",
"electron-icon-builder": "^2.0.1",
"eslint": "^9.10.0",
"eslint-config-prettier": "^9.1.0",
"eslint-define-config": "^2.1.0",
"eslint-import-resolver-typescript": "^3.6.0",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-vue": "^9.28.0",
"postcss-preset-env": "^10.1.2",
"prettier": "^3.4.2",
"rimraf": "^6.0.1",
"sass": "^1.63.6",
"standard-version": "^9.5.0",
"trash": "^8.1.1",
"ts-node": "^10.9.2",
"typescript": "^5.6.2",
"unplugin-auto-import": "^0.17.6",
"unplugin-vue-components": "^0.25.1",
"vite": "^6.0.3",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-commonjs": "^0.10.1",
"vite-plugin-electron": "^0.28.2",
"vite-plugin-electron-renderer": "^0.14.5",
"vite-plugin-eslint2": "^5.0.3",
"vite-plugin-html": "^3.2.2",
"vue-eslint-parser": "^9.4.3",
"vue-tsc": "^2.1.10"
},
"productName": "BilldDesk"
}


File: README_OpenSource.md

BilldDesk Pro | BilldDesk 开源版

BilldDesk

⭐️ BilldDesk

[!CAUTION]
BilldDesk 目前仍未发布稳定版,不建议开发者用于生产环境!

⚡️ BilldDesk Pro

BilldDesk存在两个已知问题(权限,控制)在现有架构下,几乎不可修复!为什么不可修复?看我发的b站视频:https://www.bilibili.com/video/BV1yqN9zsEEd?vd_source=bf386c933a4aff3e8b19a1f003de0015&p=2&spm_id_from=333.788.videopod.sections,01:35秒开始到20:45秒。

BilldDeskPro 完全重写了BilldDesk,修复了BilldDesk的已知问题(权限,控制)。并且稳定性更高、性能更强、代码可读性更好、更新更频繁

BilldDeskPro客户端下载:

BilldDeskPro订阅:https://desk.hsslive.cn/#/price

简介

BilldDesk 远程桌面控制,目前实现了类似 ToDesk、向日葵等远程桌面的功能。

对比ToDesk

作者使用过很多远程软件:TeamViewer、向日葵、ToTesk、AnyDesk、RustDesk、UU远程、连连控,还有qq自带的远程协助等等,但用ToDesk比较多,因此用ToTesk和BilldDesk作对比~

BilldDesk BilldDesk Pro ToDesk
连接限制 无限制,免费 无限制,免费 80h/月,200次/月,24h/次,超出需要购买专业版(¥24/月)
画质限制 无限制,免费 限制1080p,免费 限制1080p,免费
帧率限制 无限制,免费 限制60帧,免费 限制30帧,免费
安卓被控 不支持 支持,免费 支持,需要购买专业版(¥24/月)或购买插件(¥15/月)
自定义设备码 支持,免费 支持,免费 不支持
设备分组管理 支持,免费 支持,免费 支持,免费
开机自启/无人值守 不支持 支持,免费 支持,免费
隐私屏 不支持 支持,免费 支持,需要购买专业版(¥24/月)
虚拟屏 不支持 支持,免费 支持,需要购买性能版(¥95/月)
远程时录屏 不支持 支持,免费 不支持
屏幕墙 不支持 支持,阶梯收费 支持,需要购买技术版(¥218/月)
批量群控 不支持 支持,屏幕墙自带 不支持
web网页发起远程控制 支持,免费 支持,免费 支持,需要购买专业版(¥24/月)
后台管理 不支持 支持,免费 支持,免费
远程控制web网页(仅观看) 支持,免费 支持,免费 不支持
同账号多主控同时发起远控 支持,免费 支持,免费 支持,需要购买插件(¥233/月)
私有化部署/二次开发 支持,免费 支持,付费 支持,需要ToDesk企业版,定价未知

生态

项目名称 代码仓库 star & fork 线上地址/下载地址
远程桌面网页/客户端 billd-desk https://desk.hsslive.cn
远程桌面后台 billd-desk-admin https://desk-admin.hsslive.cn
远程桌面移动端 billd-desk-flutter https://desk.hsslive.cn/#/download
远程桌面服务端 billd-desk-server https://desk-api.hsslive.cn

功能

  • web网页 控制 电脑端
  • web网页 控制 安卓端
  • web网页 控制 web网页(仅观看)
  • 电脑端 控制 电脑端
  • 电脑端 控制 安卓端
  • 电脑端 控制 web网页(仅观看)
  • 安卓端 控制 电脑端
  • 安卓端 控制 安卓端
  • 安卓端 控制 web网页(仅观看)
  • 多台设备同时远程一台设备
  • 一台设备同时远程多台设备
  • 多屏操作
  • 连接鉴权
  • 自定义设备码/连接密码
  • 自定义接口(wws/api/中继服务器)
  • 按键组合键
  • 文件传输
  • 开机自启
  • 锁屏保活
  • 屏幕墙
  • 批量群控
  • 隐私屏
  • 虚拟屏
  • 扩展屏
  • 设备分组
  • 支持 macOS 系统
  • 支持 Windows 系统
  • 支持 Linux 系统
  • 支持 安卓端(Flutter)
  • 支持 苹果端(Flutter)
  • 后台管理
  • Docker一键部署
  • 支持私有化部署

预览

快速体验:https://desk.hsslive.cn

web网页/电脑端控制电脑端

web网页/电脑端控制安卓端

web网页/电脑端控制web网页

仅观看模式

web网页移动端

首页

控制页

屏幕墙

批量群控

设备分组

隐私屏

支持自定义隐私屏(图片、文字)

虚拟屏

鼠标、键盘仿真

安卓端控制电脑端【TODO】

安卓端控制安卓端【TODO】

安卓端控制web网页【TODO】

仅观看模式

文件传输

跨平台支持

[后台] 控制台

[后台] 黑名单

[后台] 设备分组

[后台] 远程管理

  • 远程记录

  • 在线远程

  • 在线设备

技术栈

  • 前端相关:Vue3 以及相关技术栈、Typescript、WebRTC、WebCodecs、Web Workder、Web Audio、Canvas
  • 后端相关:Nodejs 以及相关技术栈、Koa2、Typescript、Sequelize、Mysql、Redis、Socket.io
  • 桌面客户端相关:Electron以及相关技术栈、WebRTC
  • 移动客户端相关:Flutter3以及相关技术栈、WebRTC
  • 流媒体服务器相关:SRS、 FFmpeg、Coturn
  • Docker 相关:Docker
  • 部署相关:阿里云云效、billd-deploy

本地启动

接口文档

查看 apifox

性能测试

查看 benchmarking.md

常见问题

https://desk.hsslive.cn/#/faq

问题反馈

欢迎提 issue

参与贡献

欢迎提 pr

私有化部署

billd-desk完全开源(可商用),欢迎部署!

客户端下载

https://desk.hsslive.cn/#/download

官方交流群

多平台支持

  • Web网页(建议使用:Chrome浏览器 / Via浏览器 / Safari浏览器)
  • Windows 7 不支持
  • Windows 10、Windows 11
  • Windows Server 2022,其他版本未实际测试
  • macOS
  • Linux
  • Android 11 至 Android 15,其他版本未实际测试
  • iOS

贡献者

初心

该项目初心只是作为billd-live的衍生项目,但后面觉得远程桌面也挺有意思的,就一直坚持完善下去。

愿景

各大远程软件虽然免费都能用,但免费版的功能覆盖不够全面,比如有些普通个人用户可能只是临时需要远程一下安卓手机,但却需要开通一个月的服务才可以。BilldDesk完善了这些基本功能,让普通用户也能用上~


File: release.md

v0.77.0

更新内容:
1,优化连接性能。
2,优化开机自启功能。
3,修复已知问题。

v0.76.0

更新内容:
1,重构屏幕墙功能。
2,优化主控端界面。
3,修复其他已知问题。


File: tsconfig.json

{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
"noImplicitAny": false,

text
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve",

"baseUrl": "./",
"paths": {
  "@/*": ["src/*"]
},

/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true

},

"include": [
"electron-main//*.ts",
"src/
/.ts",
"src/**/
.d.ts",
"src//*.tsx",
"src/
/.vue",
"config/**/
.ts",
"components.d.ts"
], // 仅仅匹配这些文件,除了src以外的文件都不会被匹配
"references": [{ "path": "./tsconfig.node.json" }]
}


File: tsconfig.node.json

{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}


File: doc/start-client.md

billd-desk(pro)

安装依赖

使用 node 版本:v18.19.0,建议18版本
使用 pnpm 版本:9.1.3,建议9版本

bash
pnpm i

更新 billd 相关依赖:

bash
pnpm i billd-deploy@latest billd-utils@latest billd-scss@latest billd-html-webpack-plugin@latest

运行

配置文件:src/spec-config.ts,请在该文件填写对应的信息。

bash
npm run dev

打包

打包时会先使用standard-version进行发版,请确保当前项目初始化了 git,否则打包会失败。

  • web

打包成功后,资源输出在dist目录

bash
npm run build:web
  • windows、macos、linux 包

打包成功后,资源输出在electron-release目录

bash
npm run build
  • windows 包

打包成功后,资源输出在electron-release目录

bash
npm run build:win
  • macos 包

打包成功后,资源输出在electron-release目录

bash
npm run build:mac
  • linux 包

打包成功后,资源输出在electron-release目录

bash
npm run build:linux

File: doc/交流群(开发).md

BilldDesk 开发交流群(beta)

  1. 建群目的:
    1. 设置 1%的门槛,就能筛选 99%的无关开发者。
    2. 从中筛选具有参与 BilldDesk 开发能力的开发者。
  2. 进群费用:200 元/人,交流 BilldDesk 最新进展以及相关技术。
  3. BilldDesk 是一个跨平台的项目,涉及到的技术非常广泛,如果你希望从该项目学到什么,欢迎进群。
  4. 注意,进群了并不代表作者一定会解决你提出的问题,作者大多数情况下会给你一个方向。

File: doc/交流群(用户).md

BilldDesk 用户交流群

  1. 官方交流群的用户数量不小(目前群人数累计 1000 人),作者一人精力有限,鼓励用户自行建群。
  2. 后续有开发者加入的话,会新增官方交流群。
  3. BilldDesk 还很小,等 BilldDesk 足够壮大了,再重新开放官方交流群。
  4. 先填写问卷:https://hcnb6r23b8d2.feishu.cn/share/base/form/shrcnlM40x0sVpK2HANrlkMQT9d,
  5. 填完再添加微信shuisheng9905
  6. 必须备注:已填问卷,加BilldDesk微信群
  7. 请大家诚信,如发现备注了但没填问卷(目前已发现多个案例),将踢出官方群,并永久拉黑

File: doc/关于开源.md

❤️ 开源

  • 愿大家不忘初心,砥砺前行。

TLDR


File: doc/常见问题.md

windows 环境,安装后打不开/打开闪退

  1. 安装.net 运行时:https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/thank-you/net481-web-installer
  2. 安装 c++运行时:https://aka.ms/vs/17/release/vc_redist.x64.exe

mac 环境,安装提示已损坏,无法打开

解决办法:https://zhuanlan.zhihu.com/p/135948430

⚠️ 你永远满足不了所有人

  1. 每个用户都希望方便自己,下载客户端时,作者总不能在百度网盘、迅雷云盘、夸克网盘,123 云盘等等各大盘都上传一遍。
  2. 目前 BilldDesk 从未发布 1.0 稳定版,而这对于某些开发者来说,他们只会开骂(可以去 issue 查看),这里作者建议骂之前先看下这篇文章:前端之被包养就不要谈独立人格。

File: doc/思路.md

  • 客户端打开后,判断缓存有无uid

    • 有uid和token,验证uid和token,连接Websocket
    • 没有uid和token,调接口获取uid
  • 打开客户端,ws连接,join的时候,带上desk_user_id,在redis里添加一个记录desk_user_uuid,设置他的过期时间为10秒

  • 设置心跳为5秒一次,每次心跳都更新desk_user_uuid的过期时间

  • 给desk_user_uuid添加过期订阅,过期的时候判断为远程连接断开

  • 发起远程连接的时候,发送billdDeskStartRemote,带上desk信息

  • 锁屏的时候

    • websocket是否会断开
      • 会断开。
    • webrtc是否会断开
      • 会断开。
  • 主动断开远程连接如何判定?


File: doc/性能测试.md

远程端延迟性能测试报告

1. 测试目的

主要测试各个端远程时的延迟,评估系统在不同网络环境和终端下的响应速度,为优化用户体验和系统架构提供数据支持。

2. 测试环境

  • 测试端类型:PC端、移动端、Web端等
  • 网络环境:
    • 局域网(LAN)
    • 广域网(WAN)
    • 4G/5G移动网络
  • 服务器部署位置:本地/云端
  • 测试工具:ping、traceroute、专业延迟测试工具(如iperf、WebPageTest等)
  • 时间:202X年X月X日

3. 测试方法

  1. 准备工作:
    • 确认各端设备已连接至指定网络
    • 记录设备型号、操作系统、浏览器/客户端版本
  2. 测试流程:
    • 使用ping命令测试端到服务器的基础网络延迟
    • 通过应用实际操作(如页面加载、远程桌面、文件传输等)记录端到端响应时间
    • 每种场景下重复测试不少于5次,取平均值
  3. 数据记录:
    • 记录每次测试的延迟(ms)
    • 标注异常情况(如丢包、超时等)

4. 测试结果

端类型 网络环境 平均延迟(ms) 最小值(ms) 最大值(ms) 备注
PC端 局域网
PC端 广域网
移动端 4G
Web端 5G
... ...

请根据实际测试补充数据

5. 结论与建议

  • 结论:
    • 各端在局域网下延迟最低,广域网和移动网络下延迟有所增加。
    • 某些端或网络环境下存在偶发高延迟或丢包现象。
  • 优化建议:
    • 优化服务器部署位置,靠近主要用户群体
    • 针对高延迟场景优化数据传输协议
    • 增强网络异常处理能力,提升用户体验

如需详细原始数据或测试脚本,请联系测试负责人。


File: doc/技术架构.md

框架/第三方库

  • Electron
  • Flutter
  • Vue
  • Node
  • ...

编程语言

  • JavaScript/Typescript
  • Dart
  • Kotlin
  • C++
  • Swift
  • ...

Api

  • WebRTC
  • Win32
  • Cocoa
  • AccessibilityService
  • ...

File: doc/本地环境.md

docker 安装 mysql

拉镜像

bash
docker pull mysql:8.0

复制配置文件到本地

先查看配置文件位置:

bash
docker run --rm mysql:8.0 mysql --help | grep my.cnf

查看配置文件位置结果:

bash
➜  billd-desk-server git:(master) ✗ docker run --rm mysql:8.0 mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
➜  billd-desk-server git:(master) ✗

意思是按照/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 路径按优先排序。

bash
➜  billd-desk-server git:(master) ✗ docker run --rm mysql cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
省略...
➜  billd-desk-server git:(master) ✗

可以得到镜像中 mysql 配置文件路径为:/etc/my.cnf

创建一个临时的容器,在它里面复制配置文件到本地:

注意,本地需要存在/Users/huangshuisheng/Desktop/docker/mysql/conf 这个目录

本地复制时用这个命令:

bash
LOCAL_DOCKER_MYSQL_PATH=/Users/huangshuisheng/Desktop/docker/mysql \
DOCKER_MYSQL_TMP=`docker run -d mysql:8.0` \
&& docker cp $DOCKER_MYSQL_TMP:/etc/my.cnf $LOCAL_DOCKER_MYSQL_PATH/conf \
&& docker stop $DOCKER_MYSQL_TMP \
&& docker rm $DOCKER_MYSQL_TMP

启动容器

bash
# 使用自定义 MySQL 配置文件
# billd-desk-mysql是docker容器名,/Users/huangshuisheng/Desktop/docker/mysql是映射到本机的mysql,123456是密码

LOCAL_DOCKER_MYSQL_PATH=/Users/huangshuisheng/Desktop/docker/mysql \
&& docker run -d \
-p 3306:3306 \
--name billd-desk-mysql \
-e MYSQL_ROOT_PASSWORD=mysql123. \
-v $LOCAL_DOCKER_MYSQL_PATH/conf/my.cnf:/etc/my.cnf \
-v $LOCAL_DOCKER_MYSQL_PATH/data:/var/lib/mysql/ \
mysql:8.0

docker 安装 redis

拉镜像

bash
docker pull redis:7.0

复制配置文件到本地

https://raw.githubusercontent.com/redis/redis/7.0/redis.conf

在/Users/huangshuisheng/Desktop/docker/redis/新建 conf 目录
在/Users/huangshuisheng/Desktop/docker/redis/新建 data 目录

将项目根目录的/docker/redis/conf/redis.conf 和 users.acl 复制到/Users/huangshuisheng/Desktop/docker/redis/conf

本地启动容器

bash
# 使用自定义 redis 配置文件
# billd-desk-redis是docker容器名,/Users/huangshuisheng/Desktop/docker/redis是映射到本机的redis

LOCAL_DOCKER_RESIS_PATH=/Users/huangshuisheng/Desktop/docker/redis \
&& docker run -d \
-p 6379:6379 \
--name billd-desk-redis \
-v $LOCAL_DOCKER_RESIS_PATH/data:/data \
-v $LOCAL_DOCKER_RESIS_PATH/conf/redis.conf:/etc/redis/redis.conf \
-v $LOCAL_DOCKER_RESIS_PATH/conf/users.acl:/etc/redis/users.acl \
redis:7.0 redis-server /etc/redis/redis.conf

docker 安装 coturn

本地环境时,不需要用 coturn

拉镜像

bash
docker pull coturn/coturn

启动容器

bash
LOCAL_DOCKER_COTURN_PATH=/Users/huangshuisheng/Desktop/docker/coturn \
&& docker run -d --network=host  \
--name billd-desk-coturn \
-v $LOCAL_DOCKER_COTURN_PATH/coturn.conf:/my/coturn.conf \
coturn/coturn -c /my/coturn.conf

File: doc/流程.md

一对一远程

没什么好说的

多对一远程

多个用户同时控制一个客户端
被控端都有自己的房间(唯一)

  • 开始远程控制
    • 控制端,用户点击连接,发送billdDeskStartRemote消息,开始远程控制。
    • 被控端,监听billdDeskStartRemote消息,收到billdDeskStartRemote消息后,判断stream
      • 没有stream,调原生接口获取stream
      • 有stream,开始updateWebRtcRemoteDeskConfig,开始走webrtc流程(offer、answer等)
  • 操作问题,所有进入远程控制的用户都可以进行操作(或者可以加个限制或者切换,一种是控制模式,另一种是观看模式)。
  • 结束远程控制,用户结束远程控制。
    • 一对多,断开一个不能影响其他连接
    • 被控端判断有没有用户连接,只有当所有用户都断开连接的时候,才显示已断开远程连接。

实际

  • a用户远程客户端
  • 客户端收到a用户的远程请求,获取stream,然后和a用户进行webrtc处理
  • b用户远程客户端
  • 客户端收到b用户的远程请求,获取stream,然后和a用户进行webrtc处理

File: doc/设计资源.md

图标

iconfont

阿里云官网:https://www.iconfont.cn/collections/detail?cid=16472


File: doc/项目代码.md

项目代码

  1. BilldDesk 从未发布 1.0 稳定版,因此不建议开发者使用,当然了,你仍然可以从 github commit 获取。

参与 BilldDesk 开发

能量是守恒的。作者自认为不聪明,但执行力 100%,BilldDesk 整个项目都是经过不断的试错得到的结果。要想参与 BilldDesk 开发,必须满足下面条件之一:

  1. 你让我觉得你对 BilldDesk 的开发有实际帮助(1+1=2)。
  2. 你让我觉得你对 BilldDesk 的开发有非常多帮助(1+1>2)。
  3. 你使用钞能力(1+1<2):https://desk.hsslive.cn/#/price

File: test/test.json

{
"forceVersion": "0.0.100",
"noiceVersion": "0.0.100",
"currentVersion": "0.0.100",
"mustForceVersion": [
"0.0.100",
"0.0.101"
],
"versionList": [
{
"version": "0.0.100",
"showVersion": "v0.0.100",
"download": "https://res.ldmnq.com/xdyun/download/XD-YunInst_v1.0.2.2.exe",
"updateContent": "更新内容:1、优化部分系统崩溃问题;2、优化同步操作,批量操作交互体验;",
"updateDate": "2024年10月22日11:08:51"
}
]
}


File: .github/CONTRIBUTING.md

参与billd-desk

贡献者

  1. galaxy-s10
  2. xiaolu289

File: .github/ISSUE_TEMPLATE/1-bug.yml

[Binary file]


File: .github/ISSUE_TEMPLATE/2-feature.yml

name: "\U0001F680 BilldDesk功能建议"
body:

  • type: markdown
    attributes:
    value: |
    BilldDesk自2024年2月底开始开发,经过不断迭代升级,逐步趋向完善!
  • type: textarea
    id: feat
    attributes:
    label: 请说出你的想法
    placeholder: 详细描述你的想法
    validations:
    required: true

File: .github/ISSUE_TEMPLATE/config.yml

blank_issues_enabled: false
contact_links: