# MediaHub — 产品业务上下文 (PRODUCT_CONTEXT)

> **长青文档**：MediaHub 是什么、怎么运转、有哪些业务场景。给 AI / 新人做需求前建立整体认知用。
> **本文来源**：2026-07-23 直接登录线上生产环境 `https://mediahub.tvutest.com/mediahub/`（Beta）逐屏只读实测 + 交叉核对既有 `specs/`。所有弹窗均"看完即取消/关闭"，未 Save / 未新建 / 未删除任何对象。
> **性质**：这是"当前线上真实状态"的镜像，不是设计提案。提案/mockup 见 `specs/` `handoffs/`。

---

## 0. 一句话定位

**MediaHub 是 TVU 的云端视频路由 / 分发中枢**：把来自各种协议和设备的**直播源（Source）**接入云端，再路由分发到各种**目的地（Destination）**（流媒体平台 / 协议 / 设备），全程可预览监看、可定时排程、可多用户协作、有实时网络遥测和操作审计。

核心心智模型（贯穿整个产品）：

```
  Source（进）  ──Route（绑定）──►  Destination（出）
  多协议/多设备接入                 多平台/多协议/多设备分发
```

- 主界面就是一块 **左 Source / 右 Destination 的路由看板**，把左边的源连到右边的目的地。
- 面向**专业直播 / 广电 / 制作**用户，是运营级工具（不是消费端 App）。

> **⚠️ Mockup 起手须知（前置门槛，2026-07-30 实证教训）**：做任何 MediaHub 需求前，**先确认功能落在 Source（§3 接入侧）还是 Destination（§4 分发侧）**——两者是**不同的编辑器、不同的字段、不同的动作语义**（见 §5）。**不要照用户 / ticket / Slack 里随口的措辞照单全收**：尤其 **MPTS / 多节目输出 / 推流 / output 类功能默认属 Destination**。
> - 实证：Media Service UR「Multi-channnel to 1 output → MPTS」mockup 因起手没确认，全程误当 **Source** 做（改简化 Source 弹窗），返工后才发现应在 **Destination** 编辑器（`Destination_srt listener` / `issp pull`，且被 `Multi Channels` 开关 gating）。复盘见 tvu-design-system `docs/internal/retrospection/2026-07-30-ur-mpts-program-mapping-mockup.md`。

---

## 1. 线上环境事实（实测 2026-07-23）

| 项 | 值 |
|---|---|
| 生产 URL | `https://mediahub.tvutest.com/mediahub/#/home` |
| 版本标记 | **Beta**（logo 旁角标） |
| 登录账户（本次） | `loralv@tvunetworks.com`，角色 **Admin** |
| 时区显示 | Asia/Shanghai（顶栏可见实时时钟） |
| 实时遥测 | 顶栏 **Network Delay**（如 42ms），带 1min/10min/30min 历史曲线 tooltip |
| 多用户 | 是。Error Monitor 里可见他人操作（如 `erinzhang@tvunetworks.com operated Source Started`） |
| 部署形态 | 云托管为主；亦支持 **Self-Hosted Deployment**（在自有算力上部署），顶栏有快捷入口跳 TVU Home resources |

---

## 2. 顶层导航

### 2.1 左侧竖直导航（2 个视图）
1. **Routing / Home**（`#/home`）——**默认页**，左右双栏 Source↔Destination 实时路由看板（本产品主战场）。
2. **Schedule**（`#/schedule`）——排程日历，按 Day / Week / Month 预约"**Schedule a route**"（在未来某时段自动把某源路由到目的地）。空态文案 `No scheduled routes yet.`（对应需求 MH-3239 scheduled execution record）
   - **Add Schedule 弹窗字段（实测）**：`Name`* + `Time`*（起止日期+时间，或勾 **Always on**；时区 Asia/Shanghai UTC+8）+ 重复规则下拉 + `Source`*（Browse 选源）→ `Destination`*（Browse 选目的地）+ `Description`；底部 Cancel / Confirm。
     - **重复规则选项**：`Does not repeat`（默认）/ `Daily` / `Every weekday (Mon–Fri)` / `Weekly`。
     - **Source / Destination Browse**：弹出 `Select Source` / `Select Destination` 选择器（带 Active First 排序 + Filter + Name/PID 搜索的**单选**列表），从现有源/目的地里各选一个。

### 2.2 顶栏图标（左→右，已逐个实测）
| 图标 | 功能 |
|---|---|
| ⚙️ 齿轮 | **Default Resource Configuration**（全局默认资源配置，见 §6） |
| ▤ 堆叠 | **Self-Hosted Deployment** 快捷入口（悬停出说明，点击跳 TVU Home resources 新标签） |
| 🕐 时钟 + Asia/Shanghai | 时区与实时时钟 |
| Network Delay | 网络时延遥测（带历史曲线） |
| ⭯ 下载圈 | **Download Speed Test**（下行测速） |
| ❓ | **Help / Get Help and Inspiration**（帮助弹层） |
| 头像 | 账户菜单（见 §2.3） |
| ▦ 九宫格 | TVU 产品切换器 |

### 2.3 账户菜单
账户邮箱 + 角色（Admin）+ **Token Purchasing Portal**（购买 token）+ **Commitment Management**（承诺量管理）+ Language + Sign Out。
→ MediaHub 是**按用量 / token 计费**的付费 SaaS。

### 2.4 View Mode
支持 4 种视图密度：**Card（默认）/ Compact / List / XY Grid**（各带图标）。**触发入口在左侧路由导航图标区**的飞出菜单（非顶栏），实测已确认。

---

## 3. Source 面板（左栏，接入侧）

### 3.1 工具条
- **`+ Source`** 新建源（流程见 §3.4）。
- **排序**：Active First（默认）/ Last Edited / Last Created / Alphanumeric。
- **Filter** 浮层：搜索框 + `Created By Me`（单 toggle）+ `Tag`（多选）+ `Source Type`（**组内单选**）。选中**即时生效无 Apply**，Filter 按钮上绿色徽标显示生效类别数；**不同类别之间是 AND 交集**（来源：specs/MH-3296 线上实测）。
- **搜索框**：按 Source Name / PID。

### 3.2 支持的 Source Type（线上 Filter 全量枚举，27 种）
Ext · Facebook · Grid-MediaHub · Grid-Pack · Grid-SDI · HLS · HTML · ISSP · KICK · MXL · NDI · RTMP(s) Pull · RTMP(s) Push · RTP-FEC · RTSP Pull · RTSP Push · SDI · SRT Caller · SRT Listener · TVUAnywhere · TVUPack · TikTok · Twitch · UDP · X · YouTube · Zoom Meeting

### 3.3 Source 卡片
- 缩略图 + 左上角类型徽标（如 `HLS Pull 1N6Q`）+ 设备图标 + 名称 + Tag（多为 `No tag`）。
- TVUPack 类源带电话/设备图标。活跃源显示运行计时（如 `06:56:01`）与音量条。
- 状态：正常 / **Offline**（离线卡片灰显）。
- **卡片三个动作按钮**：
  - **Preview**（Start/Stop）——起监看预览。
  - **Receive / Receiving**（Start/Stop）——把源**接入云端**（Receiving = 正在接入，绿色高亮）。
  - **Route**——把该源绑定到目的地。**交互（实测）**：点 Route 后右侧 Destination 整栏进入选择态（绿色边框 + 顶部绿条 `Select destination for "<源名>"` + X 取消），可勾选**未 Live 的 output** 复选框完成路由；**也可直接把 source 卡片拖到目的地卡片上**建立路由。

### 3.4 新建源流程（**两步式**，实测）
**第一步 — "Select Source Type" 弹窗**：顶部 **Source Type** 下拉，默认 **Quick Setup**（粘贴视频流 URL 自动识别类型，示例 YouTube / TikTok / Facebook / HLS / SRT Caller / RTMP Pull），或从下拉选具体类型。
- Quick Setup **必须填 URL**，空 URL 点 Save 会校验报错、不前进。
- 选定类型 / 填好 URL 后点 **Save 进入第二步**（**此时尚未真正创建对象**，第二步再 Save 才落库；第二步头部有 ← 可退回第一步）。

**第二步 — 完整配置抽屉**（自动生成默认名如 `ISSP, Jul 23, 2026 at 5:07PM`，结构同 §3.5 详情抽屉）：
- 左侧 Settings（Name & Tags / Stream Config / Resources）+ Microservice、右侧 Source Status + Media Analyzer Lite + Video/Audio 诊断，各类型一致。
- 底部 Total + Cancel / **Save**（Save 才创建）。
- **中间 Stream Config 区按类型不同**（实测 4 种代表形态）：

| 类型 | Stream Config 字段 |
|---|---|
| TVU Device | 设备选择器：`+ Device` + `Type(N)` 筛选 + PeerID/Name 搜索 + 设备表（Device Name / Type / PID），从已连接的 TVU 设备/Pack 中选 |
| ISSP / HLS / UDP（pull/URL 型） | 单个 `Stream URL` 输入框（`Enter URL`） |
| SRT Listener | `Server`（自动生成监听连接串）+ `Latency`（滑块 120–8000，默认 5000 ms）+ `Passphrase`（10–79 字符） |
| SRT Caller | `Stream URL`（`srt://`，主动拨出目标）+ `Latency`（120–8000，默认 5000 ms）+ `Passphrase`（10–79 字符） |
| RTMP(S) Push | `Server`（MediaHub 自动分配 ingest 地址 `rtmp://…:61080/live/`）+ `Key`（密钥 + Generate/Copy） |
| RTSP Push | `Server`（MediaHub 自动分配 `rtsp://…:61081/live/`）+ `Key`（密钥 + Generate/Copy） |
| NDI | `Box Pool`（选 Agent Box Pool）+ `Manual`/`Discovery Server` 二选一 + `ndi://` 两输入（NDI-HOST-MACHINE-NAME + NDI-Stream-Name）+ `Audio Only` toggle |

**三类形态归纳**：① **URL/Pull 型**（ISSP/HLS/UDP…）= 单个 Stream URL；② **Push 型**（RTMP/RTSP Push）= MediaHub 分配 Server + Key(Generate/Copy)，"推给我们"；③ **专有型**（SRT 有 Latency/Passphrase、NDI 需 Box Pool+主机/流名、TVU Device 设备选择器）。
> `(Optional)`/必填 `*` 标注即 MH-3251 范畴，分布在 Name & Tags + Stream Config 两处。剩余 Facebook/YouTube/Twitch 等平台类未逐一展开。

### 3.5 单个 Source 详情抽屉（点卡片进入，含配置 + 监看 + 诊断）
- 左侧菜单：
  - **Settings**：Name & Tags / **Stream Config** / Resources
  - **Microservice**（可挂的增值处理，绿点=已启用；配置界面来源：Figma 设计稿 MH-Lora `node 581-36845`）：
    - **UHD**：toggle + 说明（解码 4K 需额外资源，输入分辨率 >1920×1080 时启用）
    - **Color Correction**（**付费**）：Preview（输入）/ Output（输出）前后对比双画面（各带 Media Analyzer 按钮）+ **YUV Color Correction** 面板：`Apply to Output` + 5 个调色条 **Y Gain / Chroma / Hue / Y Offset / Gamma**（各带 +/− 步进、Default 标记、Reset）+ **Reset All** + **Restore Last Config**
    - **Disaster Recovery**（容灾/自动切换）：`Backup Source` 下拉 + **Detection Mode**（`Bitrate Mode` / `Black Frame Mode` 二选一）+ 参数：`Ignore Initial Transmission`(秒，忽略新流起始的解码错误防误切) / `Cooldown Period`(秒，自动切换最小间隔) / `Low Bitrate Threshold`(Mbps) / `Low Bitrate Switch Delay`(秒) / `Recovery Duration`(秒)
    - **Auto Preview**：`Auto-Start Preview When Take Live`（Take Live 时自动起预览）
    - **Operational Logs**：本对象维度的操作日志表（Name/Severity/Message/Time + 按 email/日期筛选 + Refresh）
  - 注：非本人创建的对象顶部提示 `You have no permission to edit this source`（只读）
- 右侧：
  - **Source Actions**：Preview / Receive / Route
  - **Source Status**：视频画面（或 `Offline`）
  - **Media Analyzer Lite**：Resolution / Codec / Bitrate(Kbps) / FPS + `Media Analyzer` 按钮（完整分析）
  - **Video 诊断**：Container / Color Primary / Video Frame Drop / Compression Structure / Compression Profile / Time Stamps Jitter / Packet Loss Rate(60s) / % Packet Arrival Late
- 顶部：分享 / 视图切换 / 删除(🗑) / 关闭。

---

## 4. Destination 面板（右栏，分发侧）

### 4.1 工具条
- **`+ Destination`** 新建目的地（流程同源，见 §4.4）；同区可 **Create Folder**（用文件夹归组多个目的地）。
- **Encoding Profile**——编码档管理（见 §4.5）。
- **Batch Select**——目的地**多选批量操作**模式：开启后每个目的地卡片左上角出现复选框，工具条显示 `N Selected` + `Exit`。
- **排序**：Live First（默认）/ Last Edited / Last Created / Alphanumeric。
- **Filter**：Created By Me + Tag + **Destination Type**。
- **搜索框**：按 Destination / Folder Name。

### 4.2 支持的 Destination Type（新建弹窗下拉全量，含 Quick setup）
Quick setup（粘 URL 自动识别）· TVU Pack · ISSP · Grid · RTMP(S) Push · RTMP(S) Pull · HLS Pull · HLS Push · SRT Listener · SRT Caller · SDI · NDI · UDP · RTSP Push · RTSP Pull · RTP-FEC · MXL · ZiXi · Twitch · Facebook · YouTube · KuaiShou · Others

### 4.3 Destination 卡片 / 文件夹
- 卡片：类型图标（文件夹可显示多个子类型图标）+ 名称 + 计数（文件夹如 `Io (2)`）+ Tag。
- **卡片三个动作按钮**：
  - **Backup**——备份/冗余输出。
  - **Preview**（Start/Stop）——目的地侧预览。
  - **Live**（Start/Stop）——**正式推流上线**到该目的地。

### 4.4 新建目的地流程（**两步式**，与新建源同构）
第一步 "Select Destination Type" 弹窗：默认 **Quick setup**（粘 URL 自动识别；示例 SRT Caller `srt://...?mode=caller`、RTMP Push `rtmp://...`），或选具体 Destination Type → Save 进第二步完整配置抽屉（第二步再 Save 才创建）。

### 4.5 Encoding Profile Management
按类别（默认 `General Profile`）管理**可复用的输出编码档**。表格列：**Encoding Profile Name / Format / Video Codec / Reference Count（被多少目的地引用）/ Operation**，可 **+ Add**。

### 4.6 单个 Destination 详情抽屉（点卡片进入，实测）
与源详情抽屉同框架但内容不同：
- 左侧 **Settings**：**Basic Information** / **Stream Config** / **Encoding Profile**（目的地在此挂编码档，呼应 §4.5）
- 左侧 **Microservice**（输出处理向，与源完全不同；配置界面来源：Figma 设计稿 MH-Lora `node 955-59963`）：
  - **Frame Interpolation**（`InSync: Advanced Frame Interpolation`）：toggle + 说明，用运动估计补帧提升流畅度（**付费**，算力密集）
  - **Audience Measurement Watermarking**（收视测量水印）：toggle + **`Watermark ID`** 字段
  - **A/V Sync**（音视频同步）：toggle + 一条 **-3000 ~ +3000 ms** 滑块（数值输入，默认 0）= 音视频偏移毫秒微调
  - **Audio Remapping**（音频重映射）：toggle + **输入声道 × 输出声道映射矩阵**（Ch1/Ch2 复选勾选，默认对角）+ **Apply to Output**
  - **Operational Logs**（本对象日志表）
- 右侧：**Destination Actions**（Backup / Preview / Live）+ **Destination Status** + Media Analyzer Lite + Video 诊断
- 顶部：分享 / 视图切换 / 删除(🗑) / 关闭；底部 Cancel / Save

### 4.7 Destination 文件夹（点文件夹卡片进入，实测）
- 标题 `<名> (N Destinations)`。
- 左侧 **Settings**（Name & Tags / **Destinations** [N]）+ **Microservice**（Operational Logs）。
- 中间 **Destinations** = 文件夹内目的地列表（可 `+ Add Destination`）。
- 右侧 **Folder Actions**：**Backup / Preview / Live 对整个文件夹一键操作** + Destination Status + Media Analyzer Lite。
- **意义**：文件夹 = 一组目的地作为整体统一操控（整组同时上/下线）。

---

## 5. 核心动作语义速查

| 侧 | 动作 | 含义 |
|---|---|---|
| Source | Preview | 监看源画面 |
| Source | Receive | 把源接入云端（可被路由的前提） |
| Source | Route | 把源绑定到目的地（选未 Live 的 output / 拖拽） |
| Destination | Preview | 目的地侧预览 |
| Destination | Live | 正式上线推流 |
| Destination | Backup | 备份/冗余输出 |

> 典型链路：**源 Receive 进云 → Route 到目的地 → 目的地 Live 上线**。Preview 用于上线前监看。

---

## 6. Resources 概念（TVU-Hosted vs Self-Hosted）—— 关键领域概念

