WebRTC 局域网屏幕共享系统,支持音视频传输
Project description
QuietLink v1.0.0 - WebRTC 局域网屏幕共享
基于 WebRTC 的纯局域网屏幕共享系统,支持音视频传输,无需互联网连接。
English | |
|
在线体验
访问 https://quietlink.onrender.com/ 体验在线 Demo。
安装方式
方式一:使用 PyPI 安装(推荐)
# 使用 pip 安装
pip install quietlink==1.0.0
# 或使用 uv 安装(更快)
uv pip install quietlink==1.0.0
# 启动服务(注意:现代浏览器要求 HTTPS 才能使用 WebRTC,如果不了解技术细节,请直接使用 HTTPS)
quietlink --port 8443 --https
quietlink --port 9000 --http
方式二:使用 Docker 部署
单架构部署(快速)
# HTTPS 模式(推荐,现代浏览器要求)
docker run -d -p 8443:8443 \
-e PORT=8443 \
-e HTTPS=true \
--name quietlink-https \
percyc/quietlink:v1.0.0
# HTTP 模式(需要额外设置 HTTPS 代理)
docker run -d -p 8080:8080 \
-e PORT=8080 \
-e HTTPS=false \
--name quietlink \
percyc/quietlink:v1.0.0
多架构部署(支持 AMD64 + ARM64)
# 使用 buildx 构建(首次需要启用)
docker buildx create --use
# 自动构建并推送多架构
docker buildx build --platform linux/amd64,linux/arm64 \
-t percyc/quietlink:v1.0.0 \
-t percyc/quietlink:latest \
--push .
# 或直接拉取使用
docker run -d -p 8080:8080 \
-e PORT=8080 \
-e HTTPS=false \
--name quietlink \
percyc/quietlink:latest
使用 Docker Compose
# 复制提供的 docker-compose.yml
docker-compose up -d
# 或自定义配置
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
quietlink:
image: percyc/quietlink:latest
container_name: quietlink
ports:
- "8080:8080"
environment:
- PORT=8080
- HTTPS=false
restart: unless-stopped
EOF
docker-compose up -d
方式三:本地开发
# 克隆仓库
git clone https://github.com/percyc/quietlink.git
cd quietlink
# 使用 uv 同步依赖
uv sync
# 启动开发服务器(推荐 HTTPS 模式)
./start.sh 8443 https
# 或 HTTP 模式(需要额外设置 HTTPS 代理)
./start.sh 8080
功能特点
- 📺 屏幕共享:主机端可共享整个屏幕或单个窗口
- 🔊 音频传输:支持系统音频共享(Chrome/Edge),可选启用
- 👁️ 实时观看:客户端可实时观看共享内容
- 🔒 房间隔离:6位数字房间码,确保私密性
- ✅ 授权机制:主机需手动批准客户端加入请求
- 📴 纯内网运行:无需 STUN/TURN 服务器,无需互联网
- 📱 移动端支持:支持手机全屏观看,响应式设计
- 🎨 美观界面:现代化渐变设计,优秀的用户体验
- 🌐 多架构支持:Docker 镜像支持 AMD64 和 ARM64(Mac、树莓派等)
- 🔧 简单部署:PyPI 一键安装,Docker 秒级启动
命令行参数
quietlink [选项]
选项:
-h, --help 显示帮助信息
--port, -p PORT 服务器端口(默认: 8080)
--https 启用 HTTPS 模式(自动生成自签名证书)
示例:
quietlink 在默认端口 8080 启动
quietlink --port 9000 在端口 9000 启动
quietlink --https 启用 HTTPS 模式
使用说明
共享端(Host)
- 启动服务:
quietlink --port 8443 --https - 打开浏览器访问
https://<服务器IP>:8443/host.html - 勾选"共享系统音频"(可选,默认关闭)
- 点击"开始屏幕共享"按钮
- 选择要共享的屏幕或窗口
- 系统生成 6 位房间码(如:123456)
- 将房间码告知观看端
- 收到加入请求时点击"同意"授权
观看端(Client)
- 打开浏览器访问
https://<服务器IP>:8443/client.html - 输入房间码(如:123456)
- 点击"加入"
- 等待主机批准
- 连接成功后可以点击"开启声音"播放音频(如果主机共享了音频)
- 支持全屏观看
重要提醒
现代浏览器(Chrome、Edge、Firefox 等)出于安全考虑,要求 HTTPS 环境才能使用 WebRTC 功能。如果您使用 HTTP 部署,将无法建立音视频连接,需要额外设置 HTTPS 代理。建议直接使用 HTTPS 模式部署以避免不必要的配置。
音频功能
主机端
- 默认不传输音频,保护隐私
- 勾选"共享系统音频"可启用音频传输
- Chrome/Edge 支持系统音频捕获
- Firefox 仅支持麦克风(不推荐)
客户端
- 默认静音,需要手动点击"开启声音"
- 可以随时点击静音/取消静音按钮控制音频
- 全屏模式下音频控制按钮仍然可用
注意事项
- 音频传输会增加网络带宽占用
- 首次使用时浏览器会请求音频权限
- 系统音频捕获需要用户明确授权
网络要求
必须在同一局域网内(同一网段,如 192.168.1.x)才能正常连接。
WebRTC 在同一网段内可以直接通过本地 IP 建立连接,无需 STUN/TURN 服务器。
端口说明
| 端口 | 用途 | 说明 |
|---|---|---|
| 8080 | HTTP/WebSocket | 信令服务和页面服务(需要额外 HTTPS 代理) |
| 8443 | HTTPS | 安全连接(推荐,现代浏览器必需) |
云端部署
项目支持 Render 部署。
Render 部署
- 连接 GitHub 仓库到 Render
- 创建新的 Web Service
- 选择 Python 环境,自动检测依赖
- 部署完成获得
https://<app-name>.onrender.com地址
注意:当前项目设计为局域网使用。在公网环境部署后,WebRTC P2P 连接需要额外的 STUN/TURN 服务器支持。公网部署仅供体验,建议在内网环境使用以获得最佳性能。
故障排查
WebRTC 连接失败 / 视频黑屏
- 首先确认是否使用 HTTPS:现代浏览器要求 HTTPS 才能使用 WebRTC
- 如果使用 HTTP,请改用 HTTPS 模式:
quietlink --port 8443 --https - 检查浏览器控制台是否有 HTTPS 或 WebRTC 相关错误
- 在 Firefox 地址栏输入
about:webrtc查看详细日志 - 确认两端在同一网段
HTTP vs HTTPS 说明
- HTTP:仅适用于开发调试,需要额外设置 HTTPS 代理才能使用
- HTTPS:现代浏览器必须要求,自动生成自签名证书
- 如果您看到 "getUserMedia is not allowed in insecure contexts" 错误,说明需要 HTTPS
无声音
- 主机端:确认已勾选"共享系统音频"
- 客户端:点击"开启声音"按钮取消静音
- 检查浏览器是否授予了音频播放权限
- 确认使用的是 Chrome/Edge(支持系统音频)
- 查看浏览器控制台是否有
[Audio] Audio track received日志
音频捕获失败
- 检查浏览器是否支持系统音频(Chrome/Edge)
- 确认已授予音频捕获权限
- 尝试刷新页面重新连接
- 音频捕获失败不影响视频共享
客户端无法访问
- 确认防火墙放行了 8080 端口
- 检查 SELinux/AppArmor 设置
- 确认在同一局域网内
全屏按钮不可见
- 刷新页面重新加载
- 检查浏览器是否支持全屏 API
- 尝试点击视频区域触发全屏
项目结构
.
├── quietlink/ # Python 包
│ ├── __init__.py # 包入口
│ ├── server.py # FastAPI 应用
│ ├── cli.py # 命令行工具
│ └── static/ # 静态文件
│ ├── index.html # 主页
│ ├── host.html # 共享端
│ └── client.html # 观看端
├── pyproject.toml # Python 依赖配置
├── Dockerfile # Docker 构建文件
├── docker-compose.yml # Docker 编排文件
├── start.sh # 开发启动脚本
├── LICENSE # MIT 许可证
├── README.md # 项目文档
└── tests/ # 测试目录
技术栈
- 后端:Python 3.14+ + FastAPI + WebSocket
- 前端:原生 JavaScript + WebRTC API
- 依赖管理:uv(现代 Python 包管理器)
- 音频编解码:Opus(WebRTC 默认)
- 部署方式:PyPI、Docker、本地开发
- HTTPS:自签名证书自动生成,现代浏览器要求
安全说明
- 音频默认禁用,保护用户隐私
- 房间码随机生成,防止暴力破解
- 主机需手动批准客户端加入
- 内网使用,无需暴露到公网
- 自动生成 HTTPS 证书,符合现代浏览器安全要求
- 如需公网部署,请配置强密码和有效的 HTTPS 证书
浏览器兼容性
| 功能 | Chrome/Edge | Firefox | Safari |
|---|---|---|---|
| 视频共享 | ✅ | ✅ | ✅ |
| 系统音频 | ✅ | ❌ | ⚠️ 限制 |
| 麦克风音频 | ✅ | ✅ | ✅ |
| 全屏播放 | ✅ | ✅ | ✅ |
| 移动端 | ✅ | ✅ | ✅ |
| HTTPS 要求 | ✅ 必须 | ✅ 必须 | ✅ 必须 |
重要说明
- 所有现代浏览器都要求在 HTTPS 环境 下才能使用 WebRTC 功能
- HTTP 仅适用于开发调试,生产环境请务必使用 HTTPS
- 自签名证书需要在浏览器中手动信任(通常会出现"您的连接不是私密连接"警告)
许可证
MIT License
相关链接
- PyPI:https://pypi.org/project/quietlink/
- Docker Hub:https://hub.docker.com/r/percyc/quietlink
- GitHub:https://github.com/percyc/quietlink
- Demo:https://quietlink.onrender.com/
更新日志
v1.0.0 (2025-02-10)
- 🎉 首次发布
- ✅ 支持 PyPI 安装
- ✅ 支持 Docker 部署(AMD64 + ARM64)
- ✅ 支持命令行工具
- ✅ 优化的项目结构
- ✅ 完整的文档和示例
贡献
欢迎提交 Issue 和 Pull Request!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quietlink-1.0.0.tar.gz.
File metadata
- Download URL: quietlink-1.0.0.tar.gz
- Upload date:
- Size: 30.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59b91e01030148f0e8ae9f7e08c70b2a88dadb58394f90816d138502e78c09c2
|
|
| MD5 |
ff87c28399664dbb7735762ffa3b372c
|
|
| BLAKE2b-256 |
ba51a0f23268a53a028f472d72b58b43fec01cdbb1a6b5bc220b456e8b0fea22
|
File details
Details for the file quietlink-1.0.0-py3-none-any.whl.
File metadata
- Download URL: quietlink-1.0.0-py3-none-any.whl
- Upload date:
- Size: 28.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4b728ff13b24a4e171bbd37b949435a34444de77bebe40861cc5ca731a092aa
|
|
| MD5 |
71eec49e2d40f10f8ed8d7f9f08d4859
|
|
| BLAKE2b-256 |
a520657407d9056656c2c5306061cca534d7058a149519dbc78c7b9d699a55fc
|