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