DeskShare · Flask MJPEG
浏览器看桌面
远程点一点
基于 Flask 的 MJPEG 桌面串流服务,配合 WebSocket 转发鼠标键盘事件。无需安装浏览器插件,打开网页即可观看本机屏幕并远程操控——适合内网协助、演示与临时监控。
项目用途
将 Windows / Linux 桌面画面以 MJPEG 流推送到浏览器,并允许远端发送鼠标移动、点击与键盘输入。解决「远程看一眼屏幕」「帮同事点几下」的轻量需求。
核心目标
在可信局域网内,用最少依赖实现「可看可控」的桌面共享,无需 TeamViewer 账号或第三方中继。
- IT 支持远程查看用户桌面排障
- 会议室大屏投射本机操作过程
- 平板 / 手机临时充当无线副屏
- 自动化测试流程中人工介入点击
设计理念
协议简单、代码透明、部署极快。MJPEG 可被 img 标签与 curl 直接消费;WebSocket 回传归一化坐标,服务端 pynput 注入输入。
- 完全自建,无第三方云端
- 可按需裁剪远程控制与文件传输
- 托盘图形界面 + 命令行双模式
- 配置写入 %APPDATA%,重启生效
项目特色
轻量内网桌面共享:串流、远程操控与可调画质,Host / Viewer 两端能力合一。
MJPEG 串流
multipart/x-mixed-replace 推送 JPEG 帧,浏览器原生支持,无需 WebRTC 信令服务器。
远程操控
WebSocket 回传归一化坐标与按键事件,服务端 pynput 注入鼠标键盘。
可调帧率
截图间隔、JPEG 质量、缩放比例均可配置,平衡清晰度与带宽占用。
可选密码
启动参数或桌面端设置访问令牌,防止局域网内未授权观看与控制。
状态面板
实时 FPS、延迟、连接数显示,便于调优串流参数与排障。
纯 Python
Flask + mss + Pillow + pynput,依赖清晰,易于二次开发与内网部署。
串流端(Host)
- mss 高速截屏,按设定 FPS 编码 JPEG
- Flask 路由
/stream推送 MJPEG - 支持多观看者共享同一帧捕获线程
- 自适应分辨率缩放,节省带宽
- 托盘图标 / 命令行 / PyInstaller exe 启动
控制端(Viewer)
- Canvas 或 img 渲染 MJPEG 帧
- 鼠标移动 / 单击 / 双击 / 滚轮映射
- 键盘快捷键转发(可配置黑名单)
- 全屏模式、适应窗口与原始比例切换
- 连接状态、FPS 与延迟指示器
交互演示
在浏览器中模拟 MJPEG 串流、远程点击脉冲、观看者管理与画质带宽调优。所有数据均为前端模拟,不连接真实服务。
Demo 1 · MJPEG 画布串流与性能指标
模拟 Flask /stream 路由推送的 JPEG 帧序列,展示 FPS、延迟与带宽读数。
Demo 2 · 远程点击脉冲与事件日志
在上方画布点击,或使用下方快捷键按钮,模拟 WebSocket 远程输入注入。
Demo 3 · 观看者计数与连接管理
模拟多观众共享同一 MJPEG 帧源时的连接列表与在线人数。
Demo 4 · 画质滑块、带宽仪表与密码门
调节 JPEG 质量与缩放比例,观察带宽变化;输入令牌模拟访问鉴权。
状态:未鉴权(演示模式开放)
技术栈
Python 后端 + 浏览器原生能力,无重型客户端依赖。
截屏线程:mss.grab → PIL resize → JPEG → multipart 推送;WebSocket 回传 move/click/key,pynput 注入输入。
快速上手
Step 1
克隆仓库 git clone 或下载 Release,安装依赖 pip install -r requirements.txt。
Step 2
运行 python deskshare_desktop.py,在托盘窗口设置端口与权限,或 python server.py --port 8080。
Step 3
浏览器访问提示的局域网地址,可选输入令牌,即可观看并(若允许)远程操控。
常见问题
Q:公网可以直接暴露吗?
强烈不建议。MJPEG 无内置加密,远程控制风险高。请仅在可信内网使用,或叠加 VPN / 反向代理 TLS 与强令牌。
Q:延迟大概多少?
局域网通常 50–200ms,取决于分辨率、质量、Wi-Fi 状况与截屏 FPS。低于 TeamViewer 中继方案,但 MJPEG 带宽开销更大。
Q:支持多显示器吗?
当前以主显示器截屏为主,可在配置中指定 monitor 索引。多屏切换属于 roadmap 方向。
Q:与 RDP / VNC 有何区别?
RDP/VNC 协议更高效、功能更全;DeskShare 优势在于零客户端安装、Web 即开、源码极简,适合临时查看与轻量协助。
内网桌面共享,现在就试试
下载 DeskShare,一条命令启动串流。观众打开浏览器即可观看——用完记得关闭远程控制。