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

3.0 KiB
Raw Blame History

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

使用方式

  1. 主机运行服务。
  2. 主机打开 http://localhost:8080/,点击“选择桌面或应用”。
  3. 客机在同一局域网访问 http://<主机IP>:8080/viewer
  4. 如果 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 中忽略。