网络页焕新:IP 画像/质量检测、链路诊断与功能开关

新增 /ip_profile、/ip_quality API 与网络 UI 组件,默认隐藏摄像头/拉流导航;同步更新 README。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-08 12:47:53 +08:00
parent 119e52cfe9
commit ae9531f2c2
23 changed files with 6966 additions and 543 deletions

View File

@@ -20,6 +20,7 @@ Windows 桌面端 **抖音 → YouTube 无人转播** 控制台:内置 Electro
- [web2 API](#web2-api)
- [配置与数据路径](#配置与数据路径)
- [单频道与多频道 Pro](#单频道与多频道-pro)
- [网络诊断 / IP 画像 / 代理](#网络诊断--ip-画像--代理)
- [推流诊断 / 质量守卫 / 转播历史](#推流诊断--质量守卫--转播历史)
- [youLIVE 目标端监控](#youlive-目标端监控)
- [摄像头直推](#摄像头直推)
@@ -116,6 +117,10 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
| 控制面 | `web2.py` | HTTP API |
| 运行时诊断 | `web2_process_runtime.py` | `business_status`、FFmpeg 速度/帧数 |
| 质量守卫 | `web2_quality_guard.py` | 推流质量评分 |
| 网络测速 | `web2_network.py` | 境内外可达性、上下行测速、分流判断 |
| IP 画像 | `web2_ip_profile.py` | 出口 IP 类型(住宅/机房/代理)、洁净度评分 |
| IP 质量 | `web2_ip_quality.py` | 代理/VPN/机房风险、流媒体解锁探测 |
| 功能开关 | `web2_feature_flags.py` | 摄像头/拉流 API 与 worker 显隐 |
| 转播历史 | `web2_relay_log.py` | 会话 SQLite、日志导入 |
| 配置治理 | `web2_config_governance.py` | 保存前备份、恢复 |
| 多频道 | `web2_relay_pro.py` | `youtube_channels.json``config/relay_pro/` |
@@ -135,11 +140,14 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
│ ├── src/main/ # 主进程
│ ├── src/preload/ # contextBridge
│ ├── src/renderer/ # UI直播 / 摄像头 / 拉流 / 网络 / 系统)
│ │ ── components/worker/ # 业务工作台(链路条 / 清单 / 指标)
│ │ ── components/worker/ # 业务工作台(链路条 / 清单 / 指标)
│ │ └── components/network/ # 网络页(链路条 / IP 画像 / IP 质量 / 测速图)
│ ├── src/shared/ # 前后端共享常量(功能开关 featureFlags
│ ├── src/youlive/ # 内嵌 youLIVE主进程服务 + 共享类型)
│ └── scripts/ # 离线运行时、图标
├── web2.py # FastAPI 入口
├── web2_*.py # 后端子模块
├── web2_*.py # 后端子模块(含 ip_profile / ip_quality / feature_flags
├── third_party/IPQuality/ # IP 质量检测脚本参考ip.sh
├── config/ # 运行配置
├── backup_config/__web__/ # 配置自动备份
├── runtime/youtube_relay/ # 转播会话 sessions.sqlite
@@ -161,8 +169,8 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
| **直播** | 抖音源站无人转播:单频道 / Pro、链路诊断、转播历史、youLIVE 目标端监控 |
| **摄像头** | 本机采集直推:设备预览、采集/编码配置、独立控制台(进程 `camera_youtube` |
| **拉流** | 外部流转推RTMP/SRT/HLS/FLV/WHEP 拉流、转码或流复制(进程 `pull_stream_youtube` |
| **网络** | 测速、代理 |
| **系统** | 负载、开机启动、路径、会员登录限制开关 |
| **网络** | 链路诊断、境内外测速、IP 画像与质量、WebRTC 泄露检测、FFmpeg 代理 |
| **系统** | CPU/内存/磁盘/GPU、开机启动、路径、会员登录限制开关 |
**直播** 页面向抖音无人转播业务,含 Pro 多频道、三层链路诊断、转播历史等。
@@ -194,6 +202,19 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
- **源站预览**:解析抖音 URL 并尝试显示主播昵称
- **配对校验**Pro 多线路保存时检测抖音地址 / YouTube 密钥跨频道重复,冲突时展示横幅并阻止启动
**网络** 页面向转播前的出口与链路自检,含:
- **链路快检**:国内源站(抖音)/ Google / 线路分流 / 海外上行 / 录制代理五项状态芯片
- **NetworkPipeline**:源站 → 分流 → YouTube → 上行四段链路条,按可达性与测速结果着色
- **境内外站点卡**Google 与抖音的延迟、上下行测速、解析 IP 与地区
- **IP 出口画像**`GET /ip_profile`):本机默认出口与海外出口的类型(住宅/机房/代理/移动、洁净度评分、WebRTC 本地泄露参考
- **IP 质量检测**`GET /ip_quality`):代理/VPN/Tor/机房风险因子、Abuser 评分、YouTube/Netflix 等流媒体解锁状态
- **测速趋势图**`NetworkSpeedChart` 记录近期上下行采样
- **FFmpeg 代理**:录制/推流专用 HTTP/SOCKS 代理,与系统代理设置联动
- **自动刷新**:约 45s 静默轮询WebRTC 检测完成后自动刷新 IP 画像
> 摄像头 / 拉流功能默认在导航中**隐藏**(见 [功能开关](#功能开关)),代码与 API 仍保留,可按需开启。
---
## web2 API
@@ -220,7 +241,9 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
| 历史 | `GET /youtube/relay/sessions` | 转播会话 |
| 历史 | `POST /youtube/relay/sessions/import` | 从 PM2 日志导入 |
| 网络 | `GET /network_status` `GET/POST /proxy_config` | 测速与代理 |
| 系统 | `GET /system_metrics` `GET /host/gpu_status` | 主机与 NVENC |
| 网络 | `GET /ip_profile` | 出口 IP 画像(可选 `client_tz``client_lang``webrtc_leak` |
| 网络 | `GET /ip_quality` | IP 质量与流媒体解锁探测 |
| 系统 | `GET /system_metrics` `GET /host/gpu_status` | 主机、磁盘、NVENC |
| OAuth | `GET /youtube/oauth/*` | Google 拉取串流密钥UI 可关) |
**可选鉴权**`config/web2_api_token.txt``WEB2_API_TOKEN` 存在时,除 `/health` 外需:
@@ -287,6 +310,42 @@ Electron 主进程自动注入 API 鉴权头。
---
## 网络诊断 / IP 画像 / 代理
**网络** 页帮助在开播前确认「抖音源站可达 + 海外出口可用 + 上行带宽足够」。
### 链路诊断(`GET /network_status`
| 检测项 | 说明 |
|--------|------|
| 国内源站 | 抖音域名可达性与延迟 |
| Google 出口 | YouTube 推流路径可达性 |
| 线路分流 | 对比境内外解析 IP判断代理/TUN 是否生效 |
| 海外测速 | 参考上下行 Mbps测速失败不代表无法推流 |
| 录制代理 | `config/ffmpeg_proxy.ini` 是否已配置 |
### IP 出口画像(`GET /ip_profile`
参考 whoer / ping0.cc 维度,聚合 ip-api.com、ping0.cc 等数据源:
- **默认出口**与**海外出口**(经 Google 探测路径采样)的类型标签
- 住宅 / 机房 / 代理 / 移动判定与洁净度评分
- 浏览器侧 **WebRTC 本地候选**检测(`useWebRtcLeak`),结果通过 `webrtc_leak` 参数回传后端
### IP 质量检测(`GET /ip_quality`
集成 [xykt/IPQuality](https://github.com/xykt/IPQuality) 思路(参考 `third_party/IPQuality/ip.sh`
- 代理、VPN、Tor、机房等风险因子
- 多源 Abuser / IPQS 评分
- YouTube、TikTok、Netflix、Disney+ 等流媒体解锁状态
### FFmpeg 代理
`GET/POST /proxy_config` 读写 `config/ffmpeg_proxy.ini`,供 `youtube2` 等 worker 拉流时使用,与 Windows 系统代理设置独立。
---
## 推流诊断 / 质量守卫 / 转播历史
`GET /status``business_status` 示例:
@@ -398,6 +457,19 @@ Electron 主进程自动注入 API 鉴权头。
---
## 功能开关
摄像头直推与外部拉流转推默认**关闭**(导航隐藏、相关 API 返回 404、PM2 忽略对应 worker以降低首屏复杂度。需要时分别修改
| 位置 | 常量 | 默认 |
|------|------|------|
| `electron/src/shared/featureFlags.ts` | `SHOW_CAMERA_UI``SHOW_PULL_STREAM_UI` | `false` |
| `web2_feature_flags.py` | `SHOW_CAMERA_FEATURE``SHOW_PULL_STREAM_FEATURE` | `False` |
前后端开关需保持一致。深链 `--nav=camera` / `--nav=pull` 在关闭时会回落到 **直播** 页。
---
## 开发与构建
| 组件 | 版本 |
@@ -453,6 +525,9 @@ pnpm dist
| 拉流连接失败 | 核对协议与 URLSRT 检查 caller/streamidWebRTC 建议经 SRS 转 RTMP |
| 拉流有画面 YouTube 无 | 流复制模式下源可能非 H.264+AAC改转码模式 |
| 目标端监听无数据 | 直播页确认 `youtubeWatchUrl` 已填写youLIVE 桌面通知已开启 |
| Google 不可达 / 分流未生效 | **网络** 页查看链路快检;配置 TUN/规则代理;填写 FFmpeg 代理 |
| IP 画像显示机房/代理 | 更换住宅出口或调整代理节点;关注 WebRTC 泄露提示 |
| IP 质量检测超时 | 外网 API 偶发慢;稍后刷新;检查本机防火墙 |
| 配置误改 | 直播页 **历史备份**`POST /config/restore` |
日志: