# 🎬 Live Delayed Playback — 直播延迟播放系统

> 粘贴直播链接 → 自动识别平台 → 延迟任意时长播放

支持 **B站** / **抖音** / **咪咕视频** / **CCTV5** / **直连m3u8**，统一接口，一键延迟。

---

## 📦 下载安装

### 方式一：完整安装包（推荐 Windows 用户）

> 适合不想折腾环境的用户，一键安装所有依赖。

| 下载项 | 大小 | 说明 |
|--------|------|------|
| [📦 运行环境依赖包](https://gitee.com/asd4422449/live-delay-player/releases/download/v0.3.6/deps_package.7z.001) | 87 MB | 含 Python + FFmpeg + Flask 离线包 |

**安装步骤：**

```
1️⃣  克隆或下载本项目源码
       ↓
2️⃣  下载上方「运行环境依赖包」(87MB)
       ↓
3️⃣  用 7-Zip 解压依赖包到项目根目录
       （会生成「运行环境依赖包」文件夹）
       ↓
4️⃣  双击「安装环境.bat」
       （自动检测并配置 Python + FFmpeg + Flask）
       ↓
5️⃣  双击「启动.bat」启动服务
       ↓
6️⃣  浏览器打开 http://localhost:8090
```

> 💡 如果没有 7-Zip，从 [7-zip.org](https://7-zip.org/) 下载安装

### 方式二：手动安装（开发者 / Mac & Linux）

<details>
<summary>点击展开手动安装步骤</summary>

```bash
# 1. 安装 Python 3.9+
pip install flask

# 2. 安装 FFmpeg（需在 PATH 中）
#    Windows: winget install ffmpeg
#    macOS:   brew install ffmpeg
#    Linux:   sudo apt install ffmpeg

# 3. 安装 Node.js 20+（咪咕/飞速直播需要）
cd scripts && npm install && npx playwright install chromium-headless-shell && cd ..

# 4. 创建运行时目录
mkdir -p hls recordings

# 5. 启动服务
python server_portable.py
```

</details>

### 🔌 浏览器捕获扩展（Chrome）

> 自动捕获已登录页面的直播流，转发给延迟播放器，无需手动粘贴链接。

```
1️⃣  下载本项目，进入 extension/ 目录
       ↓
2️⃣  Chrome 打开 chrome://extensions
       ↓
3️⃣  右上角开启「开发者模式」
       ↓
4️⃣  点击「加载已解压的扩展程序」→ 选择 extension/ 文件夹
       ↓
5️⃣  打开直播间页面，扩展自动发现直播流
       ↓
6️⃣  点击扩展图标 → 选择流 → 点击「开始捕获」
```

---

## ✨ 功能特性

- 🔗 **粘贴即用** — 输入直播链接，自动识别平台（B站/抖音/咪咕/CCTV5/直连m3u8）
- ⏱️ **秒级延迟** — 滑块 10s~30min，精确到 5 秒
- 🎛️ **实时调延迟** — 拖动滑块即时生效，无需重载
- 📺 **多平台** — B站直播 / 抖音直播 / 咪咕视频 / CCTV5 / 飞速直播 / 直连 m3u8
- 🔌 **浏览器扩展** — Chrome MV3 扩展自动捕获直播流，支持已登录页面
- 💻 **纯本地** — 无云端依赖，数据不经过第三方

---

## 🎯 使用方式

### 方式 A：浏览器扩展自动捕获（推荐）

1. 确保延迟播放器服务正在运行（`http://localhost:8090`）
2. 安装浏览器捕获扩展
3. 打开任意直播间页面（如 B站直播间）
4. 点击扩展图标 → 选择发现的流 → 点击「开始捕获」
5. 回到 `http://localhost:8090` 即可观看延迟直播

### 方式 B：手动粘贴链接

1. 启动服务后打开 `http://localhost:8090`
2. 在输入框粘贴直播间地址
3. 设置延迟时长，点击播放

### 支持的输入格式

| 输入示例 | 自动识别 |
|---------|---------|
| `https://live.bilibili.com/22747736` | B站直播 |
| `22747736` | B站直播 |
| `https://live.douyin.com/123456789` | 抖音直播 |
| `https://www.miguvideo.com/p/live/120000575503` | 咪咕直播 |
| `https://www.fszb30.com/broadcast/details?room_id=288395848&sport_id=1` | 飞速直播 |
| `http://xxx.com/live.m3u8` | 直连 m3u8 |

---

## 🏗️ 工作原理

```
用户粘贴URL / 扩展捕获流
       ↓
detect_source() 识别平台
    ├── B站:     urllib → B站API → FLV流 → ffmpeg → HLS
    ├── 抖音:    页面解析 → HLS/FLV流 → ffmpeg → HLS
    ├── 咪咕:    Node.js → WASM ddCalcu → m3u8流 → ffmpeg → HLS
    ├── 飞速直播: Playwright → 浏览器抓包 → FLV流 → ffmpeg → HLS
    └── 直连:    直接喂给 ffmpeg → HLS
                        ↓
         ffmpeg 转 HLS (900片滑动窗口)
                        ↓
         hls.js 前端播放 → 滑块控制延迟
```

延迟通过**服务端生成延迟 m3u8** 实现：根据滑块值，m3u8 直接从 N 秒前的 TS 分片开始，前端无需任何延迟技巧。

---

## 📁 项目结构

```
├── 启动.bat               # Windows 一键启动
├── 安装环境.bat            # Windows 一键安装依赖（ASCII 入口）
├── install-env.ps1        # 安装脚本（PowerShell）
├── server_portable.py     # 主服务 (Flask API + HLS + WebSocket 捕获)
├── 运行环境依赖包/          # 离线依赖（需下载 Release 附件）
│   ├── ffmpeg.exe         # FFmpeg (138MB)
│   ├── ffprobe.exe        # FFprobe (138MB)
│   ├── python-3.12.10/    # Python 嵌入式版 (免安装)
│   └── packages/          # Flask 及依赖离线 whl
├── extension/             # Chrome MV3 浏览器扩展
│   ├── manifest.json
│   ├── background.js      # Service Worker (捕获转发)
│   ├── content/
│   │   └── capture-content.js  # 媒体流发现
│   └── popup/
│       └── popup.js       # 扩展弹窗 UI
├── web/
│   ├── index.html         # 延迟播放器前端
│   └── nav.html           # 足球解说导航页
├── anchors.json           # 主播列表配置
├── docker-compose.yml     # Docker 部署（可选）
├── scripts/
│   ├── server.py          # Docker 版服务
│   ├── migu_stream.js     # 咪咕视频流解析
│   └── fszb_stream.js     # 飞速直播流解析
├── config/
│   └── recorder.json      # 录制器配置
├── hls/                   # HLS 分片输出（运行时生成）
└── recordings/            # 录制输出（运行时生成）
```

---

## 📥 下载汇总

| 资源 | 链接 | 说明 |
|------|------|------|
| 📦 运行环境依赖包 | [Gitee Release](https://gitee.com/asd4422449/live-delay-player/releases/download/v0.3.6/deps_package.7z.001) | 87MB，含 Python+FFmpeg+Flask |
| 📂 完整源码 | [Gitee 仓库](https://gitee.com/asd4422449/live-delay-player) | 克隆或下载 ZIP |
| 📂 GitHub 镜像 | [GitHub 仓库](https://github.com/HuanTongqichetuzhuang/Live-delayed-playback.git) | GitHub 镜像 |
| ⚽ 解说导航页 | [足球闹钟.top/nav](https://足球闹钟.top/nav) | 在线主播导航 |

---

## 📋 系统要求

- **系统**：Windows 10/11 64位（推荐）/ macOS / Linux
- **PowerShell**（Windows 自带）
- **7-Zip**（解压依赖包，从 [7-zip.org](https://7-zip.org/) 安装）
- **Chrome 浏览器**（使用浏览器捕获扩展时需要，v114+）

---

## 🔧 常见问题

<details>
<summary><b>启动时提示「找不到 ffmpeg」</b></summary>

确保 `运行环境依赖包/` 文件夹在项目根目录下，重新运行 `安装环境.bat`。
或手动安装 FFmpeg 并添加到系统 PATH。

</details>

<details>
<summary><b>浏览器扩展没有发现直播流</b></summary>

1. 确保已打开直播间页面（不是首页）
2. 点击扩展图标刷新发现列表
3. 确保延迟播放器服务正在运行（`http://localhost:8090` 可访问）
4. 某些平台需要先开始播放视频

</details>

<details>
<summary><b>播放卡顿 / 转圈</b></summary>

- 降低延迟时长（短延迟更稳定）
- 检查网络带宽
- 确保 ffmpeg 进程正常运行

</details>

<details>
<summary><b>端口 8090 被占用</b></summary>

修改 `server_portable.py` 中的 `PORT = 8090` 为其他端口，同时修改扩展的 WebSocket 连接端口。

</details>

---

## 🌐 相关链接

- ⚽ [足球闹钟 App](https://足球闹钟.top/) — 2026世界杯赛事提醒，覆盖48国104场对决
- ⚽ [足球解说导航](https://足球闹钟.top/nav) — 知名足球解说主播聚合导航

---

## License

MIT
