当前位置:首页>python>Python实现网络电视频道管理系统 v4

Python实现网络电视频道管理系统 v4

  • 2026-09-04 01:32:48
Python实现网络电视频道管理系统 v4

📺 网络电视频道管理系统 v4 — 

电视频道管理系统

Channel Manager Pro v1.0


🎯 项目概述

一款基于 PyQt5 + python-vlc + SQLite 的桌面网络电视频道管理工具,集频道数据管理、多格式导入导出、在线直播播放、本地文件播放、多主题切换于一体。默认浅色主题,界面简洁实用。

通过网盘分享的文件:TV频道管理系统v4.exe 链接: https://pan.baidu.com/s/1nO1iEuawKEm1sCpV02hqrw?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦 通过网盘分享的文件:tv_channels_v4.db 链接: https://pan.baidu.com/s/1AU0iD8HZ5t7jFBMcRRTXig?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦 将2个下载的exe和db放一个目录下即可

核心能力

模块
功能
📁 分组管理
频道分组的增删改,自动统计频道数
📺 频道管理
增删改查 + 分页浏览(200条/页) + 关键词搜索 + 分组筛选
📡 在线直播
频道树形列表 + VLC引擎播放 + 音量/静音/状态显示
🎬 本地播放
文件/文件夹打开 + 播放列表 + 进度条 + 上下曲切换
📥 导入导出
支持 TXT/M3U/JSON 三种格式导入(自动分组+去重) + 带时间戳导出
🎨 主题切换
经典浅色 / 暗夜蓝 一键切换

技术栈

  • Python 3.8+
  • PyQt5 (GUI框架)
  • python-vlc (播放引擎,需安装VLC播放器)
  • SQLite3 (本地数据库)
  • requests (导入导出时的网络请求)

🚀 快速开始

环境安装

pip install PyQt5 python-vlc requests

VLC 播放器安装

从 https://www.videolan.org 下载安装 VLC 播放器(64位)。程序会自动在以下路径查找 VLC:

  • C:\Program Files\VideoLAN\VLC
  • C:\Program Files (x86)\VideoLAN\VLC
  • %USERPROFILE%\AppData\Local\Programs\VideoLAN\VLC

运行

python kiro-db-v4.py

打包为 EXE

# 双击 build.bat 或手动执行:pyinstaller --onefile --windowed --name "TV频道管理系统v4" kiro-db-v4.py

📐 架构设计

┌────────────────────────────────────────────────────┐│                 TVApp (QMainWindow)                  │├──────────┬─────────────────────────────────────────┤│  顶部栏  │  标题 + 主题切换 + 刷新按钮              │├──────────┼─────────────────────────────────────────┤│          │  📁 分组 │ 📺 频道 │ 📡 直播 │ 🎬 播放 │ 📥 导入导出 ││  TabWidget                                          ││          │  各Tab独立布局                            │├──────────┼─────────────────────────────────────────┤│  状态栏  │  实时提示信息                             │└──────────┴─────────────────────────────────────────┘         │         ▼┌──────────────────┐     ┌──────────────────┐│   DB (SQLite)    │     │  FileParser      ││   groups_表      │     │  解析TXT/M3U/JSON││   channels_表    │     │  auto_group()    │└──────────────────┘     └──────────────────┘

数据库表结构

-- 分组表CREATETABLE groups_ (idINTEGER PRIMARY KEY AUTOINCREMENT,nameTEXTUNIQUE,    sort_order INTEGERDEFAULT0);-- 频道表CREATETABLE channels_ (idINTEGER PRIMARY KEY AUTOINCREMENT,group_idINTEGERNOTNULL,nameTEXTNOTNULL,urlTEXTNOTNULL,    sort_order INTEGERDEFAULT0,    is_active INTEGERDEFAULT1,    speed_ms INTEGERDEFAULT0,FOREIGNKEY(group_id) REFERENCES groups_(id) ONDELETECASCADE,UNIQUE(name, url)  -- 按名称+URL联合去重);

🧩 模块详解

1. DB 类 — 数据库操作

classDB:def__init__(self):# 自动建表+初始化默认数据defget_groups(self)        # 获取所有分组defadd_group(name, so)     # 新增分组(重复则忽略)defupdate_group(gid,...)   # 编辑分组defdelete_group(gid)       # 删除分组(级联删频道)defgroup_id_by_name(name)  # 按名称获取ID,不存在则创建defget_channels(gid, limit, offset)  # 分页获取频道defch_count(gid)           # 频道总数defadd_ch(gid, name, url)  # 新增单条defbatch_add(rows)         # 批量新增(executemany,跳过重复)defupdate_ch(cid,...)      # 编辑频道defdelete_ch(cid)          # 删除频道defsearch(kw)              # 模糊搜索(名称+分组名)defall_urls()              # 获取所有URL集合(用于去重)deflive_tree()             # 返回{分组名:[{name,url},...]}树结构

设计要点:

  • UNIQUE(name, url) + INSERT OR IGNORE 确保导入时不会重复
  • ON DELETE CASCADE 删除分组时自动清理关联频道
  • batch_add 使用 executemany 一次性写入,1000条<1秒
  • 分页查询避免大数据量卡UI

2. FileParser — 多格式解析

支持三种输入格式:

格式
示例
TXT
CCTV1,http://xxx/index.m3u8
M3U
#EXTINF:-1,CCTV1
 + 下一行URL
JSON
{"央视":[{"name":"CCTV1","url":"http://..."}]}
defparse_file(filepath):# 自动识别格式并解析defauto_group(name):# 根据频道名自动归类

auto_group 分组规则:

  • 含 "CCTV" / "央视" → 央视频道
  • 含 "卫视" → 卫视频道
  • 含 "电影/影院/剧场" → 影视频道
  • 含 "少儿/卡通" → 少儿频道
  • 含 "体育/足球" → 体育频道
  • 含 "广播/之声/FM" → 广播频道
  • 其他 → 其他频道

3. 在线直播模块

┌─────────────┐  ┌──────────────────────────────────┐│  频道树     │  │                                    ││  ├ 央视频道 │  │        VLC 播放画面                ││  │ ├ CCTV1 │  │                                    ││  │ └ CCTV5 │  │                                    ││  ├ 卫视频道 │  ├──────────────────────────────────┤│  │ └ 湖南  │  │ ▶ ⏹ 🔊 [====] 80% | 📺 CCTV1   ││  └ 搜索框  │  └──────────────────────────────────┘└─────────────┘

播放流程:

  1. 点击频道 → 获取URL
  2. 调用 _linit() 初始化VLC实例(首次)
  3. media_new(url) + add_option(":network-caching=1500")
  4. set_media + play()
  5. 定时器每2秒检查播放状态,显示"加载中.../播放中/失败"

VLC 初始化:

vlc.Instance("--no-xlib", "--quiet", "--network-caching=1500")player.set_hwnd(int(frame.winId()))  # Windows嵌入窗口

4. 本地播放模块

支持格式:mp4 / avi / mkv / flv / mov / ts / mp3 / flac / wav

功能:

  • 文件/文件夹批量添加到播放列表
  • 双击列表项播放
  • 进度条拖拽定位
  • 上一曲/下一曲
  • 音量调节/静音
  • 播放结束自动下一曲

5. 导入导出模块

导入流程:

选择文件 → 解析(显示条数/新增/重复) → 点击导入    → auto_group分组 → group_id_by_name(自动建组)    → batch_add批量写入 → 刷新界面

导出格式(文件名带时间戳 20260630_162834_channels.txt):

  • TXT: 频道名,URL 每行一条
  • M3U: 标准M3U格式,带 group-title
  • JSON: {分组名: [{name, url}, ...]}

🎨 主题系统

内置2套完整QSS主题:

主题
背景
主色
适用场景
经典浅色
#f8f9fa
#1976d2 蓝
日间使用(默认)
暗夜蓝
#0f0f1a
#e94560 红
夜间护眼

通过 QApplication.instance().setStyleSheet() 全局切换,所有组件即时生效。


⚙️ 配置与部署

文件结构

├── kiro-db-v4.py           # 主程序├── tv_channels_v4.db       # SQLite数据库(自动生成)├── output/                 # 导出文件目录(自动创建)│   ├── 20260630_xxx_channels.txt│   ├── 20260630_xxx_channels.m3u│   └── 20260630_xxx_channels.json├── build.bat               # 打包脚本└── filter_channels.py      # 源过滤工具(可选)

打包为 EXE

pip install pyinstallerpyinstaller --onefile --windowed --name "TV频道管理系统v4" kiro-db-v4.py

打包后分发:将 dist/TV频道管理系统v4.exe + tv_channels_v4.db(如有)放同一文件夹即可。

注意事项

  1. VLC 必须安装:exe 不含 VLC 引擎,目标机器需安装 VLC 播放器
  2. 数据库位置:始终在 exe/py 同目录生成 tv_channels_v4.db
  3. 导出目录:同目录下 output/ 子文件夹
  4. 网络源有效性:直播源可能随时失效,建议定期用 filter_channels.py 过滤

🔍 常见问题

问题
原因
解决
点播放一直"加载中"
源的.ts分片在你的网络下不通
用filter_channels.py过滤,只保留能用的源
弹出"VLC错误"
未安装VLC或路径找不到
安装VLC到默认路径
导入后频道数为0
文件格式不对
确认是 名称,URL 或标准M3U/JSON
导入显示"全部重复"
数据库已有相同数据
按URL去重,属于正常
播放有声无画
VLC版本太旧
升级VLC到3.0.18+
卫视/CCTV全部超时
IPTV源限特定运营商
换用公开HTTPS源

📊 性能指标

操作
数据量
耗时
导入TXT(批量写入)
1000条
<1秒
分页加载表格
200条/页
瞬间
搜索
5000条库中搜索
<0.1秒
切换主题
-
瞬间
VLC首次初始化
-
0.5秒
频道切换播放
-
1-3秒(取决于网络)

🛠️ 二次开发指南

添加新主题

在 THEMES 字典中新增一项即可,QSS 格式:

THEMES["我的主题"] = """    QMainWindow{background:#xxx}    QPushButton{background:#xxx;color:#xxx;...}    ..."""

添加新的导入格式

在 parse_file() 函数中增加 elif 分支:

elif ext.endswith(".csv"):# 自定义解析逻辑return [(name, url), ...]

添加频道验证功能

可参考 filter_channels.py 的逻辑,在导入Tab中增加"验证"按钮,用 ThreadPoolExecutor 并发检测。


📜 完整依赖

PyQt5>=5.15python-vlc>=3.0requests>=2.25

系统要求:

  • Windows 7+ / macOS / Linux
  • Python 3.8+
  • VLC 播放器 3.0+

📝 更新日志

版本
日期
变更
v4
2025-06-30
纯VLC方案,去除WebEngine依赖,修复播放问题
v3
2025-06-30
尝试hls.js方案(因编解码器问题废弃)
v2
2025-06-30
新增导入导出+分页,基于SQLite
v1
2025-06-30
初版,基于kiro-db.py改造

最新文章

随机文章