iptv-app/ui/README.md
2026-02-04 18:02:26 +08:00

124 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🎬 IPTV Web 核心
基于 Vue 3 + Vite 的 IPTV 播放器,支持 iptv-api 格式数据源和 XMLTV EPG 节目单。
## 功能特性
| 功能 | 状态 | 说明 |
|------|:--:|------|
| 🎥 **视频播放** | ✅ | HLS (m3u8) 支持hls.js |
| 📡 **IPTV 源** | ✅ | 支持 iptv-api TXT/M3U 格式 |
| 🔍 **频道搜索** | ✅ | 实时搜索过滤 |
| 🗂️ **分组筛选** | ✅ | 按分组浏览频道 |
| ⭐ **收藏功能** | ✅ | LocalStorage 本地存储 |
| 🕐 **播放历史** | ✅ | 最近 50 条 |
| 🔗 **多源管理** | ✅ | 自动合并重复频道,切换源 |
| ⚡ **延迟检测** | ✅ | 在线检测,按延迟排序 |
| 📺 **EPG 节目单** | ✅ | XMLTV 格式2小时缓存 |
| ⚙️ **配置面板** | ✅ | 数据源、EPG、播放器设置 |
## 数据源格式
### IPTV 源 (TXT 格式 - iptv-api 默认)
```
央视频道,#genre#
CCTV-1 综合,http://xxx
CCTV-2 财经,http://yyy
卫视频道,#genre#
湖南卫视,http://xxx
```
### EPG 源 (XMLTV 格式)
```xml
<?xml version="1.0" encoding="UTF-8"?>
<tv>
<programme channel="1" start="20240204120000 +0800" stop="20240204130000 +0800">
<title>新闻30分</title>
<desc>午间新闻</desc>
<category>新闻</category>
</programme>
</tv>
```
## 快速开始
```bash
npm install
npm run dev
```
浏览器打开 http://localhost:5173
## 配置说明
点击右上角 ⚙️ 打开配置面板:
### 直播源
- **Guovin/iptv-api**: 默认 CDN 地址
- **本地文件**: `public/api/result.txt`(开发测试)
- **自定义接口**: 输入远程 API 地址
### EPG 节目单
- **本地文件**: `public/api/epg.xml`(开发测试)
- **自定义接口**: 输入 XMLTV 格式 EPG 地址
- 自动缓存 2 小时,避免频繁请求
## 项目结构
```
web/
├── src/
│ ├── components/
│ │ ├── VideoPlayer.vue # 视频播放器
│ │ ├── EPGGuide.vue # EPG 节目单展示
│ │ ├── QuickAccess.vue # 收藏/历史快捷入口
│ │ ├── SourceSelector.vue # 多源选择器
│ │ └── ConfigPanel.vue # 配置面板
│ ├── stores/
│ │ └── useStore.js # 状态管理
│ ├── utils/
│ │ ├── m3uParser.js # M3U 解析
│ │ ├── txtParser.js # TXT 解析 (iptv-api)
│ │ ├── channelOptimizer.js # 频道去重、延迟检测
│ │ └── epgFetcher.js # EPG 获取和解析
│ ├── App.vue
│ └── main.js
├── public/
│ └── api/
│ ├── result.txt # 示例 IPTV 源
│ └── epg.xml # 示例 EPG 数据
└── package.json
```
## 核心功能实现
### 1. 频道去重与多源
```javascript
// 合并相同频道的多个源
channels.value = mergeChannels(rawChannels.value)
// 结果: [{name: 'CCTV-1', sources: [{url: 'xxx'}, {url: 'yyy'}]}]
```
### 2. 延迟检测
```javascript
// 并发检测 5 个源
await checkAllChannels(channels.value, 5, onProgress)
// 自动排序:在线的优先,按延迟从小到大
```
### 3. EPG 缓存
```javascript
// 获取 EPG带 2 小时缓存
const epgData = await fetchEPG('/api/epg.xml')
// 自动解析 XMLTV按频道分组
```
## 下一步
- 🖥️ **Tauri 桌面端** - Windows/Mac 可执行文件
- 📱 **Android 套壳** - WebView + ExoPlayer
- 🔶 **HarmonyOS 套壳** - Web 组件