Deno Desktop Stream
一个简易的局域网桌面分享命令行应用。主机在浏览器选择桌面、窗口或应用进行分享,客机通过主机端口打开观看页面。
当前传输链路使用 WebRTC,服务端只负责页面托管和 WebSocket 信令转发。
功能
- 浏览器原生屏幕/窗口/应用采集
- 可选系统音频或标签页音频,取决于浏览器和被分享内容
- 局域网低延迟观看
- 主机页面和观看页面由同一个服务提供
- 可打包为单个 Windows exe
依赖
- Deno 2.x
Deno 仅用于开发、检查和打包。打包后的 exe 不需要安装 Deno、Node.js、npm、FFmpeg 或 node-media-server。
观看和分享需要现代浏览器,建议使用 Chrome 或 Edge。
开发运行
deno task start
默认监听 8080:
- 主机页面:
http://localhost:8080/ - 观看页面:
http://localhost:8080/viewer
自定义端口:
deno run -A src/main.ts --port 9090
检查代码:
deno task check
打包 exe
deno task compile
输出文件:
dist/media-server.exe
打包时会把 public/ 页面资源嵌入 exe。分发给别人时只需要这个 exe 文件。
运行 exe:
.\dist\media-server.exe
指定端口:
.\dist\media-server.exe --port 8081
使用方式
- 主机运行服务。
- 主机打开
http://localhost:8080/,点击“选择桌面或应用”。 - 客机在同一局域网访问
http://<主机IP>:8080/viewer。 - 如果 Windows 防火墙弹窗,允许当前网络访问。
主机分享页建议从 localhost 打开。浏览器只允许在安全上下文中调用屏幕分享,localhost 属于浏览器允许的安全上下文。客机观看页不需要调用屏幕分享,可以用局域网 IP 访问。
常见问题
端口被占用
如果启动时看到:
Port 8080 is already in use.
说明当前端口已经被其他程序占用。可以换端口启动:
.\dist\media-server.exe --port 8081
也可以关闭占用端口的进程后再启动。
客机打不开页面
- 确认主机和客机在同一局域网。
- 确认访问的是主机局域网 IP,不是
localhost。 - 确认 Windows 防火墙允许该程序访问当前网络。
- 确认端口没有被路由器、杀毒软件或公司网络策略拦截。
跨公网访问
局域网内通常不需要额外服务。跨公网或复杂 NAT 时,WebRTC 可能需要 TURN 服务,本项目默认只配置了公共 STUN。
项目结构
.
├── deno.json # Deno 任务和编译配置
├── public/ # 浏览器页面和前端逻辑
├── src/main.ts # HTTP 服务和 WebRTC 信令服务
└── README.md
Git 提交建议
建议提交源码和静态页面,不提交构建产物:
deno.json
README.md
.gitignore
src/
public/
dist/、media/、本地缓存和日志已经在 .gitignore 中忽略。
Description
第一版
Latest
Languages
TypeScript
50.5%
JavaScript
33.8%
CSS
8.4%
HTML
7.3%