media-sever/README.md
2026-07-07 08:36:01 +01:00

132 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` 中忽略。