### 6.1 全局默认（顶栏齿轮 = Default Resource Configuration，实测字段）
- **Resources**：`TVU-Hosted`（可切 `Self-Hosted`）。
  - TVU-Hosted → **TVU Hosted Server Location**：约 15 个 region，每个带预估启动时间（如 `CN South (Estimated startup time: 6 minutes)`）。
  - Self-Hosted → **Box Pool**（资源盒池，如 `MH-Test 150/2000`）。
- **Auto-shutdown idle input**（空闲输入自动关，toggle）
- **Stop input when no longer needed**（不再需要时停输入，toggle）
  - 以上两项 = 闲置源/成本管理，对应需求 MH-3049。
- **Audience Measurement Watermarking License**（收视测量水印许可证 key）

### 6.2 对象级
每个源/目的地在其详情抽屉 `Settings → Resources` 里继承全局配置、可覆盖。当前对象级/全局的 Resources 选择均为**单选**。

---

## 7. Error Monitor（底部可展开）—— 操作审计日志

- 底栏 `Error Monitor` 可展开成表格。
- 过滤：按 email 搜索 + Start/End 时间范围。
- 列：**Name / Severity / Message / Time (GMT+08:00)**。
- 记录源与目的地的启停等操作，含操作人邮箱（如 `... operated Source Started/Stopped`、`... operated Destination Started/Stopped`），Severity 有 Info 等级。
- 用途：多用户环境下追溯"谁在什么时候对哪个对象做了什么"。

---

## 8. 与既有文档的关系 & 待确认

**无整体冲突**——既有 `docs/` 全是单任务级 mockup/spec/handoff/复盘，此前没有整体产品说明，本文是首份。已核对的相关文档：

| 既有文档 | 关系 |
|---|---|
| `specs/2026-07-22-mh-3296-*`（Filter by Resource Pool） | **未上线的提案**。线上 Source Filter 目前只有 Content/Created By Me/Tag/Source Type，**没有** "Filter by Resource(s)" 项 → 与"待评审未 shipped"一致，不冲突。 |
| `handoffs/2026-07-14-mh-3239-*`（scheduled execution record） | 对应 Schedule 视图。 |
| `handoffs/2026-07-16-mh-3251-*`（SRT Optional/Required 字段） | 对应新建/编辑源/目的地表单里的 SRT 字段（Quick Setup 之外的具体类型表单），本次未逐字段展开。 |
| `handoffs/2026-07-16-mh-3263-*`（浏览器检测警告） | 全局浏览器兼容提示 UI，本次线上 Chrome 未触发。 |
| `retrospects/2026-06-01-source-type-mockup-batch` | 对应 §3.2 Source Type 家族 + §3.5 详情抽屉（Media Analyzer Lite / created-row 等）。 |
| MH-3049（闲置源设置页） | 对应 §6.1 的 Auto-shutdown idle input / Stop input when no longer needed。 |

**已覆盖区域**（均实操打开确认）：Source 面板 / 源详情抽屉 / 两步新建向导 / Route 交互 · Destination 面板 / 目的地详情抽屉 / 文件夹 / Encoding Profile · Schedule 视图 + Add Schedule 弹窗 · Error Monitor · 设置齿轮 / Batch Select / View Mode / 顶栏。

**仍待确认 / 未逐字段展开**（已基本收尾）：
1. ~~SRT Caller / HLS / RTSP / UDP / NDI 等协议类型~~ → **已补全**：新建第二步 9 种类型的字段实测录入 §3.4（TVU Device / ISSP / HLS / UDP / SRT Listener / SRT Caller / RTMP Push / RTSP Push / NDI），并归纳出 URL型 / Push型 / 专有型三类形态。仅剩 Facebook / YouTube / Twitch / X / KuaiShou 等**平台类**授权登录流未展开（需 OAuth，不宜在生产触发）。
2. ~~各 Microservice 启用后的参数配置界面~~ → **已补全**：源/目的地各 Microservice 的完整配置界面已据 Figma 设计稿（MH-Lora `581-36845` / `955-59963`）录入 §3.5 / §4.6。注：设计稿为准，个别与线上可能有细微出入（如目的地 Settings 首项设计稿作 `Name & Tags`、线上作 `Basic Information`）。

如需我在**测试环境**把上述几处点透，或你已有内部资料，告诉我即可补全。

---

> 维护：后续每次做 MediaHub 需求若发现线上行为与本文不符，请就地更新本文并注明实测日期。
