新增拉流转推功能,并按业务重设计摄像头/拉流独立界面
支持 RTMP/SRT/HLS/FLV/WHEP 拉流到 YouTube;摄像头与拉流页采用独立工作台布局,更新 README 文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
76
README.md
76
README.md
@@ -23,6 +23,7 @@ Windows 桌面端 **抖音 → YouTube 无人转播** 控制台:内置 Electro
|
||||
- [推流诊断 / 质量守卫 / 转播历史](#推流诊断--质量守卫--转播历史)
|
||||
- [youLIVE 目标端监控](#youlive-目标端监控)
|
||||
- [摄像头直推](#摄像头直推)
|
||||
- [外部拉流转推](#外部拉流转推)
|
||||
- [会员登录门禁(可选)](#会员登录门禁可选)
|
||||
- [开发与构建](#开发与构建)
|
||||
- [打包发布](#打包发布)
|
||||
@@ -84,7 +85,7 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Electron 渲染进程 (React + Vite) │
|
||||
│ 直播 / 摄像头 / 网络 / 系统 │
|
||||
│ 直播 / 摄像头 / 拉流 / 网络 / 系统 │
|
||||
└───────────────────────────┬─────────────────────────────────────┘
|
||||
│ preload (contextBridge)
|
||||
┌───────────────────────────▼─────────────────────────────────────┐
|
||||
@@ -103,8 +104,9 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
│
|
||||
┌───────────────────┼───────────────────┐
|
||||
▼ ▼ ▼
|
||||
youtube2.py douyin_youtube_ffplay.py tiktok*.py
|
||||
│ │
|
||||
youtube2.py douyin_youtube_ffplay.py camera_youtube.py
|
||||
│ │ │
|
||||
│ pull_stream_youtube.py │
|
||||
└──────── FFmpeg + Supervisor / PM2 ────────────────┘
|
||||
```
|
||||
|
||||
@@ -118,6 +120,7 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
| 配置治理 | `web2_config_governance.py` | 保存前备份、恢复 |
|
||||
| 多频道 | `web2_relay_pro.py` | `youtube_channels.json`、`config/relay_pro/` |
|
||||
| 摄像头 | `web2_camera.py`, `camera_youtube.py` | DirectShow 采集、NVENC 推流 |
|
||||
| 拉流 | `web2_pull_stream.py`, `pull_stream_youtube.py` | RTMP/SRT/HLS/FLV/WHEP 拉流转推 |
|
||||
| youLIVE | `electron/src/youlive/` | YouTube 监听、弹幕、账号、桌面通知 |
|
||||
| 主进程 | `electron/src/main/` | 运行时打包、IPC、本地 DB |
|
||||
| 界面 | `electron/src/renderer/` | React SPA |
|
||||
@@ -131,7 +134,7 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
├── electron/ # 无人直播助手(Electron + React)
|
||||
│ ├── src/main/ # 主进程
|
||||
│ ├── src/preload/ # contextBridge
|
||||
│ ├── src/renderer/ # UI(直播 / 摄像头 / 网络 / 系统)
|
||||
│ ├── src/renderer/ # UI(直播 / 摄像头 / 拉流 / 网络 / 系统)
|
||||
│ ├── src/youlive/ # 内嵌 youLIVE(主进程服务 + 共享类型)
|
||||
│ └── scripts/ # 离线运行时、图标
|
||||
├── web2.py # FastAPI 入口
|
||||
@@ -141,6 +144,7 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
├── runtime/youtube_relay/ # 转播会话 sessions.sqlite
|
||||
├── src/ # 录制核心(spider、stream、room…)
|
||||
├── camera_youtube.py # 摄像头→YouTube worker
|
||||
├── pull_stream_youtube.py # 外部拉流→YouTube worker
|
||||
├── douyin_youtube_ffplay.py # 抖音→YouTube 转播
|
||||
├── youtube2.py # YouTube worker
|
||||
├── docs/ # 补充文档
|
||||
@@ -153,11 +157,16 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
|
||||
| 页面 | 说明 |
|
||||
|------|------|
|
||||
| **直播** | 单频道 / Pro:抖音源站转播、密钥、监听、启停、链路诊断、转播历史 |
|
||||
| **摄像头** | 物理摄像头 + 麦克风 → FFmpeg → YouTube(`camera_youtube` 进程) |
|
||||
| **直播** | 抖音源站无人转播:单频道 / Pro、链路诊断、转播历史、youLIVE 目标端监控 |
|
||||
| **摄像头** | 本机采集直推:设备预览、采集/编码配置、独立控制台(进程 `camera_youtube`) |
|
||||
| **拉流** | 外部流转推:RTMP/SRT/HLS/FLV/WHEP 拉流、转码或流复制(进程 `pull_stream_youtube`) |
|
||||
| **网络** | 测速、代理 |
|
||||
| **系统** | 负载、开机启动、路径、会员登录限制开关 |
|
||||
|
||||
**直播** 页面向抖音无人转播业务,含 Pro 多频道、三层链路诊断、转播历史等。
|
||||
|
||||
**摄像头** / **拉流** 页各自独立 UI 与工作流,不复用直播页布局;侧栏深链 `--nav=camera` / `--nav=pull` 可直达。
|
||||
|
||||
直播页能力摘要:
|
||||
|
||||
- **自适应轮询**:推流中 ~0.8s,空闲 ~4s,后台标签 ~30s
|
||||
@@ -191,6 +200,8 @@ uvicorn web2:app --host 127.0.0.1 --port 8001 --reload
|
||||
| 诊断 | `GET /youtube/quality_guard` | 质量评分(诊断内部复用) |
|
||||
| 摄像头 | `GET /camera/devices` | FFmpeg 枚举音视频采集设备 |
|
||||
| 摄像头 | `GET/POST /camera/config` | 读写 `camera_live.ini` |
|
||||
| 拉流 | `GET/POST /pull_stream/config` | 读写 `pull_stream.ini` |
|
||||
| 拉流 | `GET /pull_stream/protocols` | 协议预设与示例地址 |
|
||||
| 历史 | `GET /youtube/relay/sessions` | 转播会话 |
|
||||
| 历史 | `POST /youtube/relay/sessions/import` | 从 PM2 日志导入 |
|
||||
| 网络 | `GET /network_status` `GET/POST /proxy_config` | 测速与代理 |
|
||||
@@ -221,6 +232,7 @@ Electron 主进程自动注入 API 鉴权头。
|
||||
| `config/google_oauth.example.json` | YouTube OAuth 模板 |
|
||||
| `config/ffmpeg_proxy.ini` | FFmpeg 代理 |
|
||||
| `config/camera_live.ini` | 摄像头采集参数(见 `camera_live.example.ini`) |
|
||||
| `config/pull_stream.ini` | 外部拉流参数(见 `pull_stream.example.ini`) |
|
||||
| `backup_config/__web__/` | 配置版本备份 |
|
||||
| `runtime/youtube_relay/sessions.sqlite` | 转播会话库 |
|
||||
| 用户数据目录 `client-data.sqlite` | Electron 本地事件与快照 |
|
||||
@@ -298,21 +310,55 @@ Electron 主进程自动注入 API 鉴权头。
|
||||
| **桌面通知** | 推流未到达 YouTube、目标端下播、弹幕关键词命中时通知(需在 youLIVE 设置中开启) |
|
||||
| **本地存储** | `youlive` SQLite 保存监听项、会话、告警历史 |
|
||||
|
||||
直播页 **YouTube 目标端监控** 面板在 Pro / 单路模式下自动同步监听地址;摄像头页亦可绑定 `youtube_watch_url` 做目标端校验。
|
||||
直播页 **YouTube 目标端监控** 面板在 Pro / 单路模式下自动同步监听地址。
|
||||
|
||||
---
|
||||
|
||||
## 摄像头直推
|
||||
|
||||
**摄像头** 页将本机物理摄像头 + 麦克风经 FFmpeg 直推 YouTube RTMPS,进程名 `camera_youtube`(与抖音转播 `youtube2` 独立)。
|
||||
**摄像头** 页面向本机采集业务,布局为「预览 + 控制台」:左侧实时画面预览,右侧采集→编码→YouTube 链路状态与启停。
|
||||
|
||||
1. 在界面选择 **视频设备** / **音频设备**(后端 `GET /camera/devices` 枚举 DirectShow 设备)。
|
||||
2. 设置分辨率、帧率、码率;可选 NVENC 硬件编码。
|
||||
进程名 `camera_youtube`,与抖音转播 `youtube2` 独立,请勿同时开启冲突 worker。
|
||||
|
||||
1. 选择 **视频设备** / **音频设备**(`GET /camera/devices` 枚举 DirectShow)。
|
||||
2. 设置分辨率、帧率、码率;可选 NVENC。
|
||||
3. 填写 YouTube **串流密钥**(复用 `config/youtube.ini`)。
|
||||
4. 可选填写 **YouTube 直播页地址** 供目标端监听。
|
||||
5. 点击 **开始直播**。
|
||||
4. 点击 **开始直播**。
|
||||
|
||||
配置持久化于 `config/camera_live.ini`(模板见 `config/camera_live.example.ini`)。
|
||||
配置:`config/camera_live.ini`(模板 `config/camera_live.example.ini`)。
|
||||
|
||||
---
|
||||
|
||||
## 外部拉流转推
|
||||
|
||||
**拉流** 页面向已有流媒体管线:从 SRS、OBS、其他节点提供的地址拉流,转码或复制后推到 YouTube Live。
|
||||
|
||||
进程名 `pull_stream_youtube`。
|
||||
|
||||
### 支持协议
|
||||
|
||||
| 协议 | 示例 |
|
||||
|------|------|
|
||||
| RTMP / RTMPS | `rtmp://127.0.0.1/live/stream` |
|
||||
| SRT | `srt://host:10080?mode=caller&streamid=…` |
|
||||
| HLS | `https://example.com/live/index.m3u8` |
|
||||
| HTTP-FLV | `http://127.0.0.1:8080/live/stream.flv` |
|
||||
| WebRTC (WHEP) | `whep://…`(需 FFmpeg 支持;否则经 SRS 转 RTMP/SRT) |
|
||||
| UDP / MPEG-TS | `udp://@:1234` |
|
||||
|
||||
### 处理模式
|
||||
|
||||
- **转码**(默认):H.264 + AAC,兼容 YouTube
|
||||
- **流复制**:源须已是 H.264 + AAC,延迟更低
|
||||
|
||||
### 使用步骤
|
||||
|
||||
1. 打开 **拉流** 页,填写拉流 URL(可点协议预设快速填入示例)。
|
||||
2. 选择协议(可自动识别)、转码/复制、码率与 NVENC。
|
||||
3. 填写 YouTube 串流密钥 → **开始转推**。
|
||||
4. SRT 延迟、断线重连、额外 FFmpeg 参数等在「高级参数」中配置。
|
||||
|
||||
配置:`config/pull_stream.ini`(模板 `config/pull_stream.example.ini`)。
|
||||
|
||||
---
|
||||
|
||||
@@ -380,7 +426,9 @@ pnpm dist
|
||||
| `relay_slow` / 掉帧 | 查 NVENC;降分辨率;关占用 CPU 的程序 |
|
||||
| Pro 无法启动 | 勿 `WEB2_SUPERVISOR=pm2`;每频道密钥与 URL 已保存;检查配对冲突横幅 |
|
||||
| 摄像头无画面 | 确认 DirectShow 设备名与 `camera_live.ini` 一致;尝试关闭 GPU 编码 |
|
||||
| 目标端监听无数据 | 确认 `youtubeWatchUrl` / `youtube_watch_url` 已填写;youLIVE 桌面通知已开启 |
|
||||
| 拉流连接失败 | 核对协议与 URL;SRT 检查 caller/streamid;WebRTC 建议经 SRS 转 RTMP |
|
||||
| 拉流有画面 YouTube 无 | 流复制模式下源可能非 H.264+AAC,改转码模式 |
|
||||
| 目标端监听无数据 | 直播页确认 `youtubeWatchUrl` 已填写;youLIVE 桌面通知已开启 |
|
||||
| 配置误改 | 直播页 **历史备份** 或 `POST /config/restore` |
|
||||
|
||||
日志:
|
||||
|
||||
Reference in New Issue
Block a user