Easy TV 是面向 Windows 11 的 Electron 桌面 IPTV 直播播放器。应用不内置直播源,也不推荐未经授权的直播源;用户自行添加有权访问的 M3U/M3U8 网络播放列表,应用负责下载、解析、保存和播放。
- 添加、刷新、删除网络 M3U/M3U8 播放列表。
- 解析频道名、分组、logo、tvg-id、播放地址和播放格式。
- 支持频道搜索、分组筛选、收藏筛选、最近观看筛选和列表倒序。
- 支持收藏、播放历史、启动后播放最近观看频道、隐藏不支持频道。
- 支持直播源自定义标题、复制源地址、查看每次导入频道数量和刷新错误。
- 支持浅色、深色、跟随系统主题,以及中文、英文界面语言。
- 支持正常窗口和小窗模式;小窗保持 16:9、置顶播放,并保留窗口恢复入口。
- 支持快捷键:上下切台、空格播放/暂停、F 全屏、M 静音。
- 支持 HLS、FLV、MPEG-TS、DASH 和浏览器原生视频格式;RTMP/RTSP 会通过本机 FFmpeg 转码为临时 HLS 后播放。
- 使用 SQLite 保存直播源、频道、收藏、播放历史和设置。
项目使用 Electron、electron-vite、React、TypeScript、SQLite、hls.js、mpegts.js、dash.js、ffmpeg-static、i18next 和 lucide-react。
src/main/:Electron 主进程,负责窗口、SQLite、播放列表下载、M3U 解析、IPC 和 FFmpeg 转码。src/preload/:通过contextBridge暴露 typedwindow.easyTVAPI。src/shared/:main、preload、renderer 共用的类型契约。src/renderer/:React UI、播放器、频道列表、设置、主题和语言。tests/:Vitest 单元测试,覆盖 M3U 解析和 SQLite repository。build/:Windows 图标和 electron-builder afterPack 脚本。
渲染进程不直接访问 Node、SQLite、文件系统或主进程模块,只能通过 preload 暴露的 window.easyTV 调用主进程能力。
npm install
npm run dev
npm run test
npm run build
npm run dist
npm run rebuildnpm run dev:启动 Electron 开发环境。npm run test:运行 Vitest。npm run build:执行tsc --noEmit并构建 main、preload、renderer。npm run dist:先 build,再用 electron-builder 生成 Windows NSIS 安装包。npm run rebuild:重新安装 Electron 原生依赖,常用于修复better-sqlite3加载问题。
如果首次安装依赖时 ffmpeg-static 下载较慢,可以先设置镜像:
$env:FFMPEG_BINARIES_URL='https://cdn.npmmirror.com/binaries/ffmpeg-static'
npm install- 数据库保存在 Electron
userData目录,不写入项目目录。 - 直播源 URL 只允许
http://和https://播放列表地址。 - 媒体频道 URL 支持
http、https、rtmp、rtsp;不支持的格式会标记为不可播放。 - RTMP/RTSP 转码只暴露本机临时 HLS 地址,并在切换频道、退出或停止播放时清理 FFmpeg session。
- 不要提交
out/、release/、output/、node_modules/、coverage/或用户本地数据库文件。