132 lines
3.0 KiB
Markdown
132 lines
3.0 KiB
Markdown
# 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` 中忽略。 |