扫一次码,把手机变成第二块屏:跑通 Deskreen 屏幕共享
扫一次码,把手机变成第二块屏:跑通 Deskreen 屏幕共享
【免费下载链接】deskreenDeskreen turns any device with a web browser into a secondary screen for your computer. ⭐️ Star to support our work!项目地址: https://gitcode.com/gh_mirrors/de/deskreen
Deskreen 屏幕共享是一款开源的 Electron 应用:在电脑上装一个主机端,任何带浏览器的设备——手机、平板、笔记本——打开一个网页就能实时看到你的屏幕。视频流走 WebRTC 设备间直传,看的人不装客户端,也不依赖公网中转服务器。
先跑起来
环境要求node>=v23和pnpm>=v10.20.0,装好后按下面步骤走:
git clone https://gitcode.com/gh_mirrors/de/deskreen cd deskreen pnpm i cd src/client-viewer && pnpm i && cd ../.. pnpm clean && pnpm build && pnpm start跑通后你会看到主窗口进入「连接 → 选择 → 确认」三步流程:手机上扫一下窗口里的二维码,主机端弹出确认框点 Allow,选要共享的屏幕或应用窗口,手机浏览器里就开始出画面了。先拿到这个正反馈,再往下看原理。
Deskreen 屏幕共享是怎么干活的
打个比方:它相当于一台架在你电脑上的路由器——只负责让两边"见上面、互换门牌号",视频本身不经过它。落到技术上:应用内嵌了一个 Koa + socket.io 的本地信令服务器,监听 3131 端口(被占用时自动回退到 3132);同局域网的设备打开网页后连上它,按 URL 里的 roomID 进同一个"房间"。屏幕画面则是 Electron 的desktopCapturer在主机端抓屏,再用 simple-peer 建立的 WebRTC 点对点连接直接推给浏览器端播放,信令服务器不参与视频传输。
- 本地信令服务器:Koa + socket.io 起在
0.0.0.0,同时托管观看端页面,按 roomID 把设备路由进房间 - 屏幕捕获服务:枚举桌面里的"屏幕和应用窗口"两类信源,供你选择共享对象,并监听窗口关闭事件
- 共享会话管理:每个连入设备对应一个 SharingSession,驱动"未连接 → 已连接 → 共享中"的状态流转
- 观看端主视图:手机打开的那个 React 页面,负责连信令、交换 SDP 握手信号、播放视频流
三个你大概率会用的场景
把手机变第二屏:多屏工作流
写代码或做设计时,让手机或平板当辅助屏,放代码对照、参考资料或聊天窗口。
- 主机端停在"连接"步骤,手机扫窗口里的二维码
- 主机端收到请求后点 Allow 放行
- 在"选择"步骤挑一整块屏幕或某个应用窗口,确认开始共享
踩坑提醒:两端必须在同一个局域网。手机开热点时电脑也要连上这个热点,否则二维码里的 IP 不可达。
给教室或会议室投屏
这是浏览器屏幕共享工具最典型的用法:讲的人共享屏幕,听众任意设备打开链接就能看到,免安装。
- 主机端开始共享后,把窗口里显示的
http://IP:端口/roomID链接发到群里 - 听众用手机、平板或备用笔记本打开链接
- 网络一般的会议室里,把观看端画质从 100% 调到 60% 或 40% 更稳
效果预期:链接里的 roomID 只在主机端运行期间有效,关掉应用所有观看端都会断开。
远程看着同事的屏幕排问题
办公室里做技术支持或结对排障时,让当事人在自己电脑上跑主机端,你用自己设备打开链接盯着看,不用凑到人家工位旁边。
- 被支持方启动 Deskreen 并扫码/给你链接
- 你打开链接实时看到对方屏幕
- 需要时让对方换共享对象(比如切到出问题的应用窗口)
踩坑提醒:主机端可以随时主动断开某个设备,对方会立刻收到断开提示,所以"看着看"是有边界的。
调一调,让它更顺手
3131 端口被占了怎么办
信令服务器默认主端口 3131、备用端口 3132,定义在 src/common/config.ts。两个都被占时它会随机挑一个空闲端口。你不用改端口,直接以应用窗口里显示的二维码和链接为准即可,里面带的就是实际端口。
画质卡顿时:自动画质是怎么降的
观看端工具栏提供 Auto 和 25% 到 100% 的固定档位。选 Auto 时,帧差比较逻辑 每秒把当前视频帧缩到 1/8 尺寸,用 pixelmatch 和上一帧比像素:连续 3 帧以上差异达到 10% 就降到半画质,画面稳定后再升回去。想手动锁码率,主机端会改写 WebRTC SDP 里的带宽行:
// ... const bitrateLine = `b=AS:${bitrate}`; // 在 SDP 的 m= 媒体行之后插入或替换该行多网卡机器二维码里的 IP 不对
有线 + WiFi 双网卡时,默认选的网卡可能不是你想要的。启动时加--ip指定网卡 IP 就行,macOS / Windows / Linux 的启动命令在 README 里有现成示例,比如 Linux 下:
./Deskreen\ CE-*.AppImage --ip 192.168.1.100往深里走
定制主机端界面:主机端 UI 是一套 React 组件,设置面板在 SettingsOverlay,三步引导流程在src/renderer/src/components/StepsOfStepper/下。想换外观或加设置项,从 renderer 层入手,详见对应源码。
新增一种语言:项目用 i18next,13 个语言的翻译文件放在 src/common/locales/,观看端另有一份。加语言基本就是补一个目录加一个 JSON,详见对应源码。
上生产之前看看这几点
- 信令服务器监听
0.0.0.0,局域网内任何设备都能访问;如果要跨网段使用,前面套一层反向代理做 TLS 终结,别把 3131 裸暴露到公网 - 房间状态存在内存里(
MemoryStore),应用重启后房间状态清零;超过 7 天不活跃的房间每小时轮询自动清理 - 抓屏依赖系统的屏幕录制权限,macOS 首次启动会弹授权;Linux 的 Wayland 会话下屏幕捕获能力受限,源码里有专门检测
- 视频流是设备间 WebRTC 直传,主机端要承担编码开销,多设备同时观看时留意 CPU 占用
- 主机端是单点:它一关,所有观看端立即断开,长时间无人看守的共享要心里有数
这个项目现阶段最适合局域网内的个人多屏和演示场景。想试就照第一节跑一遍,有想实现的功能先去项目 issues 里搜一搜,没有就提一个聊聊你的场景。
【免费下载链接】deskreenDeskreen turns any device with a web browser into a secondary screen for your computer. ⭐️ Star to support our work!项目地址: https://gitcode.com/gh_mirrors/de/deskreen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考