自托管 · 模块化 · 可视化 · NAS 友好
推荐通过 Docker 在 NAS / 服务器上部署,镜像:akiralereal/iptv:latest
iPTV 是一个面向家庭影音与 NAS 用户的模块化 IPTV 直播源管理与分发系统。它内置央视频、咪咕、B站、抖音、虎牙、斗鱼及多地区广电等抓取模块,也能接入需要网页解析的内置源、维护者筛选的公开独立源、自定义直连地址和 M3U/TXT 订阅;所有来源统一完成聚合、去重、编排,再输出干净的播放列表与 EPG 节目单。
项目更新和社区公告请订阅 Telegram 公告频道(@iFansClub);使用问题、反馈和心得交流,欢迎加入 Telegram 用户交流群(@iFansClubChat)。Bug 反馈和功能建议也可以提交 GitHub Issue。
Important
本项目是自托管的软件工具。除项目自制的使用公告短片外,不托管第三方音视频节目;仓库及运行时可能整理互联网上公开可访问的播放地址与频道元数据,但“公开可访问”不代表内容属于公有领域,也不代表已获得复制、转播或商业使用授权。请仅在获得合法授权的范围内使用;如你是权利人并认为相关条目侵权,请按版权与侵权处理提交下架通知。
网页播放实况 · 在管理台直接预览频道
我的频道 · 所有频道一处编排
源管理 · 每个内容来源独立、透明、可控
| 📺 开箱即用 | 🧩 模块化源管理 | 🪄 可视化编排 |
|---|---|---|
| 默认聚合 800+ 频道,其中央视频模块提供 63 个公开高清频道及 10 个本人账号可访问的会员频道,另有 B站、抖音、虎牙、斗鱼直播抓取和经筛选的公开独立源 | 央视频、咪咕、B站、抖音、虎牙、斗鱼及各广电抓取模块都有独立开关、配置和健康状态,按需启用,互不干扰 | 分组、排序、重命名、隐藏与批量管理,都在浏览器中完成 |
| 🔗 自由接入 | 📡 稳定分发 | 👨👩👧👦 多端共享 |
| 支持 M3U8 直链、网页自动提取,以及 M3U/M3U8/TXT 订阅批量导入 | 自动生成 M3U、TXT 与 EPG;提供兼容版、全代理版应对特殊播放器 | 多配置档与用户令牌,让每台电视、每位用户拥有自己的频道组合 |
Tip
默认配置即可使用免费频道;需要更高画质时,再到「源管理」为对应平台配置你本人合法持有的账号。凭据只保存在自己的部署中。
默认部署目前可聚合 800+ 频道,并会随着平台模块、赛事内容和精选频道持续扩展。实际数量会因平台接口状态、地区网络和启用的模块而动态变化。
| 范围 | 当前覆盖内容 |
|---|---|
| 央视频直播 | 63 个免登录公开频道 + 10 个本人账号可访问的会员频道;公开台覆盖央视全套、CGTN 多语种和全国主要省级卫视,统一归入「央视频」分组 |
| iPanda 直播 | 22 路免登录公开直播:成都与都江堰 2 个 24 小时总频道、18 个熊猫固定机位,以及江苏大丰麋鹿、云南白马雪山 2 路珍稀动物直播,统一归入「iPanda」分组 |
| 央视与卫视 | CCTV 系列、CGTN、全国主要卫视频道 |
| 地方频道 | 北京、天津、重庆、四川、贵州、安徽、广东(含广州、深圳、梅州)、广西、福建(含泉州、晋江、石狮、德化、莆田、宁德)、江西、甘肃、青海、新疆、西藏、云南、吉林、黑龙江、内蒙古、宁夏、海南、河北、山西、陕西、湖北、辽宁(含沈阳、大连)、南京、青岛、浙江(含杭州、宁波、嘉兴)、江苏(含苏州、无锡、扬州)、山东、河南、上海、湖南等省市卫视与地面频道,并持续接入更多地区 |
| 景观直播 | 央视网「直播中国」当前在线信号,以及吉林风景、美丽河北、Live 南京、青岛城市直播、上海慢直播等景观频道;数量随平台在线状态动态变化 |
| 体育赛事 | 体育频道、赛事直播,以及昨天 / 今天 / 明天的动态赛事频道;广东体育官方公开赛事按“广东体育 · 赛事名称”显示在「广东」分组并同时出现在「体育」分组,数量随开播与结束变化 |
| 亚太与国际 | 精选列表提供 15 个经实验台验证的固定直连频道;独立模块另提供 YTN、NHK World 两个需要动态解析的公开频道,以及香港卫视、澳门莲花卫视两路官网直播;另有「海外频道」模块的 33 个海外免费频道、「澳门」模块的澳广视自办 6 套电视,默认关闭,需要时在后台打开 |
| 综合内容 | 影视、文旅、教育、少儿、娱乐时尚等分类频道 |
播放列表首位默认提供项目自有的「公告」分组,内含三条自制短片:“欢迎使用 iPTV for iFansClub.com”展示使用方式、版权提醒和侵权联系说明;“央视频会员频道登录教程”演示 Docker / NAS 用户如何从浏览器复制 Cookie 把央视频登录态导入 iPTV;“「来源于网络」频道添加教程”演示如何在后台「🌐 源管理 → 👤 自定义源」用「🌏 添加「来源于网络」列表」卡片一键订阅仓库 from-the-web/from-the-web.m3u 里的网络第三方源。三者都不引用任何第三方节目素材。不想在电视上显示可以在后台「我的频道」逐条隐藏(随时可在「已隐藏」里恢复);只要显示,该分组就固定在第一位,不支持删除、移动、排序或重命名。
iPTV 的重点不只是一份静态频道表,而是一套可独立开关、可观察状态、可持续刷新的内容接入体系。不同来源采用不同刷新、鉴权与代理策略,平台临时不可达时可在源管理中查看状态或关闭对应模块。
| 来源类型 | 已支持的典型内容 | 工作方式 |
|---|---|---|
| 央视频直播 | 63 个公开频道 + 10 个需登录/VIP 的频道 | 公开频道继续匿名动态取票、自动切换备用 CDN;会员频道复用部署者本人在央视频站点的持久登录态,由网页播放器签发并解扰成本机 H.264/AAC fMP4 HLS,解决普通播放器直接拿会员流时“有声无画”。桌面本机可从源管理自动打开登录窗口;Docker / NAS 等没有桌面的部署从自己电脑浏览器的开发者工具里复制整段 Cookie 导入(会话 cookie 是 HttpOnly,书签工具拿不到),服务端之后自动续期 |
| iPanda 直播 | 成都、都江堰共 20 路熊猫直播,以及江苏大丰麋鹿、云南白马雪山 2 路珍稀动物直播 | 无需登录、无需配置;18 路固定机位使用支持网页直连的上游 CDN,2 个总频道和 2 路珍稀动物直播在播放时检查公开状态并自动切换上游 CDN,清单与媒体由本机安全代理。最高均为真实 720p,即平台所称“超清” |
| 平台直播抓取 | B站、抖音、虎牙、斗鱼 | 可按分类自动收录当前直播间,也可手动指定房间;播放时处理短效地址、画质选择和平台要求的请求头。B站支持扫码登录以使用本人账号可访问的画质,抖音、虎牙、斗鱼支持匿名公开直播。抖音默认从「聊天」「生活」两个分类轮选 20 个、FLV 播放,分类和数量可在源管理里改,也可切换为公开网页「全部」页原始顺序(首批约 15 个)或 HLS;频道归入「抖音」,排在「B站」之后 |
| 电视与赛事平台 | 咪咕、体育赛事 | 自动整理频道与节目单,并按账号权限、设备兼容性和平台接口状态选择可用画质;需要登录的能力仅使用部署者本人提供的凭据 |
| 广东体育官方赛事 | 官方「广东体育频道plus」「广东体育频道」当前公开在播的赛事,归入 广东,同时出现在 体育(赛事名带少儿、卡通、动漫的改放「少儿」,带教育、科教的改放「教育」) | 无需登录、无需配置;从广东体育官方 H5 动态发现赛事,播放时复核官方状态并读取 HLS;本机只中继清单,视频分片由播放器直连官方 CDN(不看来源头、不带签名),也可用 ?relay=2 全代理。每场赛事独立标识,开播加入、结束移除;源管理有独立开关。广东体育电视频道仍由荔枝网模块提供 |
| 凤凰卫视 | 凤凰资讯、凤凰中文、凤凰香港,归入 香港 | 仅三个电视直播频道;游客 480p,登录普通凤凰秀账号可获取 720p / 25 帧,无需付费会员。后台支持导入 Token / Cookie 并持久保存,播放时取新签名,原始 HTTP-FLV 由本机转发。内置精选列表里的三条第三方凤凰线路同在「香港」,与本模块三台并列保留作备用线路,不合并、不顶替;播放器按名聚合时本模块源排在前面 |
| 香港卫视 | 香港卫视一路电视直播,归入 香港 | 无需登录、无需配置;播放时先问源站当前在播的是哪一路,再换这一路的 HLS 入口。服务端把入口清单拍平成媒体清单后只中继清单,媒体分片由播放器直连上游 CDN。实测为 1280×720、H.264/AAC;节目单取自官网节目单接口(今明两天) |
| 澳门(澳广视) | 澳广视自办的 6 套电视:澳视澳门、澳视葡文、澳门体育、澳门资讯、澳门综艺、澳门-Macau,归入 澳门 | 无需登录、无需配置;播放时向官网的路由接口取当前网络可用的 CDN(缓存五分钟),播放器直连官方 CDN;官网与视频只对大陆以外开放,部署服务的机器(查 CDN)和播放设备(取视频)都要能连到大陆以外;默认关闭,需要时在后台打开;台标与节目单取自官网 |
| 澳门莲花卫视 | 澳门莲花卫视一路电视直播,归入 澳门 | 无需登录、无需配置;播放时从官网直播页的播放器配置读出当前带签名的 HLS 入口,入口在本机缓存五分钟、签名失效立即重读官网,每次播放都检查实时清单。服务端只中继清单,带独立签名的媒体分片由播放器直连上游 CDN,需要时也可用 ?relay=2 全代理;台标与节目单取自官网 |
| 北京广播电视台 | 北京卫视、BRTV 文艺 / 纪实科教 / 影视 / 财经 / 体育休闲 / i生活 / 新闻、卡酷少儿,以及北京时间当前公开活动或慢直播 | 公开直播免登录并自动排除失效项目;9 个电视频道需在后台导入本人北京时间 Cookie。凭据仅用于取流接口,不写入订阅、不发送到媒体 CDN;清单和分片由本机补齐防盗链请求头并代理 |
| 重庆广电 | 源站当前公开的 CQTV新闻 | 无需登录、无需配置;频道表自动同步,播放时匿名换取短效 HLS,清单、AES 密钥和媒体分片由本机全代理 |
| 四川广电 | 四川卫视、新闻、经济、文化旅游、影视文艺、妇女儿童、四川乡村、康巴卫视、四川卫视 4K 超高清 SDR,以及源站当前公开活动直播 | 活动直播有则显示、无则隐藏且无需登录;9 个固定电视台需使用部署者本人的四川源站登录态。后台提供书签工具读取源站 Token,服务端播放时动态换取短效地址,清单、密钥和媒体分片均补齐源站防盗链请求头并全代理 |
| 江西广电 | 江西卫视、都市、经济生活、公共农业、少儿、新闻、移动电视、陶瓷共 8 路 | 无需登录、无需配置;源站当前公开的是单档 720p,服务端按源站公开算法获取匿名短效 token,并在播放器每次轮询时重新拉取滚动清单;清单、密钥和媒体分片均补齐防盗链请求头并全代理 |
| 贵州广电 | 贵州卫视、公共、影视文艺、大众生活、生态乡村、科教健康、经济、移动电视共 8 路 | 无需登录、无需配置;播放时从源站公开 API 获取当前短效签名地址,播放器每次轮询重新拉取只有三个 3 秒分片的滚动清单,清单和媒体全代理;家有购物明确不纳入频道表 |
| 甘肃广电 | 甘肃卫视、文化影视、移动电视、少儿、科教、公共应急共 6 路 | 无需登录、无需配置;播放时从源站公开接口动态获取当前入口,每次轮询重新拉取滚动清单并中继给播放器,视频分片由播放器直连上游 CDN;入口轮换或接口短时抖动会自动重试和兜底 |
| 黑龙江广电 | 黑龙江卫视、都市、新闻法治、文体、少儿、影视、农业科教共 7 路 | 无需登录、无需配置;极光新闻 App 在用的官方入口,地址固定、不带签名,上游既不校验来源也不挑播放器标识,因此频道直接给直链,由播放器直连官方 CDN,本机不转发媒体。官方业务域名走 4430 端口而非 443。实测 7 路均为 1280×720、H.264 / AAC-LC,25 帧 |
| 云南广电 | 云视网云南卫视、都市、康旅、澜湄国际,以及七彩云端临沧、怒江、昭通共 7 路,统一归入 云南 | 无需登录、无需配置;省级四路由官网接口按「当前这档节目」签发 DVR 窗口地址,签名按路径签、无法预取,播放时重新换取,节目换档后下一次解析自然接上(分片序号连续,实测跨档不断流);地方三路按七彩云端目录取当前在线机位。两家回源要求不同,省级必须带官网来源头、地方不需要,清单与分片均由本机全代理。省级实测 1280×720 / 25 帧,地方分别为 720p25、1080p50 与 720×416 |
| 山西广电 | 山西卫视、黄河电视台、经济与科技、影视、社会与法治、文体生活 6 路省级频道,以及太原、朔州、忻州、阳泉、吕梁、晋中、长治、晋城、临汾、运城 10 路地市频道,共 16 路,统一归入 山西 | 无需登录、无需配置;省级频道的播放路径按官网播放器算法由「频道码 + 当天日期」算出,只认当天、零点即换,播放时按上海时区重算;地市频道播放前向官网签名接口换取短效地址。两家 CDN 都不校验来源与播放器标识,本机只中继清单,媒体分片由播放器直连官方 CDN,也可用全代理订阅。实测 16 路均为 1280×720、H.264 / AAC-LC,25 帧;节目单取自官网逐台节目单接口(今明两天),省级 6 路与太原、晋中、临汾有,另外 7 个地市台官方为空 |
| 陕西广电 | 陕西卫视、新闻资讯、都市青春、银龄、秦腔、体育休闲、农林卫视、移动电视共 8 路,统一归入 陕西 | 无需登录、无需配置;播放时现解官网看电视页下发的加密频道目录取当前地址——地址不带签名,但官网会整批换名、旧名立即失效,所以不写进播放列表;CDN 不校验来源与播放器标识,本机只中继清单,媒体分片由播放器直连官方 CDN(仅 HTTP),也可用全代理订阅。实测 8 路均为 720×404、H.264 / AAC-LC,25 帧(官网只有这一档);8 路都有官网当天节目单 |
| 西藏广电 | 西藏卫视、藏语卫视、影视文化共 3 路,统一归入 西藏 | 无需登录、无需配置;播放时从「珠峰云」App 的频道接口取当前带签名的 HLS 地址(签名只验清单,签发一小时后仍有效),频道表五分钟复用一次,清单被拒时立即重取。CDN 不校验来源与播放器标识、分片不带签名,本机只中继清单,媒体分片由播放器直连官方 CDN,也可用全代理订阅。实测 3 路均为 1920×1080、H.264 / AAC-LC,25 帧;官方没有节目单,西藏卫视与央视频同名,开着央视频时共用其节目单 |
| 天津广电 | 天津卫视、天津新闻、天津文艺、天津影视、天津都市、天津体育、天津教育 7 路,统一归入 天津 | 无需登录、无需配置;按津云 App 的 WiseTV 协议在播放时签发短效地址(App 内置应用参数,可用环境变量覆盖),签发接口每次在腾讯、网宿、百度三家 CDN 间轮换。网宿的播放会话绑定取清单那一方的播放器标识,播放器直连分片会被拒,所以清单与分片都经本机全代理;播放中直接轮询官方媒体清单,跨过 10 分钟的签名有效期也不断流、不换 CDN。台标用津云 App 的频道图标。实测 7 路均为 1280×720、H.264 High / AAC-LC,25 帧;节目单取自津云官方接口(今天、明天) |
| 青海广电 | 安多卫视 1 路,归入 青海 | 无需登录、无需配置;取自青海藏语网络广播电视台官网,播放时向官网频道接口换取带签名的地址,签名标称两小时,本机半小时换一次;CDN 不校验来源与播放器标识,本机只中继清单,媒体分片由播放器直连官方 CDN,也可用全代理订阅。实测 1920×1080、H.264 / AAC-LC,25 帧。官网、接口与 CDN 仅大陆网络可访问。官方节目单只有整点占位,暂无节目单 |
| 宁夏广电 | 宁夏卫视、宁夏公共、宁夏文旅共 3 路,归入 宁夏 | 无需登录、无需配置;黄河云公开的官方直播入口,地址固定、不带签名,上游不校验来源也不挑播放器标识,播放器直连官方 CDN,本机不转发媒体;节目单取自黄河云官方接口(只有当天) |
| 嘉兴广电 | 嘉兴新闻综合、文化影视、公共频道共 3 路,归入 浙江 | 无需登录、无需配置;频道入口来自嘉兴在线「看电视」页,播放时按频道向趣看的公开播放接口换取签名 HLS,本机只中继实时清单,媒体分片由播放器直连上游 CDN,清单与分片都限定在该频道的官方域名和路径;也可用 ?relay=2 全代理 |
| 杭州广电 | 杭州综合、西湖明珠、杭州生活、杭州影视、杭州青少体育共 5 路,归入 浙江 | 无需登录、无需配置;播放时向葫芦网(杭州文广集团官网)的频道接口取 2 小时有效的签名地址,本机缓存到过期前半小时,签名被拒时立即重签。官方 CDN 的清单和分片都只认官网来源头,所以清单与分片由本机带来源头全代理;只放行该频道在官方 CDN 上的路径。台标取自官方频道接口。实测 5 路均为 1280×720、H.264 / AAC-LC,25 帧;官网节目表只有整点「精彩节目」占位,暂无节目单;频道接口只对大陆网络开放,部署在大陆以外(含香港)时取不到 |
| 宁波广电 | 宁波新闻综合、经济生活、都市文体、影视剧共 4 路,归入 浙江 | 无需登录、无需配置;按宁波广电网直播页播放器的流程(直播页 → 播放器配置 → 频道资料 → 官方签名接口)取 1 小时有效的签名地址,频道资料缓存 6 小时、签名缓存到过期前 15 分钟,签名被拒时立即重签。CDN 不看来源头,本机只中继清单,媒体分片由播放器直连官方 CDN;也可用 ?relay=2 全代理(后台网页播放时自动走全代理)。实测 4 路均为 1280×720、H.264 / AAC-LC,25 帧;官网节目单是每周的图片,暂无节目单;签名接口只对大陆网络开放,部署在大陆以外(含香港)时取不到 |
| 梅州广电 | 梅州客家生活 1 路,归入 广东 | 无需登录、无需配置;梅州市广播电视台自有域名下的公开 HLS,地址固定、不带签名,播放器直连上游 CDN,本机不转发媒体 |
| 泉州广电 | 泉州新闻综合、泉州闽南语共 2 路,归入 福建 | 无需登录、无需配置;播放时向官网公开接口换取短期签名 HLS,两个签名接口都触发人机验证时改从官网另一个域名的播放页取地址;上游 CDN 拒绝部分播放器标识,清单与分片由本机以浏览器标识全代理;节目单取自官网播放页 |
| 晋江、石狮 | 晋江电视台、石狮新闻综合共 2 路,归入 福建 | 无需登录、无需配置;晋江市、石狮市融媒体中心官网直播用的 HLS,地址固定、不带签名,播放器直连官方 CDN;石狮节目单取自官网直播页,晋江官方目前只有占位 |
| 莆田广电 | 莆田新闻综合、莆田文旅生活、仙游电视台共 3 路,归入 福建 | 无需登录、无需配置;频道入口来自「莆田TV」App 与官网共用的频道接口,播放时取签名 HLS(约 2 小时 45 分有效,本机缓存到过期前半小时),本机只中继实时清单,媒体分片由播放器直连官方 CDN,清单与分片都限定在该频道的官方路径;节目单取自莆田TV 官方接口(一套、二套,仙游官方只有占位);也可用 ?relay=2 全代理 |
| 宁德广电 | 宁德新闻综合、宁德文化旅游共 2 路,归入 福建 | 无需登录、无需配置;每轮刷新向宁德台官方直播接口要一次 HLS 地址,地址固定、不带签名,播放器直连官方 CDN;2026-10 复测海外也能播;官方节目单只有占位,暂无节目单 |
| 无锡广电 | 无锡新闻综合、娱乐、都市资讯、生活、经济共 5 路,归入 江苏 | 无需登录、无需配置;频道入口来自无锡博报 App 的直播分享页,播放时取签名 HLS(约 2 小时有效,本机缓存到过期前半小时),本机只中继实时清单,媒体分片由播放器直连官方 CDN,清单与分片都限定在该频道的官方路径;节目单取自无锡博报官方接口;分享页只对大陆和香港开放,部署在其他海外地区时取不到;也可用 ?relay=2 全代理 |
| 扬州广电 | 扬州新闻、扬州民生,以及江都、邗江两个区台共 4 路,归入 江苏 | 无需登录、无需配置;扬州发布 App 直播用的 HLS,地址固定、不校验签名,播放器直连官方 CDN;节目单取自扬州发布官方接口 |
| 安徽广电 | 安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道共 7 路 | 无需登录、无需配置;按「安徽视讯」App 的公开算法解出鉴权密钥并逐路生成两小时签名,播放器每次轮询都重新拉取滚动清单;上游 CDN 只放行 App 播放器标识,清单与分片均以 App 标识经本机全代理 |
| 新疆广电 | 新疆卫视、维吾尔语新闻综合、哈萨克语新闻综合、汉语综艺、维吾尔语影视、体育健康、少儿共 7 路 | 无需登录、无需配置;播放时从丝路视听网当前 Nuxt 包静态解析当天公开签名配置,再调用源站接口签发约一小时有效的 HLS。服务端中继实时清单,媒体分片默认由播放器直连上游 CDN,也可用全代理订阅。某一路被源站重新标记禁播时只跳过那一路,其余照常 |
| 吉林广电 | 6 路省级频道、9 路地方台和 13 路慢直播,共 28 路 | 无需登录、无需配置;常规电视归入「吉林」,慢直播归入「吉林风景」。省级频道和季节性景观在播放时从源站加密接口获取短效 HLS,固定地方台和固定景观使用已验证的 HTTPS 入口;清单、密钥和媒体分片均由本机全代理 |
| 内蒙古广电 | 内蒙古卫视、蒙古语卫视等 8 路自治区频道,以及 12 路盟市频道,共 20 路 | 无需登录、无需配置;20 路全部归入唯一的「内蒙古」分组。播放时按奔腾融媒源站公开协议调用加密频道接口获取动态地址,并为清单、密钥和媒体分片补齐防盗链请求头后由本机全代理 |
| 亚洲与国际直播 | 6 个公开频道:YTN、NHK World、CNA、France 24 English / Français、World Poker Tour;另有 11 个固定直连频道位于精选列表的独立标记区块 | YTN、NHK World 在播放时从平台接口获取当前 HLS,并由本机代理清单、密钥与媒体;CNA、France 24 English / Français、World Poker Tour 由本机转发一次主清单、把最高档挪到最前,视频由播放器直连官方 CDN,网速不够照常降档(France 24 官方只有 1080p、360p 两条单独的清单,模块拼成一份);NHK 主清单同样最高档在前。固定频道使用实验台验证过的原始 HLS 地址,不经过该解析模块,避免重复和额外转发开销 |
| 海外频道 | 42 个海外免费频道:体育 13(Sky Racing、FUEL TV、beIN Sports Xtra、FIFA+ 等)、娱乐时尚 12、文旅 7(含 NASA+、Gusto TV)、国际 9(NEWS1、France 24 Español、Thai PBS、Bloomberg TV 亚太 / 欧洲 / 美国、DW English、TRT World、Al Jazeera English)、韩国 1(Arirang),并入对应的现有分组、排在组尾 | 实验台验证过的固定直链,播放器直连各平台 CDN,无需登录;官方主清单把低档排在前面的 13 台(Thai PBS、DW English、TRT World、NASA+、Gusto TV、Arirang、FUEL TV、MTRSPT1、Terra Mater WILD、Wipeout Xtra、MovieSphere、FIFA+、Qello Concerts)由本机转发一次主清单、把最高档挪到最前(France 24 Español 官方只有两条单档清单,由本机拼成 1080p 在前的主清单),视频仍由播放器直连,本机取不到主清单时退回直连;在大陆常卡顿或连不上(Bloomberg、DW 在大陆连不上),默认关闭,在模块卡片上打开即可;服务端只给地址,能不能看取决于播放设备的网络(播放设备挂了代理,服务部署在大陆也能看);频道表是仓库里的 IPTV-overseas.m3u,和精选列表一样每 6 小时从仓库更新、无需升级镜像;暂无节目单 |
| 广电抓取 | 北京、天津、重庆、四川、贵州、安徽、大连、广东、广西、福建、江西、甘肃、青海、新疆、西藏、云南、吉林、黑龙江、内蒙古、海南、河北、山西、陕西、湖北、河南、湖南、江苏、辽宁、南京、青岛、山东、上海、深圳、浙江、杭州、宁波、嘉兴、梅州、泉州、晋江、石狮、莆田、宁德、无锡、扬州、宁夏等 | 从各广电源站、公开接口或客户端公开直播能力获取当前地址;短效签名、防盗链、加密清单和 CDN 代理按模块分别处理 |
| 景观直播 | 央视网「直播中国」、吉林风景、美丽河北、Live 南京、上海与青岛城市景观等 | 按源站当前在线状态动态收录;离线、下架或源站调整时会自动减少,不以固定频道数承诺可用性 |
| 内置网页抓取源 | 如纬来体育等需要从公开页面解析当前地址的单频道源 | 内置抓取规则与定时刷新;每个源可配多个入口地址,主站打不开或抓不到时自动换备用地址重试,清单本身通过远程配置更新(改仓库文件即生效,无需升级镜像)。每个源均可单独关闭 |
| 精选公开独立源 | 体育、国际、港台、文旅、宠物、娱乐时尚,以及苏州台、德化台等 | 项目维护的「精选频道」列表,收集公开可访问且经可用性检查的独立播放地址,并提供远程更新与本地快照兜底;可访问性检查不等同于版权授权审查 |
| 用户自有来源 | M3U8 直链、网页提取、M3U/M3U8/TXT 订阅 | 完全由部署者自行添加、排序、分组和控制在哪些配置档中显示,适合接入自有设备、合法订阅或已获授权的直播源 |
Note
所有内置抓取模块、内置网页抓取源和精选频道都能在「🌐 源管理」中独立关闭;需要完全空白的频道管理器时可使用 mblank=true。平台名称及商标仅用于说明兼容性,本项目不隶属于、也不代表上述平台或内容权利人。
当前版本更新内容
本次为「咪咕投屏专享 4K、杭州宁波直播、海外频道模块」版本:含电视端权益的咪咕会员在赛事上拿到 4K 投屏流,四屏账号的 H.265 / HDR 恢复正常;新增杭州、宁波官方直播与广东体育赛事;海外免费直播以默认关闭的「海外频道」「澳门」模块回归,国际频道从最高画质起播;登录失效有了提醒中心。升级镜像后重启即生效,现有配置与订阅无需改动。
- 咪咕含电视端权益的会员拿到「投屏专享」4K(issue #117):画质选 4K 时,含电视端权益的会员(四屏、超级足球通等)在列着「超清4K (投屏专享)」的赛事上,会按咪咕 App 投屏的取法拿到这一档:3840×2160、H.265、约 26M,比手机端的原画高一大截。其余情况统一按手机端取流:此前这类账号走「大屏」策略时,咪咕会无视 H.265 / HDR 设置只给 H.264 SDR,现在和其他账号一样拿到 H.265 HDR 版本,HDR 开关也能生效。没有电视端权益的账号画质不变
- 新增杭州、宁波官方直播:杭州综合、西湖明珠、杭州生活、杭州影视、杭州青少体育 5 路,宁波新闻综合、经济生活、都市文体、影视剧 4 路,都归入「浙江」分组(杭州青少体育同时出现在「体育」),免登录、零配置、默认开启,可在源管理单独关闭。两家都按官网播放器的流程在播放时取新签名(杭州约 2 小时、宁波约 1 小时有效),签名快到期或被官方拒绝时自动重签,长时间观看不断流;不把一次性的签名写进播放列表。杭州官方 CDN 只认官网来源头,清单和视频都经本机转发;宁波的 CDN 不看来源头,本机只中继清单,视频由播放器直连官方 CDN。杭州台标取自官方频道接口,宁波官方没有频道图标,内置台标库收了 NBTV 台徽的图。两家官网都没有可读的节目单(杭州是整点「精彩节目」占位,宁波是每周一张节目表图片),暂无节目单。两家取签名的接口都只对大陆网络开放,部署在大陆以外(含香港)时这 9 路取不到。由公共直播实验台移植,2026-10-06 在上海联通出口实测 9 路均为 1280×720、H.264 / AAC,连续播放与签名失效后的重签都正常。
- 广东体育官方赛事并入广东分组:新增独立「广东体育赛事」抓取模块,自动将官方账号当前公开在播的每场赛事显示为“广东体育 · 赛事名称”,放在「广东」分组,同时出现在「体育」分组(赛事名带少儿、卡通、动漫的改放「少儿」,带教育、科教的改放「教育」)。开播后加入、结束后移除,数量与排序变化不改变赛事标识;免登录、零配置,后台有独立开关。播放时重新检查赛事状态,本机只中继清单,视频分片由播放器直连官方 CDN,不占服务器带宽;播放器连不上官方 CDN 时可改用全代理版订阅(
?relay=2)。广东体育电视频道继续使用荔枝网来源,赛事直播间单独取流;赛事直播间没有电视频道节目单,台标按直播间规则留空。 - 新增「海外频道」与「澳门」两个模块,默认关闭:09-25 因大陆卡顿从精选列表移出的 33 个海外免费直播(体育、娱乐时尚、文旅、国际、韩国)回到新的「海外频道」模块,排在各分组末尾,视频由播放器直连各平台 CDN;频道表放在仓库里的
IPTV-overseas.m3u,每 6 小时拉一次,以后增删、换地址推送即生效,取不到时用镜像里自带的那份。「澳门」模块提供澳广视(TDM)自办的六套电视:澳视澳门、澳视葡文、澳门体育、澳门资讯、澳门综艺、澳门-Macau,按官网播放器的方式先查线路再取流。两个模块在「源管理 → 内置抓取模块」的「海外」分类里,默认关闭:能不能播取决于播放设备(澳门还要求部署的机器)能不能连到大陆以外,需要时手动打开。面包台在大陆和海外都已失效,从精选列表删除 - 海外频道新增 9 个官方直播:Thai PBS、Bloomberg TV 亚太 / 欧洲 / 美国、DW English、TRT World、Al Jazeera English 并入「国际」,NASA+、Gusto TV(美食)并入「文旅」,都是广播机构官方或官方授权分发平台给的固定地址,视频由播放器直连。和其他海外频道一样在「海外频道」模块里、默认关闭;频道表是仓库里的
IPTV-overseas.m3u,以后换地址推送即生效。最高画质:TRT World 2560×1440,Thai PBS、DW、NASA+、Al Jazeera、Gusto TV 1920×1080,Bloomberg 1280×720;都从最高档起播(见下一条),Thai PBS、DW 保留官方的字幕轨。大陆网络下 Bloomberg 与 DW 连不上,其余几台大陆探针能连上,流畅度未经大陆实测。NHK World、Arirang、CNA、France 24 English 主项目里本来就有,没有重复加,改成了最高档起播(见下一条);Euronews 两台只有官方 YouTube 直播,要在镜像里装 yt-dlp 才能取,暂不接入。 - 国际频道从最高画质起播,网速不够再降:不少官方主清单把最低档排在第一(CNA 270p、NASA+ 234p、Thai PBS 144p),APTV 等按清单顺序起播的播放器会先糊一阵;以前的办法是只写最高档,代价是网速跟不上也降不下来。现在 CNA、France 24 English / Français、World Poker Tour 改由「亚洲与国际直播」模块提供,海外频道里的 Thai PBS、DW English、TRT World、NASA+、Gusto TV、Arirang、France 24 Español,以及 FUEL TV、MTRSPT1、Terra Mater WILD、Wipeout Xtra、MovieSphere、FIFA+、Qello Concerts 也改成这样:播放时本机取一次官方主清单,把最高档挪到最前再交给播放器,其余几档、独立音轨和字幕都保留,子清单和视频仍由播放器直连官方 CDN,本机只多一次清单请求。本机取不到主清单时直接退回官方地址,和以前一样能播。France 24 三个语种官方都只公开了 1080p、360p 两条单档清单,模块把它们拼成两档的主清单;NHK World 的主清单也把高码率的 720p 挪到了最前。后台和独立播放页的网页播放器同样改为从最高档起播,之后照常自动升降。后 7 台的子清单带会话参数,以前写死不了最高档,现在由本机取主清单时建立会话,播放设备换个网络也能接着用。精选列表里的 CNA、France 24 English / Français、World Poker Tour 条目先留给没升级的部署,新镜像里会被模块那份顶替,不会出现两个同名频道;用户对这四台做过的隐藏、改名、移组、排序要重新设一次。2026-10-06 实测:本机交给播放器的主清单第一档都是最高档(TRT World 2560×1440,CNA、France 24 三个语种、DW、NASA+、Gusto、Thai PBS 1920×1080,NHK、Arirang 1280×720),网页播放器第一个请求的就是这一档。
- 登录失效有提醒,频道不再悄悄消失:后台新增提醒中心,导航下方一行提示、点开看清单,汇总登录凭证失效、抓取失败或被限流的模块、损坏的模块配置、失效的节目单源,以及开了用户令牌却没设访问密码等问题,对应页签标红点或橙点,出问题的模块卡片变红。需要登录的模块(咪咕、B 站、北京台、央视频、凤凰秀、四川)凭证失效时都会报到这里;平台有游客档的自动降档继续播(凤凰三台降到 480p,咪咕降到游客 540P,B 站最高「超清」),北京台 9 个电视频道保留在列表里。此前凭证过期时,有的悄悄降了画质,有的频道直接从列表里消失,后台还显示「已配置」
- 后台网页里播放宁波、NASA+ 不再失败:宁波的官方 CDN 拒绝别家网站的来源头、也不给网页跨域许可,后台网页播放宁波频道时自动改走本机全代理(和咪咕、山东台一样);后台和独立播放页请求视频时不再带本页地址做来源头,NASA+ 这类放行「不带来源」、拒绝别家来源的 CDN 在网页里也能播。订阅给电视和播放器的地址不变。Thai PBS 的官方 CDN 只放行自家网站,网页里仍播不了,用播放器打开正常。
- 海南台抓取不再隔几轮失败一次:官方频道列表接口约三分之一的请求要 12~13 秒才回,原来 10 秒就放弃,提醒中心隔几轮就报一次「海南抓取失败」;现在等到 20 秒,连续 8 轮实测全部成功
- 后台界面整理:「源管理 → 内置抓取模块」改成按分类(账号与授权、网络直播平台、免账号模块、海外)切换,不用再长距离滚动,各分类的数量跟着「全部 / 已启用 / 已关闭」筛选变;各页标题和导航统一样式,品牌标识更新
完整更新历史见下方 更新日志
推荐使用 Docker Compose。只需要一个配置文件和一条启动命令,几分钟即可拥有自己的 IPTV 服务。
Docker 镜像:akiralereal/iptv · 查看版本标签。下面使用 latest 标签;使用 NAS 图形化容器管理器时,也可直接搜索 akiralereal/iptv,按下方配置设置端口和数据目录。
创建 docker-compose.yml:
services:
iptv:
image: akiralereal/iptv:latest
container_name: iptv
init: true # 回收 Chromium 僵尸进程
ports:
- "1905:1905"
environment:
- mport=1905 # 容器监听端口,与 ports 对应
# - mhost= # 可选:外部访问地址(如 http://192.168.1.100:1905)
# - mpass= # 可选:访问密码,设置后访问 http://ip:port/密码/...
volumes:
- ./data:/iptv/data # 数据持久化,不挂载则重建容器 / 升级镜像会丢配置
restart: alwaysdocker compose up -d升级时执行:
docker compose pull && docker compose up -d部署完即可访问:
| 用途 | 地址 |
|---|---|
| M3U 播放列表 | http://your-ip:1905/interface.m3u(推荐带 .m3u 后缀;裸 /m3u 内容相同) |
| TXT 播放列表 | http://your-ip:1905/txt |
| EPG 节目单 | http://your-ip:1905/playback.xml |
| 管理后台 | http://your-ip:1905/admin(设了密码则 http://your-ip:1905/密码/admin) |
🧩 平台账号、画质等内容配置不用写进 compose:部署后进后台「🌐 源管理」在对应模块卡片里设置(支持扫码登录 / 书签工具),保存即时生效。备份 / 换机迁移用后台「设置 → 系统配置 → 🧳 配置备份 / 迁移」一键导出导入(
logos/自定义台标需单独拷贝),或直接备份./data目录。更多环境变量与玩法见配置与进阶。
四个页面,完成从内容接入到播放分发的整个流程:
| 页面 | 能做什么 |
|---|---|
| 📺 我的频道 | 分组、隐藏、排序、重命名与批量管理;按名字搜索频道在哪个分组;按名字长期屏蔽频道、一次隐藏整批同前缀分组;查缺台标;建立多套配置档;复制标准版、兼容版或全代理版订阅地址 |
| 🌐 源管理 | 管理抓取模块、内置源与精选频道;添加网页提取、手动直链或订阅源;检测失效频道并调整多源优先级 |
| ⚙️ 设置 | 调整系统参数、频道别名、自动分组规则、EPG 聚合和用户令牌;导出或导入完整配置 |
| ℹ️ 关于我们 | 查看当前版本并检查更新 |
修改源后 1-2 秒内自动重新生成播放列表;外部源配置存于数据目录 external-sources.json。
B站 / 抖音 / 虎牙 / 斗鱼 / 咪咕 ─┐
广电与景观抓取模块 ──────────────┤
iPanda 直播模块 ─────────────────┤
亚洲与国际直播模块 ──────────────┤
内置网页抓取源 ──────────────────┼─→ iPTV 聚合 / 去重 / 编排 ─→ M3U / TXT / EPG ─→ 电视 · 手机 · 电脑
精选公开独立源 ──────────────────┤
自定义直链与外部订阅 ────────────┘
| 播放器 | 推荐订阅 |
|---|---|
| DIYP / 百川影音 | TXT 订阅:/txt |
| TiviMate / APTV / Kodi / OK 影视 | 标准 M3U:/interface.m3u |
| 飞牛影视 | 标准 M3U:/interface.m3u,必须保留 .m3u 后缀 |
| 极空间极影视、部分老电视盒 | 兼容版:/interface.m3u?relay=1 |
| 使用兼容版仍无法播放的设备 | 全代理版:/interface.m3u?relay=2,兼容的频道会由服务器转发视频分片 |
Note
能使用标准版就无需切换;标准版链路最直接。播放器不跟随跳转时使用兼容版,只有兼容版仍失败时才使用全代理版。
部分内置模块会按平台要求自动为单个频道启用全代理,与所选订阅版本无关。例如央视景观的 CDN 会校验源站请求头,因此即使使用标准订阅,该分组的清单和视频分片也会自动经过 iPTV 服务端;其他可直连频道不受影响。
服务部署在香港或海外,或者播放设备挂了代理,哪些频道能看?
模块的默认开关不看网络:大部分模块默认开着,「海外频道」「澳门」默认关着,需要的在后台「🌐 源管理 → 内置抓取模块」最下面的「海外」小节里打开;部署在海外时,用不了的模块也在这里关掉。
能不能播,要看取流时是谁去连官方:
- 服务端取流(换签、全代理、中继清单):看部署服务的机器(NAS / VPS)的网络。咪咕、安徽、重庆、贵州、泉州、山东、深圳、青海、新疆只对大陆开放;吉林、江苏、无锡对大陆和香港开放,部署在其他海外地区时用不了。其中服务端只换签或只中继清单的,视频还要播放设备能连上。
- 播放器直连(服务端只给地址):看播放设备(电视、盒子、手机)的网络。「海外频道」33 台都是这种,在大陆连得上但常卡顿,播放设备挂了代理就流畅;宁夏(只对大陆开放)、黑龙江(大陆和香港)也是这种。
- 两头都要:「澳门」播放前服务端要向官网查 CDN,视频再由播放器直连,部署的机器和播放设备都要能连到大陆以外。
- 央视和卫视在海外靠「央视频」:63 个公开频道里 58 个能播,CCTV5、5+、16 按体育版权不对海外开放。
各模块在海外的实测结果见 OVERSEAS.md。
iPanda 网页端可以选“超清”,为什么这里只有 720p?登录能解锁 1080p 吗?
iPanda 网页播放器的清晰度名称与实际分辨率依次是:流畅 640×360、标清 854×480、高清 1024×576、超清 1280×720。播放器把 1080p 另称为“蓝光”,但当前 22 路 HLS 均未提供该档;逐路检查最高档视频编码也都是实际 1280×720,不是清单虚标。
这些频道的匿名接口已经返回公开可播状态,页面没有启用 VIP 清晰度限制。登录不会为当前 iPanda 直播解锁 1080p;主项目检测到的最高档 720p 正好就是播放器菜单中的“超清”。两个 24 小时总频道提供上述四档,其余 20 路为单档 720p。
北京台为什么只看到慢直播?怎样启用 9 个电视频道?
北京时间的公开活动和慢直播不需要登录,会自动出现;北京卫视、BRTV 各地面频道与卡酷少儿需要本人站点登录态。进入「🌐 源管理 → 北京广播电视台」,按卡片里的入口打开站点并登录;在浏览器开发者工具的 Network(网络)里刷新页面,点开 getUserInfo 请求,在 Request Headers 中单击 Cookie 的值后按 ⌘C(Windows/Linux 按 Ctrl+C),粘贴回后台保存即可,不需要鼠标右键。也可以用 mBtimeCookie 环境变量配置。
模块会先验证 Cookie:有效时加入 9 个电视台,失效时只隐藏电视台并给出提示,免登录直播继续可用。凭据只发给北京时间账号 / 取流接口,不会写进订阅或发送给媒体 CDN。北京时间媒体要求源站防盗链请求头,因此该模块固定由服务端代理 HLS;本地 macOS 会自动沿用系统 HTTPS 代理,Docker / Linux 可按需设置标准 HTTPS_PROXY 环境变量。
凤凰卫视怎样开启 720p?需要付费会员吗?
进入「🌐 源管理 → 凤凰卫视」,导入本人凤凰秀账号的 App.user.token 后保存即可。支持粘贴 Token 值或包含它的完整 Cookie;模块内提供书签工具和获取步骤,也可用 mFengshowsToken 环境变量配置。保存后的凭证随主项目配置持久保留,重启无需重填;失效时重新获取。
2026-09-03 实测:游客三台均为 854×480;普通账号登录后三台均为 1280×720、25 fps、H.264,无需付费会员。接口档位叫 fhd,实际是 720p。
本模块只提供凤凰资讯、凤凰中文、凤凰香港三路直播,不接入回看、点播、活动直播或栏目目录。三台归入香港分组;其它来源(内置精选列表、外部订阅)提供的同名凤凰条目不会被顶掉,原样保留作备用线路;播放器按名聚合「源1 / 源2」时本模块源排在前面,即默认源。播放地址实时向上游获取,沿用地区调度,Token 不发送到媒体 CDN 或写入订阅。直播使用 HTTP-FLV,本机仅转发不转码;网页播放器已支持,外部播放器也需支持 HTTP-FLV。
后台有央视频、虎牙、斗鱼,LunaTV 却导入不到?
部分 LunaTV / MoonTV 版本只把 #EXTINF 紧接的下一行当播放地址,遇到中间的 #EXTVLCOPT:network-caching 缓冲提示会漏掉整个频道(issue #114)。本项目的 M3U 输出已省略仅含缓冲提示的选项块,也兼容升级前的频道缓存。运行包含此修复的版本后,在 LunaTV 管理后台刷新直播源即可,订阅地址无需更换;缓冲时长由播放器自行设置。
B 站直播已与虎牙、斗鱼一样改为播放时解析、由本机中继清单,不再依赖 #EXTVLCOPT 请求头。其它来自订阅的直连源若带 Referer / User-Agent,那是播放所需的请求头,仍会保留;若使用的 LunaTV 版本不能解析并传递这些选项,这类频道需要在客户端侧适配,不能靠删除请求头或切换 relay=1/2 修复。
某些播放器点开频道后只有声音、没有画面?
这通常是 H.265(HEVC)兼容性问题:部分平台的直播流默认使用 H.265,而播放器无法解码。进入「🌐 源管理」,打开对应模块的配置并取消「启用 H.265 原画」,保存后重新播放。通过环境变量部署时可设 menableH265=false;个别频道仍有问题时再设置 menableHDR=false。
频道和台标正常,但播放一直转圈?
播放器可能不跟随 302 跳转。进入「我的频道」,点击订阅地址旁的「🩹 兼容版」,将新地址重新添加到播放器即可。兼容版由服务器直出播放清单,视频仍由播放器直连 CDN,不占用服务器的视频转发带宽。
隐藏掉的频道过几天又自己冒出来了?
「隐藏」绑的是频道 ID,而 ID 是按播放地址算的——源换了地址,那条隐藏就失效了。带签名 / 有效期参数的地址(?expire=…&sign=…)已经不再影响 ID;换了路径或域名的仍会。想让某个台以后都别出现,用「我的频道」里频道旁的「屏蔽」按钮,或右上角「🚫 屏蔽规则」按名字配一条:规则只看名字,源换址、频道每天重建都照样生效,删掉规则即恢复。像「体育-昨天 / 今天 / 明天」这类每天重建的分组,逐条隐藏没有意义,对其中一个分组点「隐藏分组」时会提议把同前缀的一起隐藏,以后新出现的也自动挡掉。
台标或节目单缺了一些,怎么补?
台标:用频道自己的官方台标,由本机托管(服务端下载校验后从你自己的服务器提供,坏图自动换下一个来源);官方图取不到、或 m3u 本来就没写台标的,用仓库自己维护的内置台标(logo-pack/)兜底,不联网。默认不再引入别人维护的公共台标库,想用的话自己设 mexternalLogoBase,规则见 LOGO.md。都没有的会留空(播放器画自己的占位图,不再裂图)。点「我的频道」右上角「🖼 缺台标」可以列出当前档里所有没图的频道,逐个点进详情上传;或直接把 <频道名>.png 放进数据目录的 logos/,优先级最高。景观、慢直播这类本来就不是台名的,留空即可。
节目单:按「咪咕自带 → 各模块从官方接口取 → 外部 EPG 源」的顺序补,前面给了的频道后面不再覆盖。模块自带节目单目前接入了央视频(央视与卫视频道),河南、浙江、江苏、广东、深圳、广西、海南、山西、陕西、天津、上海、山东、河北、大连、南京、湖北、福建(含厦门、福州)、新疆、云南、宁夏、泉州(新闻综合、闽南语)、石狮新闻综合频道、莆田新闻综合与文旅生活、无锡 5 个频道、扬州 4 个频道的官方节目单,北京(7 个电视频道)、甘肃卫视、延边卫视取自央视网,以及凤凰卫视、香港卫视、澳门莲花卫视、澳广视 6 个电视频道、NHK World、YTN;湖南、内蒙古、甘肃地面频道、吉林(延边卫视以外)、四川、贵州、重庆、黑龙江、广州、辽宁北斗、江西、安徽、西藏、青海、嘉兴、杭州、宁波、梅州、晋江、仙游、宁德官方暂时没有可用的节目单。咪咕频道(CCTV 各台取自央视网)与多数模块取今明两天;部分省台官方只发当天的节目单,零点后要等下一轮更新才有新一天的。各模块节目单的来源、覆盖与没接上的原因见 EPG.md。外部 EPG 源默认不带:先后内置过的 51zmt 已退化到只剩央视卫视,erw 10 月 1 日起停止免费下载。需要更广的覆盖,可在「设置 → EPG 聚合」自己加 XMLTV 源;某个源想压过官方节目单(比如它给的天数更多),勾上「优先于官方节目单」,它当前有节目的频道就改用它,源停更只剩旧数据时自动让回官方。老部署里没改过的内置默认源会被自动删掉;改过名的那条程序不会动,列表里会有一行提示。精选列表里的港台频道、各地景观和 B 站 / 虎牙 / 斗鱼这类没有公共节目单,属于正常。广东体育赛事子频道也按直播间处理,赛事标题直接显示在频道名中,不套用广东体育电视频道的节目单。
使用兼容版后仍然无法播放?
再切换到「🚚 全代理版」,即 /interface.m3u?relay=2。对明确支持服务端代取的频道,它会把清单地址改为本机同源地址并由服务器转发视频分片,能兼容更多老旧或限制较多的播放器;若上游平台不允许服务端拉取分片,则保留该模块的安全播放模式。视频流经服务器会增加带宽占用,因此能使用标准版或兼容版时,不建议开启全代理版。
央视频会员频道怎样登录?登录后会不会很快失效?
63 个公开频道不需要登录,服务会在真正播放时动态取票、自动续签短效地址,并在主线路异常时切换备用 CDN。
另有 10 个会员频道会一并出现在播放列表中。两种登录方式任选其一:
- 服务在有桌面的电脑上跑:在那台电脑上用
localhost打开后台,进入「🌐 源管理 → 央视频」,点击卡片里的央视频登录按钮,在弹出的窗口完成本人账号登录即可。 - Docker / NAS 等没有桌面的部署:在自己电脑的浏览器登录央视频网站,按 F12(Mac 按 ⌥⌘I)打开开发者工具切到 Network,刷新页面,点开任意一个
yangshipin.cn的请求,在 Request Headers 里单击Cookie的值后按 ⌘C(Windows 按 Ctrl+C)复制,粘贴到「🌐 源管理 → 央视频」卡片的导入框并「导入登录态」。必须从请求头复制:央视频的会话 cookie(vusession、accesstoken 等)是 HttpOnly,网页脚本和书签工具读不到,只有请求头里才有完整的一套。服务端会把这组 cookie 种进自己的浏览器 profile 并让站点 SDK 当场校验,成功后显示昵称与 VIP 状态;「公告」分组里的教程短片演示了全过程。
服务不接收密码;导入的 cookie 只存在央视频专用的 Chromium profile 里,不写进配置文件或备份。站点 SDK 的刷新令牌 48 小时有效、由 SDK 在页面里自动续期,服务端每 6 小时静默拉起一次后台会话让它续一次,家里几天没人看会员频道也不会掉线;站点要求重新验证、账号退出或会员到期后,需重新登录或导入。导入后如果你自己电脑上的登录被踢下线,属于正常现象(同一份令牌被服务端接管),不影响电视端。
会员视频必须经网页播放器解扰后才能被普通 IPTV 客户端正确解码,因此播放期间服务端会运行 Chromium,并在内存中保留最近少量 H.264/AAC fMP4 片段。最多同时保留 3 个会员频道,3 分钟无人请求后释放,换台后切回来不用重新起桥;每路起播前先攒够约 18 秒(至少三个分片)再交给播放器,并催官网播放器立即续拉后续分片;VLC 内核的播放器(Ceau Player、VLC 等)会拿到专门的清单,避免它开播几秒就卡一下。首次自动登录目前只支持有桌面环境的本机运行:Docker/NAS 无法把服务端窗口弹到你的电脑,管理页会明确禁用该按钮。浏览器 profile 等同账号凭据,不包含在 JSON 配置备份中,换机或跨平台部署请重新登录。
央视频频道能回看吗?节目单里点回放怎么还是直播?
不能,央视频模块只做直播。它的频道在订阅里已明确标为 catchup="none",支持该约定的播放器(TiviMate、OTT Navigator、Kodi IPTV Simple 等)不会再给这些频道显示回看入口;节目单本身不受影响。
要回看同一个台,切到播放器里同名频道的咪咕线路(播放器按名聚合「源1 / 源2」时选咪咕那一路),咪咕源的回看链路是现成的。不单独给央视频做回看,是因为央视频回看按频道和时段受版权方限制(如 CCTV13 全时段不提供),做出来体验也是时好时坏。
服务卡死、硬盘不停读写,日志里反复出现「开始提取」「Navigation timeout」「浏览器会话已启动」?
这是多个无头 Chromium 同时在跑把机器(尤其是内存 ≤2G 的 NAS / 小主机)拖进了交换分区。网页抓取型的源(如纬来体育)、广东台续签、央视景观、湖北台防盗链都需要起一个 Chromium,每个约占 200~400MB;此前它们各自启动、互不知情,且一个当前抓不到的源会在每个 5 分钟检查里都重新起浏览器再试一遍。
现已改为:全进程共用一个启动器,同时存活的 Chromium 不超过 mbrowserConcurrency(默认 2,超出的排队,常驻会话空闲时会主动让位);抓取失败按 10 → 20 → 40 分钟指数退避,不再每 5 分钟重试;网页抓取时不下载视频分片、图片、字体,取票会话也拦掉图片、字体(央视景观、湖北台连媒体请求一并拦掉;广东台的页面须保持在线,否则源站会立刻作废刚发的票据),并关闭 Chromium 磁盘缓存,5 分钟无人取票就整个关掉浏览器。若机器内存很小,建议在 compose 里设 mbrowserConcurrency=1;不需要网页抓取的可直接在「🌐 源管理」关闭对应的源或模块。反过来,若你经常同时观看广东、湖北、央视景观里的多路频道(这三个模块各需要一个常驻浏览器),内存又够(4G 以上),可设 mbrowserConcurrency=3 避免它们互相让位、反复重启浏览器。
想在本地几分钟内验证这套机制:msourceTickSeconds=20 mbackoffBaseMinutes=0.5 node app.js 可把 5 分钟检查周期与 10 分钟退避基数压缩(仅供测试,生产不要设);node scripts/verify-browser-launcher.mjs 会用本机模拟直播页跑一遍并发上限 / 空闲让位 / 分片拦截 / 失败退避。
央视景观需要登录吗?为什么日志显示浏览器会话已启动?
不需要登录。日志中的「央视直播中国浏览器会话已启动」表示服务端启动无界面的 Chromium,执行央视网页播放器并获取临时 HLS 地址,不会打开登录页,也不会保存央视账号或 Cookie。若相邻日志出现「数字频道号 + 由于版权原因,请登录后观看」,该数字频道号属于咪咕,与央视景观无关。
央视 CDN 会同时校验播放清单和视频分片的源站请求头,普通播放器无法自行补齐,因此央视景观固定使用全代理:只有实际观看时才产生流量,单路常见约 1–3 Mbps,多个观看设备会叠加。升级后请重启服务或重新生成播放列表,并在播放器中刷新订阅;若解析失败,服务日志会明确显示「央视直播中国链接请求失败」及具体原因。
内置抓取模块和精选频道是否代表内容已经获得转载授权?
不代表。抓取模块说明的是软件能够与公开页面或接口协作,精选频道的检查目标是确认地址格式和播放可用性;两者都不是对节目版权、地域许可或转播授权的法律审查。公开可访问的地址也可能因权利限制、平台政策或地区差异随时失效。
软件本身按 GPL-3.0 授权,如何使用、修改、分发不受这里限制;受限的是内容:请只接入你已获得授权或本人合法订阅的来源,不要把未获授权的频道拿去公开售卖订阅、重新广播、绕过付费或地域限制,也不要分享他人的账号凭据。对某项来源权利状态有疑问时,可在「🌐 源管理」关闭对应模块或精选频道,并优先使用自己的合法订阅或自有信号。权利人下架流程见版权与侵权处理。
播放器订阅类型的快速选择请看上方播放器适配;遇到新的兼容性问题,欢迎提交 issue 补充。
🎮 零配置即可使用央视频 63 个公开频道;央视频会员台及其他账号能力可在后台「🌐 源管理」按模块关联本人账号(自动登录 / 扫码 / 书签工具)。管理路径、更新间隔等在「设置」页配置——都不必记环境变量。账号只保存在你自己的部署里,令牌与浏览器 profile 都等同登录态、请勿外传。
| 变量名 | 默认值 | 说明 |
|---|---|---|
| mport | 1905 | 容器监听端口 |
| mhost | 公网 / NAS 访问地址,如 http://192.168.1.100:1905 |
|
| mpass | 访问密码(可选),设置后访问 http://ip:port/密码/... |
|
| mdataDir | /iptv/data | 数据持久化目录(镜像已默认此值并声明数据卷);建议 -v ./data:/iptv/data 绑定宿主机便于备份。老部署挂的 /migu/data 继续兼容,无需改动 |
📋 完整配置表(全部环境变量)
| 变量名 | 默认值 | 类型 | 介绍 |
|---|---|---|---|
| mport | 1905 | number | 本地运行端口号 |
| mhost | string | 公网/自定义访问地址 格式http://ip:port |
|
| mpass | string | 访问密码 大小写字母和数字 添加后访问格式 http://ip:port/mpass/... |
|
| mdataDir | 镜像内 /iptv/data;node 直跑为当前目录 |
string | 配置 / 数据持久化目录(仅环境变量可设) 旧镜像路径 /migu/data 继续兼容:新路径无数据、旧路径有数据时自动沿用旧路径 |
| madminPath | admin | string | 管理页面自定义路径,如填 console 则用 /console 访问后台(/admin 失效)保留字 api/player/favicon.ico 与非法值会回退 admin |
| muserId | string | 咪咕模块的账号 ID(仅需高画质 / 会员内容时配置) 推荐改在后台模块卡片里配置(附书签工具一键获取) |
|
| mtoken | string | 咪咕模块的登录 token(同上) | |
| mrateType | 3 | number | 咪咕模块画质 2: 标清 (480p) 3: 高清 (720p) 4: 蓝光 (1080p,需VIP) 7: 原画 (1080p+,需VIP) 9: 4K (2160p,需VIP) |
| mbiliSessdata | string | 哔哩哔哩模块的登录态 SESSDATA(不填限「超清」,填了解锁「原画」) 推荐改在后台模块卡片里扫码登录 |
|
| mBtimeCookie | string | 北京时间站点登录 Cookie(仅北京 9 个电视频道需要;公开活动 / 慢直播免登录) 推荐改在后台「源管理 → 北京广播电视台」配置 |
|
| TIANJIN_WISE_AK / TIANJIN_WISE_SK / TIANJIN_WISE_3DES_KEY | 内置 | string | 天津模块的津云 App 应用参数,平台更换参数时覆盖用,平时不用设 |
| menableHDR | true | boolean | 是否开启 HDR(vivid/4kvivid) 设 false 关闭 |
| menableH265 | true | boolean | 是否开启 H.265 原画 有兼容性问题(如只有声音没画面)时设 false 关闭 |
| menableClientDispatch | false | boolean | 客户端就近取流:服务器与观看设备不同运营商导致抓取频道跨网卡顿 / 播不了时设 true同网部署无需开启 |
| mupdateInterval | 8 | number | 节目单 / 源更新间隔(小时),不建议过短 |
| mexternalLogoBase | 空(不配) | string | 频道没有可用的自带台标时,按频道名到公共台标库兜底取图的基址。默认不配:台标库是别人维护的,不替你引入 用 taksssss 台标库就填 https://gcore.jsdelivr.net/gh/taksssss/tv@main/icon/(索引会自动带上);换成其它库需保证 <基址><频道名>.png 可访问。本地 logos/ 里的图始终优先 |
| mexternalLogoIndex | 跟随 mexternalLogoBase |
string | 台标库的「频道名 → 图片」索引地址。有索引才知道库里到底有没有这张图:没有就不给这个台标,而不是写一个必定 404 的地址(裂图) 索引每 7 天下载一次并落盘缓存,拉不到时自动退回按名兜底。 mexternalLogoBase 填的是上面那个 taksssss 地址时自动带上它的索引,其它库默认关闭(别人的清单对不上你的库);留空同样关闭 |
| menableLogoCache | true | boolean | 台标本机托管:每轮更新把要用的台标下载到数据目录 logo-cache/,逐张确认是图片后由本机提供,播放器不再直连各台图床与台标库;源自带的台标坏了(404、不是图片)自动换下一个来源。设 false 退回直接写原台标地址 |
| mrefreshToken | true | boolean | 是否每月自动续期平台 token 可能导致封号,可设 false 关闭 |
| mblank | false | boolean | 空白模式总开关,设 true 后下面三项内容开关默认翻转为关细粒度开关显式设值时优先于本项 |
| menableMigu | true | boolean | 是否启用咪咕抓取模块(CCTV/卫视 + 体育赛事 + EPG) 设 false 后体育赛事、回看、对应 EPG 不可用 |
| menableBuiltInSources | true | boolean | 是否启用内置单频道源(纬来体育 / Red Bull / 4K 卫视 等) |
| menableBuiltInSubscriptions | true | boolean | 是否启用内置订阅源(精选频道) 已添加的可在「源管理」删除,删后不复活 |
除
mdataDir/mport外,多数项也可在后台修改(模块项在「🌐 源管理」,平台级项在「设置」页),保存即时生效(端口与更新间隔需重启)。升级用户:环境变量与旧配置继续有效,首次启动自动迁移,无需改动。
后台「📺 我的频道」标题行右侧可新建 / 切换配置档,每档独立维护隐藏 / 分组 / 排序 / 重命名,互不影响;每台电视填各自的地址(每档底部可复制),如 http://你的IP:1905/interface.m3u?profile=woshi。各档共享同一份底层频道与 EPG,新增电视不增加抓取成本;默认档地址不变、老用户零感知。
只想用自己的源时,用内容开关关掉自带内容(也避免同名分组撞车):
| 需求 | 配置 |
|---|---|
| 彻底空白,自己加源 | mblank=true |
| 空白但保留抓取核心 | mblank=true + menableMigu=true |
| 只去掉自带的额外源 / 订阅 | menableBuiltInSources=false + menableBuiltInSubscriptions=false |
也可在后台「🌐 源管理」直接开关各卡片,保存即时生效。关闭 menableMigu 后体育赛事、回看与对应 EPG 不可用,属预期表现。
反向代理 / 域名访问 / 对外分享时填写(如 http://yourdomain.com:1905),仅内网使用留空即可。系统自动按访问来源选择播放列表里的地址:内网访问用内网地址,反代访问(带 X-Forwarded-For)用配置的公网地址;填 http(s):// 完整地址时不会强制补端口。
设置后所有服务都要在 URL 带密码路径:http://ip:port/密码/interface.m3u、http://ip:port/密码/admin 等,播放列表内的频道链接自动注入密码路径,未授权访问返回 403。
需要 Node.js 20+(推荐 22 LTS);部分平台的频道需要中国大陆网络环境。
git clone https://github.com/akiralereal/iptv.git && cd iptv
node app.js环境变量与 Docker 同名同义,例如:mport=1905 mhost="http://localhost:1905" node app.js(Windows PowerShell:$Env:mport=1905; node app.js)。
本次为「咪咕投屏专享 4K、杭州宁波直播、海外频道模块」版本:含电视端权益的咪咕会员在赛事上拿到 4K 投屏流,四屏账号的 H.265 / HDR 恢复正常;新增杭州、宁波官方直播与广东体育赛事;海外免费直播以默认关闭的「海外频道」「澳门」模块回归,国际频道从最高画质起播;登录失效有了提醒中心。升级镜像后重启即生效,现有配置与订阅无需改动。
- 咪咕含电视端权益的会员拿到「投屏专享」4K(issue #117):画质选 4K 时,含电视端权益的会员(四屏、超级足球通等)在列着「超清4K (投屏专享)」的赛事上,会按咪咕 App 投屏的取法拿到这一档:3840×2160、H.265、约 26M,比手机端的原画高一大截。其余情况统一按手机端取流:此前这类账号走「大屏」策略时,咪咕会无视 H.265 / HDR 设置只给 H.264 SDR,现在和其他账号一样拿到 H.265 HDR 版本,HDR 开关也能生效。没有电视端权益的账号画质不变
- 新增杭州、宁波官方直播:杭州综合、西湖明珠、杭州生活、杭州影视、杭州青少体育 5 路,宁波新闻综合、经济生活、都市文体、影视剧 4 路,都归入「浙江」分组(杭州青少体育同时出现在「体育」),免登录、零配置、默认开启,可在源管理单独关闭。两家都按官网播放器的流程在播放时取新签名(杭州约 2 小时、宁波约 1 小时有效),签名快到期或被官方拒绝时自动重签,长时间观看不断流;不把一次性的签名写进播放列表。杭州官方 CDN 只认官网来源头,清单和视频都经本机转发;宁波的 CDN 不看来源头,本机只中继清单,视频由播放器直连官方 CDN。杭州台标取自官方频道接口,宁波官方没有频道图标,内置台标库收了 NBTV 台徽的图。两家官网都没有可读的节目单(杭州是整点「精彩节目」占位,宁波是每周一张节目表图片),暂无节目单。两家取签名的接口都只对大陆网络开放,部署在大陆以外(含香港)时这 9 路取不到。由公共直播实验台移植,2026-10-06 在上海联通出口实测 9 路均为 1280×720、H.264 / AAC,连续播放与签名失效后的重签都正常。
- 广东体育官方赛事并入广东分组:新增独立「广东体育赛事」抓取模块,自动将官方账号当前公开在播的每场赛事显示为“广东体育 · 赛事名称”,放在「广东」分组,同时出现在「体育」分组(赛事名带少儿、卡通、动漫的改放「少儿」,带教育、科教的改放「教育」)。开播后加入、结束后移除,数量与排序变化不改变赛事标识;免登录、零配置,后台有独立开关。播放时重新检查赛事状态,本机只中继清单,视频分片由播放器直连官方 CDN,不占服务器带宽;播放器连不上官方 CDN 时可改用全代理版订阅(
?relay=2)。广东体育电视频道继续使用荔枝网来源,赛事直播间单独取流;赛事直播间没有电视频道节目单,台标按直播间规则留空。 - 新增「海外频道」与「澳门」两个模块,默认关闭:09-25 因大陆卡顿从精选列表移出的 33 个海外免费直播(体育、娱乐时尚、文旅、国际、韩国)回到新的「海外频道」模块,排在各分组末尾,视频由播放器直连各平台 CDN;频道表放在仓库里的
IPTV-overseas.m3u,每 6 小时拉一次,以后增删、换地址推送即生效,取不到时用镜像里自带的那份。「澳门」模块提供澳广视(TDM)自办的六套电视:澳视澳门、澳视葡文、澳门体育、澳门资讯、澳门综艺、澳门-Macau,按官网播放器的方式先查线路再取流。两个模块在「源管理 → 内置抓取模块」的「海外」分类里,默认关闭:能不能播取决于播放设备(澳门还要求部署的机器)能不能连到大陆以外,需要时手动打开。面包台在大陆和海外都已失效,从精选列表删除 - 海外频道新增 9 个官方直播:Thai PBS、Bloomberg TV 亚太 / 欧洲 / 美国、DW English、TRT World、Al Jazeera English 并入「国际」,NASA+、Gusto TV(美食)并入「文旅」,都是广播机构官方或官方授权分发平台给的固定地址,视频由播放器直连。和其他海外频道一样在「海外频道」模块里、默认关闭;频道表是仓库里的
IPTV-overseas.m3u,以后换地址推送即生效。最高画质:TRT World 2560×1440,Thai PBS、DW、NASA+、Al Jazeera、Gusto TV 1920×1080,Bloomberg 1280×720;都从最高档起播(见下一条),Thai PBS、DW 保留官方的字幕轨。大陆网络下 Bloomberg 与 DW 连不上,其余几台大陆探针能连上,流畅度未经大陆实测。NHK World、Arirang、CNA、France 24 English 主项目里本来就有,没有重复加,改成了最高档起播(见下一条);Euronews 两台只有官方 YouTube 直播,要在镜像里装 yt-dlp 才能取,暂不接入。 - 国际频道从最高画质起播,网速不够再降:不少官方主清单把最低档排在第一(CNA 270p、NASA+ 234p、Thai PBS 144p),APTV 等按清单顺序起播的播放器会先糊一阵;以前的办法是只写最高档,代价是网速跟不上也降不下来。现在 CNA、France 24 English / Français、World Poker Tour 改由「亚洲与国际直播」模块提供,海外频道里的 Thai PBS、DW English、TRT World、NASA+、Gusto TV、Arirang、France 24 Español,以及 FUEL TV、MTRSPT1、Terra Mater WILD、Wipeout Xtra、MovieSphere、FIFA+、Qello Concerts 也改成这样:播放时本机取一次官方主清单,把最高档挪到最前再交给播放器,其余几档、独立音轨和字幕都保留,子清单和视频仍由播放器直连官方 CDN,本机只多一次清单请求。本机取不到主清单时直接退回官方地址,和以前一样能播。France 24 三个语种官方都只公开了 1080p、360p 两条单档清单,模块把它们拼成两档的主清单;NHK World 的主清单也把高码率的 720p 挪到了最前。后台和独立播放页的网页播放器同样改为从最高档起播,之后照常自动升降。后 7 台的子清单带会话参数,以前写死不了最高档,现在由本机取主清单时建立会话,播放设备换个网络也能接着用。精选列表里的 CNA、France 24 English / Français、World Poker Tour 条目先留给没升级的部署,新镜像里会被模块那份顶替,不会出现两个同名频道;用户对这四台做过的隐藏、改名、移组、排序要重新设一次。2026-10-06 实测:本机交给播放器的主清单第一档都是最高档(TRT World 2560×1440,CNA、France 24 三个语种、DW、NASA+、Gusto、Thai PBS 1920×1080,NHK、Arirang 1280×720),网页播放器第一个请求的就是这一档。
- 登录失效有提醒,频道不再悄悄消失:后台新增提醒中心,导航下方一行提示、点开看清单,汇总登录凭证失效、抓取失败或被限流的模块、损坏的模块配置、失效的节目单源,以及开了用户令牌却没设访问密码等问题,对应页签标红点或橙点,出问题的模块卡片变红。需要登录的模块(咪咕、B 站、北京台、央视频、凤凰秀、四川)凭证失效时都会报到这里;平台有游客档的自动降档继续播(凤凰三台降到 480p,咪咕降到游客 540P,B 站最高「超清」),北京台 9 个电视频道保留在列表里。此前凭证过期时,有的悄悄降了画质,有的频道直接从列表里消失,后台还显示「已配置」
- 后台网页里播放宁波、NASA+ 不再失败:宁波的官方 CDN 拒绝别家网站的来源头、也不给网页跨域许可,后台网页播放宁波频道时自动改走本机全代理(和咪咕、山东台一样);后台和独立播放页请求视频时不再带本页地址做来源头,NASA+ 这类放行「不带来源」、拒绝别家来源的 CDN 在网页里也能播。订阅给电视和播放器的地址不变。Thai PBS 的官方 CDN 只放行自家网站,网页里仍播不了,用播放器打开正常。
- 海南台抓取不再隔几轮失败一次:官方频道列表接口约三分之一的请求要 12~13 秒才回,原来 10 秒就放弃,提醒中心隔几轮就报一次「海南抓取失败」;现在等到 20 秒,连续 8 轮实测全部成功
- 后台界面整理:「源管理 → 内置抓取模块」改成按分类(账号与授权、网络直播平台、免账号模块、海外)切换,不用再长距离滚动,各分类的数量跟着「全部 / 已启用 / 已关闭」筛选变;各页标题和导航统一样式,品牌标识更新
本次为「8K 不再跳片、抓取模块可筛选」版本:央视频 CCTV8K 不再隔一两分钟跳一下、跳完没声音;后台「抓取模块」页可以按开关筛选,关闭的模块一眼能看出来,详情里能看到这个模块有哪些频道(issue #164);后台网页里播放咪咕、山东台频道不再报错。另外后台界面做了一轮细节整理,「关于」页加了 Telegram 交流群和公告频道入口。升级镜像后重启即生效,配置与订阅无需改动。
- 央视频 CCTV8K 不再隔一两分钟跳一下、跳完没声音:央视频各家 CDN 节点的进度不一样,慢的比快的落后一两片,服务端每次刷新清单又常常换节点。8K 一次只列 3 片(6 秒),先取到慢节点、再取到快节点时,中间会有一片谁都没列过,播放器就跳过这 2 秒,音画时间戳一断,有的播放器恢复后就没有声音了。以前取到比手里还旧的清单时,服务端还会把它当成换流,把攒下的清单清空,更容易漏片。现在取到旧的就当这次没有新内容,不清空;8K 这种每片时长固定的频道,窗口跳过的一两片会按相邻分片的地址补回来。不多向官方取一次清单,其他频道不受影响。本机按真实上游、用 Ceau 的播放核心各播 6 分钟:改前跳片 8 处、音频断开 6 次,改后都是 0。
- 抓取模块可以按开关筛选,详情里列出频道(issue #164):「源管理 → 抓取模块」顶部加了「全部 / 已启用 / 已关闭」筛选,选过的会记在这个浏览器里。模块卡片开关后位置不变,不会整片挪动;勾选框换成拨动开关,关闭的卡片改成虚线、内容变淡,底部写明「已关闭」,浅色主题下也能一眼分清。点开模块详情会列出它抓到的频道名(多个分组时按分组列),名单区可以单独滚动;关闭的模块显示关闭前抓到的频道;从没抓过、或抓了没拿到频道的模块(比如四川没配 Token)会写明原因。
- 后台网页里播放咪咕、山东台频道不再报错:咪咕和山东台(齐鲁)的频道地址会跳转到官方 CDN,浏览器出于安全限制读不到那边的清单,在后台点「在页面里播放」或打开独立播放页时就报错。现在网页里播放这两类频道时自动改走本机全代理,访问密码、账号前缀和回看参数都保留。只影响后台网页里的播放,订阅给电视和播放器的地址不变。
- 后台界面细节整理:频道详情弹窗统一了布局,标题栏固定、内容区单独滚动,按钮和输入框尺寸对齐,手机上也能完整显示;切换「我的频道 / 源管理 / 设置 / 关于我们」时页面不再左右跳动,「源管理」「设置」里切二级标签时,从长内容切到短内容页面也不会往上跳;滚动时内容不再从顶栏四周透出来;整体换成浅色薄荷的半透明质感,左上角换成 iFans 字标。
- 「关于」页加 Telegram 社区入口:重新排版后新增 Telegram 用户交流群(@iFansClubChat)和公告频道(@iFansClub)的入口,README 顶部也加了对应链接。使用问题和心得可以到群里交流,Bug 和功能建议仍欢迎提交 GitHub Issue。
本次为「修复会员台被登出、8K 不再卡」版本:修复 v4.28.0 会把央视频账号登出、导致会员频道全部无法播放(已被登出的需要升级后重新导入一次登录态);央视频 CCTV8K 开播时先攒够缓冲,不再隔几秒卡一下。升级镜像后重启即生效。
- 修复 v4.28.0 会把央视频账号登出、会员频道无法播放:v4.28.0 为了让会员频道首次打开快一点,浏览器刚启动时让播放页和账号检查同时打开官网。官网的登录组件每打开一个页面都会检查登录是否快到期,快到期就用刷新令牌换一套新的;两个页面同时换,后换的那个拿着已经作废的旧令牌失败,官网随即把这台服务器上的央视频登录全部清掉,会员频道就报「央视频登录态不存在或已过期」。现在恢复成先确认账号、再打开播放页;切台用的预热页只在账号刚确认过之后准备,也不再定时重开。已经被登出的需要升级后重新导入一次登录态(后台「源管理」→ 央视频卡片 → 导入登录态,做法和第一次一样)。切台时用预热页省下的时间不受影响,首次打开回到 v4.27.0 的速度。
- 央视频 CCTV8K 不再几秒卡一下:8K 台每片只有 2 秒,官方一次只列 3 片(6 秒),而别的台每片 5~7 秒、一开播就有 15 秒左右。服务端约 5 秒更新一次清单,播放器手里这 6 秒撑不过去,所以隔几秒就卡一下,开不开代理都一样。现在这类短分片频道开播时,服务端先连着取几次清单、攒到 14 秒左右再交给播放器,起播会多等 8~9 秒,之后就顺了;只多向官方取四五次清单,其余频道不受影响。本机按真实 8K 录像回放、用 Ceau 的播放核心各播 90 秒:改前 4 轮每轮卡 5~12 次,改后 4 轮都是 0 次。另外说明:8K 台官方这条接口最高只给 1080P,播放器显示 1080p 是正常的。
本次为「央视频会员台切台更快、少招官方限流」版本:会员频道提前备好官网页面,切台少等几秒;公开频道收紧了向官方取票的节奏,播放器扫台、版权停播时的反复重试不再把服务器出口打进限流(issue #162、#158)。另外后台管理页换了一套薄荷绿配色。升级镜像后重启即生效,配置与订阅无需改动。
- 央视频会员频道打开、切台更快:会员频道要靠后台浏览器打开官网页面来解扰。以前每开一个台都要现开一个官网页面,等频道列表加载完再点台,官网还要首次加载自己的播放器,这几步在 NAS 上要好几秒。现在看会员台期间,后台会提前备好一个已经加载完的官网页面(挡住官网默认台的视频,不下载、不解码),切到别的会员台时直接拿它点台;浏览器刚启动时,播放页也和账号检查同时加载,不再排队。本机用官网公开频道实测,切台时「点台到出第一片」从约 2.5 秒降到 1 秒左右;NAS 开页面更慢,省下的会更多。起播前凑够 18 秒缓冲的规则没变,播放稳定性和以前一样,切台总时间仍会随这段等待在几秒内波动。备用页随后台浏览器在停播 3 分钟后一起关掉,不常驻。
- 央视频公开频道收回会放大限流风险的两处上游请求:v4.27.0 的共享刷新一有过清单就启动、停播后还跑 15 秒,播放器「刷新预览图 / 检测可用性」把频道扫一遍时,服务端对官方的请求随之翻倍。现在只有同一频道短时间内来了第二次请求(确实有播放器在轮询)才启动共享刷新,单次请求不留后台尾巴。同时去掉 v4.27.0 加的服务端分片探测:官方 CDN 对同一票据地址的重复请求大面积 403,这一枪既代表不了播放器出口的结果,在服务端与播放器同出口的家庭部署里还会吃掉播放器取这一片的机会。正常观看不受影响。
- 央视频公开频道增加实例级取票预算(issue #162):整台实例每分钟最多为 20 个没在播的频道向官方取票,超出的新频道请求本地回「疑似播放器批量探测,已暂停新频道取票」,不再打官方,约一分钟内自动恢复;正在播放的频道续播换票不计预算、不受影响。现有按客户端的批量探测防护只拦得住一台播放器连扫,官方限的却是服务器的出口 IP,几台设备各扫几个、或两秒一台的慢扫加起来照样会把出口打进限流,此后换新票也全部 403(issue #162 的现象)。多人共用一台时,有人扫台的那一分钟里其他人换新台可能被挡几十秒,日志里会有一行黄字写明是哪个客户端触发的。
- 央视频版权停播的台不再反复向官方请求(issue #158):官方回「应版权方要求,暂停提供直播信号」后,这个台在当前节目结束前(最多 5 分钟;查不到节目单时 3 分钟)直接在本地回同一句话,不再每次都去官方取票。以前播放器失败后约每秒重试一次、每次都向官方取票,几分钟就能取几百张,可能招来官方对整台服务器的限制。节目换了或到点后会重新向官方确认;开始冷却时日志里打一行黄字,写明当前节目和到几点。
- 后台管理页换成薄荷绿浅色配色:主色由蓝紫改为墨绿,页面背景、卡片、按钮和订阅地址栏随之统一;标签页、标题和按钮前的表情图标去掉了,只留文字。布局、按钮位置和功能都没变。
本次为「央视频断流不再卡死」版本:官方清单入口偶尔卡住十来秒时,APTV 等播放器不再停在原地要手动切台,会自己续上(issue #158);公开频道的清单同时加厚到约 30 秒,给播放器更多缓冲余量。另修复咪咕含电视端权益的账号拿不到「超清4K (投屏专享)」(issue #117)。升级镜像后重启即生效;Ceau 的直播延迟调整需要同时更新 Ceau。
- 央视频官方入口短暂卡住时,播放器不再停死(issue #158):官方的清单入口偶尔会卡住十来秒不回应。以前这一下服务端要陪着等近十秒再回一段失败说明,APTV 这类播放器会停在原地(黑屏或没有声音),要手动切台才恢复。现在三四秒内先把上一份清单回给播放器,官方恢复后把中间跳过的分片接回去,播放器停几秒后自己续上。那十来秒官方确实没有新内容,仍会卡一下;连续半分钟以上取不到时仍会失败。日志里会多出带「[央视频]」的黄字,写明先回了上一份清单、隔了多久恢复。
- 央视频公开频道增加直播缓冲余量:正在观看的频道共享约 5 秒一次的清单刷新,避免慢播放器漏片和多客户端重复请求,停播后停止刷新。保留真正从官方清单见过的分片及准确时长,逐步积累到至少 6 片、约 30 秒,最多 10 片,并按官方 CDN 留存范围剪掉旧片。冷启动先正常起播;断流恢复仍保留已有的旧清单兜底和跳片补接。视频继续由播放器直连 CDN,不转码。已有客户端不会因为清单变长就立即获得 30 秒缓冲,首次起播和长时间断流仍需实机验证。
- 央视频选线检查视频分片:每频道、每 CDN 最多一分钟读取一次分片开头的 TS 包,可切换到分片探测通过的备用线路。NAS 与播放器的出口可能不同,因此服务端分片探测全部失败时仍保留有效清单,避免误判频道不可播;探测失败原因进入日志。
- Ceau 配套播放调整:Ceau 的央视频公开频道中继地址默认采用 30 秒 VLC 直播延迟,并支持订阅的
adaptive-livedelay参数覆盖;需要更新 Ceau 才生效。其他来源和央视频会员解扰桥不套用此默认值。 - 咪咕含电视端权益的账号补要「超清4K (投屏专享)」(issue #117):这类账号取 4K 时咪咕的回应里可能不带大屏档位表,v4.16.0 加的「再要一次投屏档」因此没有触发。现在拿到的是原画或 4K 而没有大屏档位表时,会直接按投屏档再要一次;咪咕不给或只给试看就沿用原来的流,日志里写明咪咕列了哪些档、这一档给没给。普通频道和不含电视端权益的账号不受影响
本次为「后台加频道搜索、分组置顶置底」版本:后台「我的频道」页可以按名字搜索某个频道在哪个分组,调整分组顺序多了「置顶」「置底」(issue #159)。只改了后台页面,频道和播放不受影响;升级镜像后重启即生效,配置与订阅无需改动。
- 后台「我的频道」页可以按名字搜索频道(issue #159):分组多了以后,想知道某个台在哪个分组,只能一个个分组点开找。现在左侧「频道分组」标题下面多了一个搜索框,输入频道名,中间就列出所有分组里名字对得上的频道,每条后面标着它所在的分组;点一条会跳到那个分组,并把这个频道高亮出来。不分大小写,也不用管空格和连字符,输「cctv 5」「CCTV-5」都能搜到「CCTV5体育」。已隐藏的频道也搜得到,标着「已隐藏」,点了会跳到右侧「已隐藏」里对应的位置;按名字屏蔽掉的频道不在其中。搜索结果只用来查找和跳转,隐藏、改名、排序仍在分组里操作。点任意分组、点搜索框右侧的 ×、按 Esc 或点「退出搜索」都能回到分组视图。搜索框占了一行分组的位置
- 后台「我的频道」页的分组可以直接置顶、置底(issue #159):调整分组顺序以前只有「上移」「下移」,一次挪一位,分组多的时候把靠后的分组挪到最前面要点几十下。现在旁边多了「置顶」「置底」两个按钮,一下到位;「公告」分组固定在第一位,置顶是排到它后面。挪完后左侧列表会自动滚到这个分组,不用再去找。顺带修了一处小问题:排在「公告」后面第一位的分组以前还能再点一次「上移」,界面上会跑到「公告」前面,刷新后又弹回去,现在这时「上移」「置顶」都是灰的。窗口比较窄时这一排按钮一行放不下,会整齐地换成两行
本次为「福建加莆田、宁德、德化」版本:「福建」分组新增莆田 3 台、宁德 2 台和德化电视台;四川、内蒙古、西藏的省级频道台名带上省名(issue #157);修复挂载数据目录后重建容器,央视频提示找不到 Chrome(issue #153)。升级镜像后重启即生效;四川、内蒙古、西藏改名的 12 个台之前单独做过的频道设置需要重新设一次,其余配置与订阅无需改动。
- 新增莆田 3 个台(网友推荐):莆田新闻综合(1080p)、莆田文旅生活(原公共频道)、仙游电视台(720p),新模块「莆田」默认开启、无需配置,归入「福建」。地址取自莆田广播电视台「莆田TV」App 与官网共用的频道接口,带约 2 小时 45 分的官方签名,播放时由本机取签名并中继清单,视频分片仍由播放器直连官方 CDN,看多久都不会因签名过期断流。节目单取自莆田TV 官方接口(今明两天),仙游官方只有占位、暂时没有;台标收进了内置台标库。文旅生活播电视剧这类没有网络版权的节目时,官方会换成「因版权问题暂时无法观看」的画面,属于正常。「福建」模块里原本也有一路莆田新闻综合,来自海博 TV,海博恢复后播放器里会看到同一频道的两条线路
- 新增宁德 2 个台(网友推荐):宁德新闻综合、宁德文化旅游,均为 1080p,新模块「宁德」默认开启、无需配置,归入「福建」。每轮刷新向宁德台官方直播接口要一次地址,固定地址、不带签名,播放器直连官方 CDN;台标用接口里的官方频道图。宁德台的直播只对国内开放,海外部署播不了;官方节目单只有占位,暂时没有。和莆田一样,海博 TV 恢复后宁德新闻综合会多出一条线路
- 「福建」分组新增德化电视台:泉州下辖德化县融媒体中心的电视频道,放在精选频道里,开着精选频道的部署最迟 6 小时内自动出现,不用升级镜像。地址是官网「瓷都德化新闻网」在线直播页用的固定 HLS,不带签名,播放器直连官方 CDN,1080p。官网没有节目单,暂时没有;台标用德化县融媒体中心的站标,收进了内置台标库,随本版镜像提供
- 四川、内蒙古、西藏的省级频道台名带上省名(issue #157):官网只写「新闻频道」「少儿频道」「影视文化」这类通用名,播放列表里看不出是哪个省的台(内蒙古的少儿频道还会复制进「少儿」分组),自己加的外部节目单和播放器按名字对节目单、台标也对不上。现在按其他省的写法改成:四川新闻、四川经济、四川文化旅游、四川影视文艺、四川妇女儿童;内蒙古新闻综合、内蒙古经济生活、内蒙古少儿、内蒙古文体娱乐、内蒙古农牧;西藏藏语卫视、西藏影视文化。四川卫视、四川乡村、康巴卫视和内蒙古 12 个盟市台不变。这 12 个台之前单独做过的隐藏、改名、移组和排序需要重新设一次;按名字屏蔽的规则如果写的是旧名全称,也要改成新名
- 修复:挂载数据目录后重建容器,央视频提示找不到 Chrome(issue #153):央视频的登录态保存在数据目录下的浏览器配置里,Chromium 运行时会在里面放几个锁文件。以前停容器时浏览器被直接结束,锁留在原处;拉新镜像或在 NAS 上「更新 / 重建」容器后,Chromium 认为这份配置还被别的机器占着、拒绝启动,后台报「找不到可用的 Chrome/Chromium」,只能不挂载数据目录、每次重启都重新导入 Cookie。现在启动前先检查锁,确认不是本机正在运行的浏览器就清掉;停容器时也会正常关闭浏览器,锁随之删除,最近的 Cookie 一并写回。之前按 issue 里的办法在 compose 加了清理锁命令的,升级后可以去掉。配置目录确实被另一个浏览器占用或没有写权限时,会直接报明原因
- 修复:后台手动抓取自定义源后,频道要等下次定时更新才出现:在源管理里新加抓取模式的自定义源、点「抓取」,提示抓取成功,但频道管理和播放列表里看不到这个频道,要等下一轮定时更新或重启才出来。现在抓取成功后立即重新生成播放列表,频道马上出现。排在第一位的自定义源点「抓取」时,以前会把全部源重抓一遍,现在只抓这一个
- 精选频道去掉「东方卫视4K」:这条其实是看东方 App 的轮播频道,放的是 8 月录好的节目(画面里还带着当时的暴雨预警),不是直播,最高也只有 1080p。东方卫视直播照常由「上海」模块提供。开着精选频道的部署最迟 6 小时内自动去掉,不用升级镜像
- 后台「我的频道」页的分组栏加高:分组多了以后,左侧分组列表一屏只看得到八九个,还得先把整页往下滚一截。现在分组栏从页面顶部一直通到底,标题和订阅地址合成一张卡、挪到右侧频道列表上方,分组行也收紧了一些:1600×900 的窗口一屏能看到 17 个分组(原来 9 个),1280×800 能看到 14 个(原来 8 个),整页正好一屏。订阅地址一行放不下时,订阅、节目单、公网三组整组换行,不会把某个「复制」按钮单独挤到下一行;「点频道名看详情」的提示挪到了「配对状态」那一行
- 日志里能看到播放器拉中继清单的节奏(issue #142):央视频公开频道这类在标准订阅里由本机中继清单的频道,以前日志里不留痕迹,播放器加载慢或卡顿时看不出是哪台设备在播、多久刷新一次清单。现在每个频道、每个播放设备每分钟记一行「清单直出」,写明这段时间拉了几次清单、大约几秒一次,以及刚下发的清单有几片、目标时长和总时长,附带设备 IP 和 UA,排查卡顿时贴这几行就够
本次为「江苏加苏州、无锡、扬州,新增抖音直播」版本:「江苏」分组新增苏州 6 台、无锡 5 台、扬州 4 台(issue #149);新增抖音直播模块,默认从「聊天」「生活」两个分类挑 20 个正在直播的房间;四川模块在官网不认 Token 时后台直接提示(issue #150)。升级镜像后重启即生效,现有配置与订阅无需改动。
- 「江苏」分组新增苏州 6 个台(issue #149):苏州新闻综合、社会经济、文化生活、电影娱乐、生活资讯,以及苏州4K(官方名「SBS影像长廊」,台里自制纪录片轮播)。地址是苏州广电「看苏州」App 用的固定直播地址,不带签名,播放器直连官方 CDN;新闻综合、社会经济 1080p,另外三个 720p,苏州4K 为 3840×2160。这批频道放在精选频道里,开着精选频道的部署最迟 6 小时内自动出现,不用升级镜像;台标收进了内置台标库,随本版镜像提供。苏州台没有官方节目单接口,暂时没有节目单
- 新增无锡 5 个台(issue #149,网友推荐):无锡新闻综合、娱乐、都市资讯、生活、经济,新模块「无锡」默认开启、无需配置,归入「江苏」。地址取自无锡广电「无锡博报」App 的直播分享页,带约 2 小时的官方签名,播放时由本机取签名并中继清单,视频分片仍由播放器直连官方 CDN,看多久都不会因签名过期断流;新闻综合 1080i(约 3M),其余四个 720p(约 1.6M)。节目单取自无锡博报官方接口(今明两天),台标用 App 里的官方频道图。分享页只对国内开放,海外部署的这 5 个台会取流失败。无锡官网「太湖明珠」那一路要求带来源头,只能全代理,没接
- 新增扬州 4 个台(issue #149,网友推荐):扬州新闻(1080p)、扬州民生,以及江都、邗江两个区台(720p),新模块「扬州」默认开启、无需配置,归入「江苏」。地址是扬州市新闻传媒中心「扬州发布」App 直播用的 HLS,固定地址、播放器直连官方 CDN;节目单取自扬州发布官方接口(今明两天)。台标是 App 里的官方频道标,原图透明底黑字,深色界面看不清,内置台标库里铺了白底。扬州生活频道官方已停播,没收
- 新增抖音直播:新模块「抖音直播」默认开启、无需登录,频道归入新的「抖音」分组,排在「B站」之后。默认从抖音网页版「聊天」「生活」两个分类里轮流挑 20 个正在直播的房间,每 30 分钟重新挑一次;源管理里可以改选分类(抖音网页版一共 8 个:聊天、音乐、游戏、二次元、舞蹈、文化、生活、运动)、改数量(填 0 只用手填房间),也可以改成抖音网页「全部」页的原始顺序(首批约 15 个,不是 App 登录后的个性化推荐)。想固定看某个主播,把直播间地址或
live.douyin.com/后面的房间号填进「手动房间」,排在自动频道之前,没开播时跳过。播放地址在播放时现取;默认 FLV,由本机转发、不转码,抖音偶尔拿不到某个房间的 FLV 地址时自动改用 HLS,不再跳过这个房间;也可整体切到 HLS,由本机刷新清单、视频分片由播放器直连官方 CDN。画质默认超清,多数直播间是竖屏(超清约 720×1280),电视上两边会留黑边。直播间没有节目单,也没有回看 - 四川:官网不认 Token 时后台直接提示(issue #150):四川官网只在播放电视频道时才检查登录,Token 过期、被别处登录顶掉或复制错了,以前后台照样显示「已配置 Token」,要到播放时才报错。现在每次刷新会拿 Token 试换一次播放签名,官网不认时模块状态里出现警告、徽标变成「Token 已失效(请重新获取)」,频道列表照常保留;播放失败的提示也从只说「登录已过期」改成「官网不认当前 Token」。后台获取说明里加了一步:先确认官网里电视频道能正常播放,再复制 Token
本次为「福建加泉州新闻综合、晋江、石狮」版本:「福建」分组新增泉州新闻综合、晋江电视台、石狮新闻综合三个频道,都直接取自各台官网;泉州两个频道多了一条取流入口,更少遇到「官网要求人机验证」。升级镜像后重启即生效,现有配置与订阅无需改动。
- 新增泉州新闻综合:直接从泉州广播电视台官网取流,和泉州闽南语同一套做法:播放时向官网换取短期签名地址,清单与分片由本机转发;节目单取自官网播放页(只到今天),台标是官网首页的频道卡。「福建」模块里原本也有一路泉州新闻综合,来自海博 TV,但海博的频道接口现在一律返回 403,福建九个地市台都出不来,这一路先补上;以后海博恢复了,播放器里会看到同一频道的两条线路
- 泉州两个频道多一条取流入口,更少遇到「官网要求人机验证」:以前只有官网的两个签名接口,两个都被防火墙要求拖滑块时只能等冷却。现在多了一条:官网另一个域名的播放页里直接带着签好名的地址,两个接口都被拦时从这里取;上次从哪个入口取到,下次就先用哪个,被拦的入口不再每次都去碰。三个入口其实是同一个网站、各挂一套防火墙,只是多一条路,不能保证不被拦;三条都被拦时照旧暂停 5~30 分钟再试
- 新增晋江电视台、石狮新闻综合(网友推荐):泉州下辖两个县级市的电视台,新模块「晋江、石狮」默认开启、无需配置,归入「福建」。地址是两台融媒体中心官网直播用的固定 HLS,不带签名,播放器直连官方 CDN;晋江 720p,石狮 1080p。石狮的节目单取自官网直播页(今明两天);晋江官网的节目单目前只有「精彩节目」占位,暂时没有,官方排了会自动出来。台标:晋江用官方频道图;石狮官方没有频道台标,用石狮市融媒体中心的狮子标
- 内置台标库补上上视东方影视:上一版加回的咪咕上视东方影视漏收进内置台标库,这次补上
本次为「上海台加备用源、外部节目单认别名」版本:「上海」分组加上咪咕的上海新闻综合、第一财经作备用源,并加回上视东方影视(issue #146);在频道详情里设的别名,外部节目单配对时也认了(issue #144);后台可以一键添加「来源于网络」列表。升级镜像后重启即生效,现有配置与订阅无需改动。
- 「上海」分组加咪咕备用源,加回上视东方影视(issue #146):看看新闻官网对没有网络版权的节目(主要是电视剧)会暂停网络直播,这段时间上海新闻综合、第一财经播放报错,节目结束后才恢复;9 月 28 日实测新闻综合 30 个时段里有 13 个放不了,包括晚间黄金档。咪咕同一时段照常有画面,现在把咪咕的这两台放进「上海」分组、排在官方之后:APTV 等播放器会把同名频道合并成「源1 / 源2」,官方仍是源1,被暂停时切到源2 即可。节目单继续用看看新闻官方的。9 月 6 日因取不到流下线的上视东方影视复测能播,一并加回「上海」,节目单用咪咕的。上海都市、五星体育、新纪实、哈哈炫动咪咕没有,遇到暂停只能等节目结束。
- 频道别名对外部节目单生效(issue #144):在「频道详情」给频道设别名后,播放列表里的频道 id 会换成别名,但外部节目单配对时还在用原名,所以配不上。例如把
NHK総合(東京)的别名设成NHK東京・総合,外部源里NHK東京・総合的节目单一直不出来。现在按别名配对;咪咕或模块官方已经提供节目单的频道不受影响。升级后到「设置 → EPG 聚合」点一次「立即刷新并应用」就能配上;以后保存别名时,如果这个频道的节目单来自外部源,也会提示你刷新。 - 后台一键添加「来源于网络」列表:以前精选列表里的港澳台、新马、影视等网络第三方频道,现在放在仓库 from-the-web 目录里,之前只有「公告」里的教程视频介绍,视频里的地址没法复制。现在「🌐 源管理 → 👤 自定义源」多了一张「🌏 添加「来源于网络」列表」卡片,点一下自动填好订阅名称和地址,再点「📥 导入并保存」即可;已经加过就不再显示这张卡片。从「+ 添加自定义源 → 订阅模式」进去的,地址框下也能一键填入。这些是第三方转发源,国内直连大多播不了,表单里会写明。「公告」里的教程视频也改成了这个流程。
本次为「央视频改作备用源」版本:默认分组顺序把「央视频」挪到咪咕的「央视」「卫视」之后,播放器合并同名频道时先走起播更快的咪咕,央视频作备用。升级镜像后重启即生效,现有配置与订阅无需改动。
- 央视频默认排到央视、卫视之后:央视频官方线路起播慢、偶尔卡,同台的咪咕更快。APTV 等播放器会把同名频道合并成「源1 / 源2」,排在前面的分组就是默认源;现在默认顺序是 央视 → 卫视 → 央视频,央视和卫视都先走咪咕,想看央视频的 1080p 可以在播放器里切到另一个源。在后台拖动过分组顺序的配置档保持你自己的顺序;想换成新的默认顺序,在「我的频道」里把「央视频」拖到「卫视」下面,或者用重置功能只勾「分组排序」。
本次为「VLC 内核播放器看央视频公开频道更顺」版本:修复 Ceau Player、VLC 等 VLC 内核的播放器播央视频公开频道时,开头几分钟偶尔卡一两秒;央视频官方入口偶尔没响应时,更快切到备用线路。升级镜像后重启即生效,现有配置与订阅无需改动。
- 修复 VLC 内核播放器播央视频公开频道偶尔卡一下:Ceau Player、VLC 这类用 VLC 内核的播放器播直播时不读清单里的最后一片,要等下一次刷新清单才继续;央视频一片 5~9 秒,碰上连续几段长片,手里的余量就不够,开头几分钟会卡一两秒,偶尔更久。v4.19.0 修的是会员频道,这次公开频道也给这类播放器单独下发一份清单:每片后面垫一小段空白,最新一片不再被扣着不放,刷新间隔最长 5 秒。用同一段录制在本机反复回放,原来 9 轮里 6 轮卡、最长 5 秒,现在 25 轮里 4 次、多数不到 1 秒;长片期间仍可能轻微顿一下。其他播放器收到的清单不变。
- 央视频官方入口没响应时更快切备用:取频道清单时官方入口偶尔会挂住不回应,以前要等满 10 秒才换备用线路,画面跟着停 10 秒;现在等 3 秒就换。正常情况下 1 秒内就能取到,不受影响。
本次为「央视频频道不再十几秒一卡」版本:修复 APTV 等苹果系播放器、网页类播放器播央视频频道每隔十几秒卡一下、几次之后停播(issue #142、#143);泉州闽南语频道大幅减少对官网的请求,不容易再被要求人机验证。升级镜像后重启即生效,现有配置与订阅无需改动。
- 修复央视频频道在部分播放器上十几秒一卡(issue #142、#143):央视频官方 CDN 每次刷新清单都可能换一台服务器,同一段画面的地址跟着变。APTV、Apple TV / iPhone 上的播放器(苹果系统自带的播放内核)以及用 hls.js 的网页类播放器对这种变化处理得比较严格:发现地址变了就不再接受新清单,放完已缓冲的十几秒就卡住,反复几次后整条停播。上个版本只放宽了后台自带的网页播放器,这次改在服务端处理:同一段画面始终下发第一次给出的地址,这些播放器也能连续播放,实测同一频道连播 4 分钟不再卡顿。不做这项检查的播放器原本就能正常播,这次没有变化。
- 泉州闽南语频道减少被官网要求人机验证:泉州台官网的签名接口有防火墙,同一出口请求太频繁就改成要求拖滑块,频道报「官网要求人机验证」,同一出口的其他设备也会被一起拦住。旧版播放器每刷新一次清单就去签一次名,一个人看就是几秒一次。现在签到的地址所有观众共用、快到期才重签,官网拒绝旧地址时立刻重签;万一被拦,就依次停 5、10、20、30 分钟再试,期间不再请求官网,播放器会看到什么时候重试的提示。
本次为「央视频会员频道起播不卡」版本:修复 Ceau Player、VLC 等 VLC 内核的播放器打开央视频会员频道后几秒就卡一下、卡一两次才顺;会员频道起播前多攒一点、切回不用重新起桥;修复后台网页播放器播央视频频道十几秒就停(issue #142),取不到地址时直接显示原因;用户管理在没设访问密码时给出提醒。升级镜像后重启即生效,现有配置与订阅无需改动。
- 修复 VLC 内核播放器打开会员频道几秒就卡:Ceau Player、VLC 这类用 VLC 内核的播放器,播直播时不读清单里的最后一片、要等下一次刷新清单才继续,而且只在离直播边缘约 15 秒的位置起播;会员频道一片 5~9 秒,它手里常常只剩几秒,官网偶尔 9 秒才出一片就会卡,每卡一次它自己把缓冲加大一点,所以表现为开播几秒卡、卡一两次后正常。现在服务端认出这类播放器后给它一份专门的清单:把每片最后半秒单独列出来(它压着不用的只剩这半秒)、每秒刷新一次、起播点往回退到约 25 秒前。用 Ceau Player 自带的同一份播放内核实测,两个会员台同时冷启动各播 3 分钟不再卡(之前同样测法每次卡 3~4 次),中途加入 0.5 秒起播。APTV、系统播放器等拿到的清单与分片不变
- 会员频道起播更稳、切回更快:以前官网播放器解出第一片就交给播放器,打开后常是播一段等一段;现在先攒够约 18 秒(至少三片)再交出去,并在拿到第一片时就催官网播放器去取后面的分片。冷启动大约 7~10 秒出画面(视网络和机器而定)。停播后页面保留 3 分钟(原来 45 秒),换台后切回来不用重新起桥、基本秒开。系统播放器等中途加入时从直播边缘往回约 25 秒起播,缓冲更厚。日志里新增「解扰桥就绪」一行,写明起播各阶段耗时;开
mdebug=1后还会逐条记录播放器请求了哪些清单和分片、官网多久取一次上游清单,方便排查卡顿 - 修复网页播放器播央视频频道十几秒就停(issue #142):在后台「在页面里播放」或「新窗口打开」播央视频的频道,十几秒后就停住,下方提示「播放失败:levelParsingError」。央视频每次刷新清单会换一个 CDN 节点,同一段画面的地址跟着变,网页播放器用的播放库(hls.js 1.6 起)把这当成清单出错,只有一个清晰度可换时就直接放弃,放完已缓冲的十几秒就停了。现在网页播放器遇到这种情况只记一条警告、照常往下播,实测同一频道连续播放不再中断。APTV、VLC、电视上的播放器 App 本来就不受影响
- 网页播放器取不到地址时直接显示原因(issue #140):频道拿不到播放地址时,后台内嵌播放器和新窗口播放器以前只显示「manifestParsingError (HTTP 200)」或「网络错误」,咪咕版权屏蔽这类情况看起来像网络或海外 IP 问题。现在两处都直接显示服务端给出的原因,例如「节目播出调整…(咪咕版权屏蔽:…)」;其他错误照旧
- 用户管理提醒设访问密码(issue #141):没设访问密码时,所有地址都是开放的,去掉令牌的地址照样能拿到默认播放列表、打开后台,一人一源的令牌等于没生效。用户管理面板现在会在这种情况下显示提醒,并给出去系统配置设密码的入口(环境变量设的密码也算)。同时删掉了一个从未生效、界面上也没有的「强制令牌」配置项
本次为「新疆直播签名修复」版本:修复新疆模块隔三岔五整天放不出来、报「新疆广电签名脚本没有某天的配置」(PR #137)。升级镜像后重启即生效,现有配置与订阅无需改动。
- 修复新疆频道部分日子整天放不出来(PR #137):新疆广电官网每天换一套播放签名,官网脚本里预先排好了两个月的配置,但约四成日子的日期写法和其余日子不一样,旧版认不出来,那一整天新疆分组七路都报「新疆广电链接请求失败:新疆广电签名脚本没有 2026-09-26 的配置」这类错误(9 月 22 日、9 月 26 日至 10 月 2 日等都是)。现在两种写法都能认,官网当前排好的 9 月 1 日至 10 月 30 日全部能取到签名。感谢 @vitter 定位问题
本次为「节目单跨零点不断档」版本:咪咕频道(CCTV 各台取自央视网)的节目单改为取今天与明天两天,零点一过不再有一百来个频道同时显示「没有节目单」,央视频分组里同名的 CCTV 频道也随之恢复。升级镜像后重启即生效,现有配置与订阅无需改动。
- 修复零点后咪咕与 CCTV 频道没有节目单:咪咕频道的节目单(CCTV 各台取自央视网)以前只取当天,而全量更新默认 8 小时一轮、从服务启动时起算,不对齐零点;零点一过到下一轮更新前,这些频道一条正在播的节目都没有,播放器里显示「没有节目单」(CeauPlayer 显示「No listings found for this channel」)。央视频里的 CCTV 频道与咪咕同名(如两边都有的 CCTV2财经),同名频道在播放器里共用一份节目单,按「咪咕 → 模块」的顺序用的是咪咕这份,所以央视频分组里的 CCTV 频道也一起空着,央视频自己取今明两天的节目单没轮上。现在咪咕与央视网两条接口都取今天与明天(2026-09-26 实测 243 个咪咕频道明天的节目都已排好),跨零点那条两天都有的只留一条;明天的取不到不影响今天,今天没发的频道照旧让给模块与外部源。本地零点后实测一轮更新:当时没有节目的频道从 100 个降到 0 个,CCTV2财经有今明两天共 80 条。每轮更新向这两个节目单接口的请求随之翻倍,它们不用登录,与咪咕账号无关。播放器一般会缓存节目单,升级后如果还显示旧的,在播放器里刷新一下节目单
本次为「官方节目单、自维护台标与新增直播」版本:节目单改由各台官方接口提供,29 个抓取模块接上了自己频道的官方节目单,不再内置 erw 等第三方 EPG 源;台标改由服务端下载校验后本机提供,并随镜像内置一套自己维护的台标库,不再默认引入公共台标库;新增山西、陕西、天津、西藏、青海、宁夏、嘉兴、梅州、泉州与澳门莲花卫视共 10 个官方直播模块(44 路);四川电视频道恢复、广东纪录片能播;修复自己配的少儿、体育、教育频道被地方官方同名频道顶掉。升级镜像后重启即生效,现有配置与订阅无需改动:老部署里没改过的默认 EPG 源(erw / 51zmt)会被自动删掉,想要更全的节目单可在「设置 → EPG 聚合」自己加 XMLTV 源并勾「优先于官方节目单」,想继续用公共台标库就设 mexternalLogoBase;大爱电视、GOOD TV 两个模块下线,精选列表删掉 34 个境外频道与华视高清,宁夏三台移入新的「宁夏」模块(精选列表远程更新,未升级镜像的部署也会跟着变,升级前暂时没有「宁夏」分组)。
- 新增山西官方直播:山西广电官网直播页的 6 路省级频道(山西卫视、黄河电视台、经济与科技、影视、社会与法治、文体生活)与 10 路地市频道(太原、朔州、忻州、阳泉、吕梁、晋中、长治、晋城、临汾、运城)统一归入「山西」,免登录、零配置、默认开启,可在源管理单独关闭。两条链路取流方式不同:省级频道的地址不带签名,但路径里有一段由官网播放器按「频道码 + 当天日期(上海时区)」算出的键,只认当天——昨天和明天的键实测都回 400,所以不能写进播放列表,改为每次播放请求时按当前时间重算,零点后的第一次轮询就换到新路径。官网 CDN 换键的时刻和本机钟并不严格对齐:实测本机零点过 1.6 秒按新键取清单仍是 400,官网两三秒后才换过来,这一两秒足够让代理层退回 302、把播放器带进 400 后断流(跨零点实播时 ffmpeg 就停在了这里);因此零点前后 5 分钟内由模块自己取清单,先试按本机时间算的键、不通再试相邻那天的键,对真实 CDN 本机快、慢两个方向都能取到当前可用的清单;地市频道播放前向官网签名接口换取带 hwSecret 的地址,清单里每个分片也各带上游签好的签名,实测签名 10 分钟后仍可用,本机 30 秒换一次只为挡住播放器 2 秒一次的清单轮询。两家 CDN 都不看来源头、也不挑播放器标识(ffmpeg、okhttp 裸请求清单与分片均 200),所以走「只中继清单」:本机按轮询重新解析并下发清单,媒体分片由播放器直连官方 CDN,本机不转发媒体,需要时也可用
?relay=2全代理。实测 16 路均为 1280×720、H.264 High / AAC-LC 立体声、25 帧。16 路台标都用官网直播页下发的官方台标。地市几路按官网原名收录为「太原-1」「吕梁-1」这类编号——台标角标上打的就是这个,不另起名。节目单取自官网逐台节目单接口(今天与明天):省级 6 路与太原、晋中、临汾有,另外 7 个地市台官网的节目单文件本身是空的 - 新增陕西官方直播:陕西网络广播电视台看电视页的 8 路频道(陕西卫视、新闻资讯、都市青春、银龄、秦腔、体育休闲、农林卫视、移动电视)统一归入「陕西」,免登录、零配置、默认开启,可在源管理单独关闭;影视频道官网没有播放地址、乐家购物是购物台,不收。官网播放器从一个加密脚本读频道目录(每次下发的 AES 密钥都不同),地址本身不带签名,但会整批换名:实测上海凌晨 3 点前后 8 路全部换了新名、旧名当即 404,新名十来分钟后才陆续可播(官网自己也播不了),所以不把地址写进播放列表,改为播放时现解目录(5 分钟复用),清单取不到就立刻重读目录换新名。先前探测里「都市青春」「移动电视」超时并非停播:这家 CDN 按完整地址把约一成请求分到卡住的节点、同一地址次次卡(本机 12 秒、大陆各地探针 6 秒多),同一路换个查询参数一两百毫秒就回,模块取清单时带每秒一换的参数,3 秒没回就换个值重试。CDN 不看来源头、不挑播放器标识(ffmpeg、okhttp、空 UA 均 200),走「只中继清单」,媒体分片由播放器直连官方 CDN,需要时也可用
?relay=2全代理。实测 8 路均为 720×404、H.264 Main / AAC-LC 立体声、25 帧,官网只提供这一档。台名沿用咪咕原先的叫法(陕西新闻资讯频道等),咪咕的同台几路随之撤掉(见「咪咕撤掉陕西四路」一条);8 路台标都用频道目录下发的官网频道图标。节目单:官网节目单接口 8 路都有,但只给当天、只有「时:分」,按服务器响应日期认定是哪一天,同一时刻排两条(国歌紧跟新闻联播)的留后一条。夜里新闻资讯、都市青春、银龄、秦腔、体育休闲、移动电视是测试卡(官方节目单里移动电视 0:01–6:00 写的就是「彩图」),属于正常 - 新增天津官方直播:津云 App 的 7 路电视频道(天津卫视、新闻、文艺、影视、都市、体育、教育)统一归入「天津」,免登录、零配置、默认开启,可在源管理单独关闭。由独立实验台移植,只用纯 Node 实现,不需要安卓模拟器。取流按 App 的 WiseTV 协议:先取 RSA 公钥,把「包名|会话键|频道 ID」经 RSA 与 3DES 两层加密后请求签发接口,再把返回值两层解密得到直播地址;App 应用参数作为默认值内置,平台更换时可用
TIANJIN_WISE_AK/TIANJIN_WISE_SK/TIANJIN_WISE_3DES_KEY覆盖。这条签发接口不是 App 当前版本实际播放走的路径,平台可能下线,届时 7 路会整体不可用。实测每次签发在腾讯、网宿、百度三家 CDN 间轮换;网宿、百度的入口签发后 10 分钟即失效(腾讯 60 分钟仍可用),但入口换出来的媒体清单不随入口过期(每 3 秒轮询连续 40 分钟不断),所以播放中直接轮询媒体清单、不中途重签,免得换 CDN 造成分片序号与时间戳跳变。网宿的播放会话绑定取清单那一方的播放器标识(换 UA 或多带 Referer 取分片即 403),只中继清单会断,因此清单与分片都经本机全代理。实测 7 路均为 1280×720、H.264 High / AAC-LC、25 帧;经本机代理三家 CDN 各一路连续播放 25 分钟(两轮半签名有效期)不断流、不换 CDN。台标用津云 App 频道卡(带 1~6 序号,七路可区分),由本机托管。节目单取自津云官方接口,取今天与明天:当天是播出日志粒度,明天起是编排计划;编排系统切成三小时一段的同一节目、以及跨零点被切开的节目合回一条,「30’」「2’30”」这类时长批注去掉。央视频里也有天津卫视,两个来源按设计各自保留、互为备份 - 新增西藏官方直播:西藏广播电视台「珠峰云」App 直播页的西藏卫视、藏语卫视、影视文化 3 路统一归入「西藏」,免登录、零配置、默认开启。播放时从 App 与官网共用的频道接口取当前地址:只有清单带签名(签发一小时后实测仍有效),分片不带签名,CDN 也不看来源头和播放器标识,所以只中继清单,媒体分片由播放器直连官方 CDN,需要时可用
?relay=2全代理。频道表五分钟复用一次,清单万一被拒就立即重取再试。实测 3 路均为 1920×1080、H.264 Main / AAC-LC、25 帧,西藏卫视经本机中继连续拉流 40 分钟不断。台标用 App 频道卡片上的官方图标;官方没有节目单(接口只给每台「正在播出」一条),西藏卫视与央视频同名,开着央视频时共用其节目单。影视文化凌晨是测试卡,白天正常播出 - 新增青海官方直播(安多卫视):青海藏语网络广播电视台官网的安多卫视归入「青海」,免登录、零配置、默认开启。播放时向官网频道接口换取带签名的地址(标称两小时,实测过期后十几分钟仍可用),本机半小时换一次,接口故障时沿用上次的地址;清单里每个分片各自带签名,换签名不影响播放。CDN 不看来源头与播放器标识,走「只中继清单」,也可用
?relay=2全代理。实测 1920×1080、H.264 / AAC-LC、25 帧,跨签名更换连续拉流 40 分钟不断。台标用官方频道接口下发的图标。官网、接口与 CDN 只对大陆网络开放。官网节目单接口对任何日期都只回整点「精彩节目」占位,暂无节目单。青海卫视已由央视频模块收录;经济生活、都市目前没有找到官网的取流入口 - 宁夏三台改由独立模块提供,并接入官方节目单:宁夏卫视、宁夏公共、宁夏文旅原先写在精选列表
IPTV.m3u里,现在改由新的「宁夏」模块提供,归入「宁夏」,免登录、零配置、默认开启,可在源管理单独关闭。取流不变:仍是黄河云公开的固定官方入口,上游不校验来源也不挑播放器标识,播放器直连官方 CDN,本机不转发媒体。新增的是节目单:宁夏公共、宁夏文旅今天的节目取自黄河云官方接口(各约 22、29 档),官方只发当天的,零点后要等下一轮更新;宁夏卫视咪咕本来就有节目单,按「咪咕 → 模块」的顺序照旧用咪咕的,关掉咪咕时才改用黄河云。台标沿用内置库里已有的三张(官方接口给的频道图是带背景的宣传图,不用)。精选列表里的这三条同时删掉;精选列表由各实例直接从仓库拉取,还没升级镜像的部署在升级前暂时没有「宁夏」分组。由独立实验台移植,宁夏经济、宁夏少儿两路实验台核对过只循环测试卡,不收 - 新增嘉兴官方直播:嘉兴在线「看电视」页的嘉兴新闻综合、文化影视、公共频道 3 路归入「浙江」,免登录、零配置、默认开启,可在源管理单独关闭。三路都挂在趣看云直播上:播放时按频道向趣看的公开播放接口换取带签名的 HLS(签名算法与网页播放器一致),每次播放都取新签名、并当场检查实时清单,清单与分片都限定在该频道自己的官方域名和路径,不是本频道的一律拒绝。本机只中继清单,媒体分片由播放器直连上游 CDN,需要时可用
?relay=2全代理。官方频道卡在站点打包资源里、文件名带哈希不能写死,三张已按名收进内置台标库。由独立实验台移植,2026-09-25 在上海联通出口实测三路清单与分片均可直连 - 新增澳门莲花卫视官网直播,归入「澳门」分组:莲花卫视官网直播页的一路电视直播,免登录、零配置、默认开启。官网播放器里写的是带
auth_key的签名入口,会不定期更换:本机读官网拿当前入口并缓存五分钟,每次播放都检查实时清单,清单被拒就立即重读官网、不等缓存到期;官网页面里还留着一条注释掉的旧线路,解析时只认正在用的那一条。服务端只中继清单,带独立签名的媒体分片由播放器直连上游 CDN,也可用?relay=2全代理;签名不写进日志、频道目录和错误信息。台标用官网的,节目单取官网「節目單」页(一页一周、繁体照原样)。实验台在海外出口验证可播,作者在大陆网络实测也能正常播放 - 新增梅州官方直播(客家生活):梅州市广播电视台「客家生活」频道归入「广东」,免登录、零配置、默认开启。地址在梅州台自有域名下、固定且不带签名,播放器直连上游 CDN,本机一个字节的媒体都不转发;台方以后换地址只需改频道表。官方站点和 App 壳里都没有台标,内置台标库按名收了一张公开台标库的图兜底。由独立实验台移植,2026-09-25 在上海联通出口实测清单与分片均可直连
- 新增泉州官方直播(闽南语频道):泉州广播电视台官网的闽南语频道归入「福建」,免登录、零配置、默认开启。播放时向官网公开接口换取短期签名的 HLS,主入口触发官网的人机验证时自动改走备用入口,两个入口都被拦就明确报失败、不复用过期地址;上游 CDN 会拒绝部分播放器标识(curl、Lavf 一类),清单与分片由本机以浏览器标识全代理,并只放行闽南语频道自己的清单与 TS 路径。台标取官网首页的频道卡,节目单取官网播放页下方的节目表(只到今天)。由独立实验台移植,2026-09-25 在上海联通出口实测签名接口、清单与分片均可直连
- 节目单改为优先用各模块自己的官方节目单,第一个接入央视频:原默认 EPG 源 erw 的站长宣布 10 月 1 日起停掉免费下载(XML 只给赞助用户),本项目不再依赖它,改由各抓取模块直接从官方接口取自己频道的节目单。顺序为「咪咕自带 → 模块官方节目单 → 外部 EPG 源」,前面给了的频道后面不再覆盖(自己加的外部源可以勾选优先于官方,见「外部 EPG 源可以设为「优先于官方节目单」」一条)。央视频模块按频道表里的 livePid 取官网节目单(对象存储上按日一份的静态文件,无需登录与签名,与 CNTV 官方节目单逐条一致),每轮取今天与明天两天;实测为咪咕没覆盖的 31 个频道补上了节目单(山西卫视、天津卫视、CCTV16 奥林匹克、CCTV4K、CGTN 纪录等)。国学频道官方没有节目单文件,由河南模块的同名频道补上。节目单代码与取流代码分开,放在各模块的
epg.js,只用注入的 fetch、不依赖项目内部模块;配合零依赖的公共件与scripts/build-epg.mjs(只用模块节目单单独产出一份 XMLTV),以后可以整套拆出去独立维护。各省的接入见「河南、浙江、江苏、广西、海南、山西、上海七省接入官方节目单」「节目单第二轮:再接入 10 个省市与 4 个境外台的官方节目单」两条 - 河南、浙江、江苏、广西、海南、山西、上海七省接入官方节目单:七个省级模块各自从官网接口取自己频道的节目单,与央视频一样放在模块的
epg.js、不依赖项目内部模块。实测一轮完整更新共补上 51 个频道(河南 12、浙江 8、江苏 8、山西 8、上海 5、海南 5、广西 5,同名频道已由咪咕或央视频给过的不重复计),全部频道中有节目单的从移除 erw 后的 109 个(已含央视频补上的 31 个)增至 158 个。各家接口差别很大,按平台特性分别处理:河南、江苏、上海的请求要签名(沿用模块取流时已有的算法),江苏还要先换匿名令牌;河南未来日期返回的是冻结的周模板、浙江未来日期是逐小时的「精彩节目」占位,都按「当天没发」处理;浙江的节目单是播出日志,广告、宣传片、片头片尾等短碎片被剔除;山西官方数据里一天最后一档常被拉长到第二天早上、与次日节目重叠,按下一档开始时间截断;广西只给开始时间与时长。覆盖情况:河南 13 路、浙江 9 路、江苏 10 路、海南 7 路全部有节目单;广西 7 路中 6 路(广西移动官方不展示节目单);山西 16 路中省级 6 路与太原、晋中、临汾有,另外 7 个地市台官网的节目单文件本身就是空的;上海 8 路电视频道中 6 路有(魔都眼、新纪实官方没有),景观机位没有节目单。取的天数随平台而定:广西、山西能给到明天,其余多数只有当天——零点后到下一轮更新前这些频道暂无新一天的节目单。另外修正了一处:同名频道来自不同模块时(央视频与河南的「国学频道」其实是同一个台,央视频没有它的节目单文件),前一个取不到会轮到下一个 - 节目单第二轮:再接入 10 个省市与 4 个境外台的官方节目单:广东、深圳、河北、大连、南京、湖北、山东、福建(省级、厦门与福州综合 / 生活)、新疆、云南,以及凤凰三台、香港卫视、NHK World、YTN。连同第一轮,模块节目单在一轮完整更新里共补上 142 个频道,全部频道中有节目单的从 158 个增至 219 个(此后陕西、天津、北京、甘肃卫视、延边卫视、宁夏、澳门莲花卫视、泉州又陆续接上),已接近当初靠 erw 时的覆盖,且全部来自各台官方。几处值得一提:广东官网节目单要 WebAssembly 里的签名,实际是标准 HMAC-SHA256,key / secret 取自官网签名模块,不需要浏览器;山东用的是官网直播页真正在用的闪电新闻后端,九路都有;湖北取自长江云 TV(湖北广电 IPTV)遥控页的节目单接口;福州台官网只列自办栏目、中间空档很大,现在没有内置外部源,综合与生活两路照收,少儿一天只有一条不收;NHK World 与 YTN 按 UTC+9 换算,上海的一天对应当地凌晨一点到次日凌晨一点。确认暂时没有可用官方节目单的:湖南(芒果各接口只给 2010→2050 的占位)、内蒙古与吉林(节目单接口只维护广播,电视全空)、甘肃、贵州、重庆、广州、黑龙江、江西、安徽(官网与已知接口里都没有),辽宁北斗只有已播出的回看列表、没有预告;其中甘肃卫视、延边卫视后来改从央视网取到(见「北京、甘肃卫视、延边卫视接入央视网节目单」一条)。另外:直链频道(没有延迟解析 ref 的,如福州、南京)现在按「所属模块 + 频道名」精确对上模块节目单;顺手修了大连取流的一处 SM2 解密缺陷(点坐标前缀被剥两次,每 256 次令牌交换失败一次)
- 北京、甘肃卫视、延边卫视接入央视网节目单:北京时间官网、甘肃台、吉林台自己都没有电视节目单,央视网的节目单接口按代号收着这些台(北京 btv1…btv9、甘肃 gansu、延边 yanbian,都是逐个试出来的),不用登录、不带签名。北京 9 个电视频道里 7 个有了今明两天的节目单(体育休闲央视网连日为空、卡酷少儿没有代号),甘肃卫视、延边卫视各自补上;延边卫视是朝鲜语频道,节目名照官方原样。三个模块共用一个央视网提供者(
utils/cntvEpg.js),以后再发现央视网收了哪个台,给出「频道 → 代号」表就能接上 - 外部 EPG 源可以设为「优先于官方节目单」:节目单来源的顺序是咪咕自带 → 各模块官方节目单 → 用户在「设置 → EPG 聚合」自己加的外部源,每个频道只取一家,所以外部源原本只能补官方没有的频道。有的官方节目单只给当天、有的只列自办栏目,用户手里的源可能更全,现在每个外部源多了一个「优先于官方节目单」勾选项:勾上后,这个源当前还有没播完节目的频道改用它,咪咕与模块的官方节目单让出来;多个外部源之间,勾了的排在最前。只认「还有没播完的节目」,是为了源停更、只剩过期缓存时自动让回官方,不会拿旧节目单占着频道。默认不勾,现有配置不受影响。节目单的整套规则与各模块状态记在仓库的 EPG.md
- 移除内置默认 EPG 源 erw:erw 站长 10 月 1 日起关掉免费下载(XML 只给赞助用户),本项目不再内置任何外部 EPG 源,节目单默认由咪咕与各模块的官方接口提供。升级后,老部署里没改过的「默认EPG」(地址是 erw 或更早的 51zmt)会被自动删掉,连同它的缓存;改过名或改过地址的、自己加的源一律不动,后台会在停用地址那条上提示。之所以现在就删、不等它自己失效:外部源下载失败后程序会一直沿用最后一份缓存,配对时又不看日期,留着只会给一批频道挂上过期节目单,还会挡住用户自己加的源。此前只靠 erw 补节目单的一批频道(本地实测约 140 个,以各省地方台为主)已由本版各模块的官方节目单补回大半(见上面各条),官方确实没有节目单的少数地方台暂时空着;需要的可在「设置 → EPG 聚合」自己加 XMLTV 源
- 节目单里不再出现「10月1日e域名头关闭…」:原默认 EPG 源 erw 的站长在 2026-09 把每一条节目的简介都换成了同一句关站通知(「10月1日e域名头关闭,vip域名头不在支持xml下载请大家提前调整」),播放器里点开任何一个由它补的节目,看到的都是这句话。聚合外部节目单时现已把这类站务公告式的简介整条去掉,节目名与时间不动;只匹配这句通知的固定字眼,正常的节目简介不受影响。erw 本身已从内置默认源移除(见「移除内置默认 EPG 源 erw」一条),这里照顾的是自己手动加了 erw 的用户
- 台标改为本机托管:以前订阅里的台标写的是原始地址,播放器自己去各台图床或公共台标库取;台标库走的 gcore 在大陆 12 个探针里只有 5 个取得到,模块给的官方图也会失效(河南 13 张全是 404),而源自带台标的优先级高于台标库,坏图反倒挡住了库里的好图。现在每轮更新时由服务端把要用的台标下载到数据目录
logo-cache/,逐张按文件头确认是图片,订阅里写本机地址,播放器只找你自己的服务器。优先级为本地上传 > 源自带 > 内置台标 > 自己配的台标库,源自带的取不到或不是图片会自动换下一个;还没下载到的沿用原地址(和以前一样),全部确认坏掉才留空。已托管的每周重取一次、重取失败继续用旧图,坏掉的隔天再试,一个月没用到的自动清理;只代取公网地址:地址本身、域名解析结果(连接时再查一次)和每一跳跳转都会检查,落到局域网或本机的不代取、订阅里照原样写原地址(OpenClash 等 fake-ip 模式不受影响);单张超过 2 MB 的不要;第三方的 SVG 台标由本机提供时禁止执行脚本。实测首轮下载 583 张约 25 秒、占用约 50 MB,失效的官方图会自动换成内置台标。下载时不声明 WebP,按请求转码的图床(如内蒙古)给的是原图,老电视盒子也能显示;每次下发新签名地址的图床(内蒙古、吉林)按去掉签名的地址记账,不会每次刷新都重下一遍。可用menableLogoCache=false关掉 - 默认不再引入公共台标库:以前没有自带台标的频道会按名字到 taksssss/tv 台标库兜底,这是别人维护的个人仓库,和节目单弃用 erw 同一个道理,现在默认不配,用各频道自己的官方台标(由本机托管),官方没有或取不到的由仓库内置台标兜底(见「内置台标库」一条)。自助的口子不变:想用台标库,设
mexternalLogoBase即可(填 taksssss 的 gcore 地址时索引自动带上);缺台标的频道可以在「我的频道 → 缺台标」逐个上传,本地上传的永远最优先。台标的整套规则见仓库的 LOGO.md - 内置台标库:仓库新增
logo-pack/,是我们自己维护的一套台标(421 张,统一成长边不超过 256px 的 PNG,随镜像发布、服务端本机直接提供)。各模块和咪咕的官方台标都收了一份做备份,官方图床挂了、海外服务器连不上大陆图床时自动顶上;精选频道这类 m3u 本来没写台标的台(凤凰、翡翠台、台湾各台、海外新闻、体育与纪实频道等)也按名字补上了,官方有的用官方图,没有的才用正规平台或公开台标库的图,每张的出处都记在logo-pack/index.json。本地实测电视频道已全部有台标:官方没有频道图标的用所属电视台的台标(广东台经典剧、纪录片、健康,宁夏文旅),北京台除北京卫视外的 8 个频道里 6 路用北京时间官网的官方图标、纪实科教与体育休闲的官方图标还是改版前的旧台名,改用公开台标库里带现名的;只有景观机位、活动直播间按规则留空。别的项目也可以直接引用:https://gcore.jsdelivr.net/gh/akiralereal/iptv@main/logo-pack/<台标名>.png。维护方法见 LOGO.md - 各模块改用官方台标:央视频(官网电视页的频道图标,73 套里 72 套)、内蒙古、吉林、广东、河南、湖北、贵州、江西、黑龙江、海南、云南、福州、南京、湖南长沙两台、YTN / NHK 都换上了官方频道图标或频道卡,河南以前拼错图床导致 13 张全裂也一并修好。四川、重庆两个模块也补上了官方台标
- 修复自己配的频道被地方官方同名频道顶掉(少儿、体育、教育):各省官方模块的少儿、体育、教育频道会自动收进对应的内容分组,收的时候组里同名的其它条目会被官方线路顶替。本意是去掉咪咕和精选列表里的重复,但没有区分来源,用户自己加的订阅、本地粘贴、直连里同名的线路也被一并删掉,放在自己起名的分组里(如「IPTV组播」)同样会被删。常见的情况是用本地 IPTV 组播地址导入优漫卡通、金鹰卡通、卡酷少儿这类频道,导入后只剩官方没有的那几个。现在用户自己配的线路一律保留:在少儿、体育、教育组里紧跟在官方线路后面,支持多线路的播放器会显示成线路1(官方)/ 线路2(自己的);在其它分组里原地不动。咪咕和精选列表的重复照旧去掉。升级后以前被吞掉的线路会重新出现,不想要的可以在「我的频道」里单独隐藏
- 四川电视频道恢复:四川官网 9 月中旬换了播放域名和签名方式,模块把新地址当成非官方地址丢掉,关联了 Token 也只剩几个活动直播间。现在按官网播放器的新做法换签、逐跳加签,9 个电视频道恢复播放,并带上官方台标
- 广东纪录片能播了,广东台各频道播放时服务器更省力:荔枝网官网把广东纪录片的播放地址换到了另一个域名(
lbplay.grtn.cn,带auth_key签名、30 分钟有效),不再是其它 16 路用的触电t_token地址;本机取票只认后者,每次都等满 20 秒超时,这一路在任何播放器里都播不了,排在它后面的广东台换台也被拖慢。现在两种地址都认,其它域名照旧拒绝;纪录片的地址自带过期时刻,按它换票(离过期 5 分钟后台换,本机时钟最多信 30 分钟),不用像其它频道那样每 45 秒开一次官网页。另外,取票用的无头浏览器此前取到票后一直停在官网页面上播放、解码视频,看广东台期间服务器始终多占一份 CPU;现在取到票就暂停,页面保留、票照样有效。2026-09-25 本地实测:纪录片冷启动 3 秒出清单、两分钟轮询零失败,广东卫视跨过 45 秒换票与 90 秒硬边界零失败,浏览器 CPU 从持续两成多降到平时个位数、只在换票时短暂升高 - 新疆重新收录汉语综艺(XJTV-4)与维吾尔语影视(XJTV-5):这两路此前被丝路视听网标记禁播、CDN 回 404,所以没进频道表;复查发现禁播标记其实是按节目打的:电视剧时段多半标着、CDN 同时 404,其余节目清单与分片都能取,实测 1280×720,与新疆卫视一致,节目单也一并接上(每天约 16 条、逐日推进的真实编排)。标着的那档播放时会提示「当前这档节目官网不提供网络直播,换档后自动恢复」;汉语综艺白天的电视剧、维吾尔语影视白天到晚上的大部分时段都是这种情况,能看的时段有限。两台每天约 01:30–08:00 停播,这段画面是 XJTV 测试卡,属正常。新疆模块现为 7 路,频道表版本随之递增,老部署启动时会自动重建缓存。顺带把频道校验改成逐路:以前任何一路缺席或被标禁播都会让整个新疆模块所有频道一起失败,现在只跳过那一路,播放时说明原因
- 央视频:挡住播放器批量探测与失败重试打爆官方接口:一位网友共享实例的日志(44 个客户端、两天 1487 次「主、备用 CDN 均不可用…403」)显示,央视频公开频道时好时坏不是接口坏了,而是本机出口被官方 CDN 按 IP 限频:不少播放器的「刷新预览图 / 检测源可用性 / 失败自动换台」会在几十秒内把 63 个公开频道逐一 GET 一遍,每台一张票加一两次清单全从本机出口打官方;被限后播放器毫秒级连环重试,每次重试又是六到八个上游请求,把限流越拖越久。现在两层处理:同一频道换票后主备 CDN 仍全部 403,就冷却 30 秒不再向官方请求(依据是回放该日志:同频道相邻两次失败 54% 间隔不到 1 秒,30 秒能挡掉 65% 的上游请求,再长几乎不多挡,只会让恢复后的人白等);同一客户端 10 秒内连续请求 6 个以上不同的央视频频道,判为批量探测,后续请求本地拒绝、一枪不打官方,停止探测 5 秒后自动恢复,探测开始前正在看的频道不受影响;10 个会员频道也在同一本账里,扫描从公开频道扫进会员频道算同一次,被拒时回 429,不再替扫描器用会员账号开浏览器页启动解扰桥,已经在播的会员频道照常给。HEAD 探活此前已本地应答,这次补的是 GET 这一半。多人共用一个出口仍可能被限,那是平台按 IP 限频的结果:控制共享人数,卡的时候切「央视」组里咪咕的同名频道
- 「体育」组里海外台排到最后:各地官方体育频道(江苏、安徽、辽宁、广东、福建、河北、山东、天津、新疆、五星体育等)并入「体育」组时,以前追加在组尾,排到了精选列表的海外台后面;现在按「抓取模块 → 内置源 → 外部订阅」的既定优先级,插在外部订阅的频道之前。起播慢的 World Poker Tour、Red Bull TV、NHL FAST、UFC 24/7 因此落到「体育」组最后。「少儿」「教育」两组同样按这个顺序,默认没有外部订阅频道,不受影响
- 网页播放器不再依赖外部 CDN:后台预览和播放器页用的 hls.js、DPlayer 以前从 cdn.jsdelivr.net 现取(大陆探针实测只有五到七成取得到,取不到预览就整个不能用,hls.js 还没锁版本),现在随仓库发布、由你自己的服务器提供(hls.js 1.7.3、DPlayer 1.27.1),按页面的相对路径加载,挂在反向代理子路径下也能用
- 「台湾」分组精简:移除大爱电视、GOOD TV 两个模块,精选列表去掉华视高清:大爱一台 / 二台、GOODTV / GOODTV2 连同它们的官方节目单一起下线,源管理里不再有「大爱电视」「GOOD TV」这两张卡;精选列表
IPTV.m3u去掉华视高清。「台湾」分组现在是精选列表里的公视、民视、台视、TVBS亚洲与大立电视台。升级后老部署缓存里这两个模块的频道会被忽略,不用手动清理;精选列表由各实例直接从仓库拉取,华视高清在下一轮刷新精选频道后消失 - 精选列表移除 34 个境外频道:体育组的 FUEL TV、World of Freesports、FloRacing、SportsGrid、ACCDN、Pac-12 Insider、Tennis Channel International、MTRSPT1、Sky Racing 1、Sky Racing 2、Trace Sport Stars、beIN Sports Xtra、FIFA+,文旅组的 History Hit、InTravel、Terra Mater WILD、Court TV、Documentary+,国际组的 NEWS1、France 24 Español,香港组的港台电视31,韩国组的 Arirang,以及娱乐时尚组的 Wipeout Xtra、Graham Norton、Mystery TV、Rai Italia、Rai World Premium、Mediaset Italia、FashionTV Paris L'Original、Global Fashion Channel、Qello Concerts、Totalmusic Concerts、Estrella TV、MovieSphere(娱乐时尚组只留面包台),从
IPTV.m3u的实验台直连区块删除,区块从 50 个减到 16 个。精选列表由各实例直接从仓库拉取,不用升级镜像,下一轮刷新精选频道后生效 - 咪咕撤掉陕西四路:陕西官方模块已覆盖这几个台,咪咕原先并入「陕西」的银龄、都市青春、秦腔、新闻资讯四路不再输出,免得同一个台在「陕西」组里出现两次。实测游客模式下咪咕这几路是 854×480、码率与官网 720×404 相当,同一路信号,只多一个咪咕水印。咪咕「卫视」组的陕西卫视、中国农林卫视照旧保留(支持回看);「体育」组的陕西体育休闲频道本来就会被陕西模块那路自动替换,咪咕那条只在关掉陕西模块时才出现。给咪咕这几路设过的隐藏、移动、改名不会带到陕西模块的同名频道上,需要的话重新设一次
本次为「咪咕 4K 投屏档、播放列表与分组修复」版本:含电视端权益的咪咕账号改按「投屏专享」档取 4K(issue #117),并修复 menableHDR=false 对老用户不生效;修复首次部署或咪咕长期不可达时播放列表永远为空(issue #129)、分组改名后移进来的频道留在旧名下(issue #132);GOOD TV 两条官方线路自动择优切换并升到 1080p(issue #130);咪咕版权屏蔽时给出人话提示(issue #131)。升级镜像后重启即生效,现有配置与订阅无需改动;此前在 compose 里设过 menableHDR=false 的用户,升级后 HDR 会真正关掉。
- 咪咕 4K:含电视端权益的账号改要「投屏专享」档(issue #117):四屏账号按大屏策略请求 4K 已能通过,但咪咕回的「臻享 超高清」仍是手机端约 10 Mbps 的编码;它的大屏档位表里另有一档「超清4K (投屏专享)」(手机 App 投屏功能用的那条流),此前从未请求过,手机编码就成了天花板。现在大屏策略请求成功后,若档位表里列着投屏档就再按它要一次;返回的档位不符、只给试看或没给地址时一律沿用原来的 4K、不降级——咪咕拿不到所请求档位时不是拒绝而是以成功回应给一条低档流或几分钟试看,不能拿它顶掉完整 4K 再缓存 3 小时。日志会把咪咕给的两张档位表原样打出来(含 usageCode、是否需权益、本端可否切换),普通频道不打。三屏会员与游客的取流路径不变。这条路径没有四屏账号可实测,由报告者在下一场 4K 赛事上验证
- 修复
menableHDR=false对老用户不生效(issue #117):老「系统配置」页每次保存都会把enableHDR: true连同其它字段整份写回配置文件,v4.0 把画质参数搬进咪咕模块时它被当成「后台配过的值」搬了过去,而后台配过的值优先于环境变量,HDR 这一项在后台又是隐藏的——于是 compose 里的menableHDR=false被顶死,界面上也没有任何地方能改回来。现在隐藏配置项以环境变量为准(两个方向都是:compose 示例里的menableHDR=true同样压过文件里的 false);可见配置项仍是后台保存值优先,不受影响 - 修复首次部署或咪咕长期不可达时播放列表永远为空(issue #129):「关键源本轮一个频道都没拿到就保留旧播放列表、不覆盖」的守卫在根本没有旧列表时也拦下了写入。全新部署时内置源和抓取模块已拿到 300+ 频道却一个都不写,「我的频道」是空的、
/interface.m3u返回「获取失败」,每轮刷新重复同样结果,永远不会自愈;海外等咪咕永久不可达的部署,旧列表本来就没有咪咕频道,却被整份冻结,之后加订阅、改频道配置都不再生效,短效地址也会过期。现在守卫按每条 EXTINF 自带的 source-ids 检查旧列表里有没有该源的频道:没有(或没有旧列表)就照常写入,该源恢复后下一轮自然补回;老到没有 source-ids 标记的列表按原样保留。实测咪咕不可达时,全新数据目录写出 332 个频道 / 31 个分组并在日志里指明缺的是哪个源,含咪咕频道的旧列表则原样不动 - 修复分组改名后「移进来的频道」留在旧名下(issue #132):单个频道的移动记录存的是目标分组显示名,且优先级高于分组改名;旧版改名不改写这些记录,于是移进来的频道留在旧名下撑起一个既不是源分组也不是自定义分组的残留分组,界面却提示「已重命名」。再给残留分组改名会写出一条永远匹配不上的改名键,静默无效,重启也没用。现在改名时同步改写移动目标(只改写不删除,否则被清空的源分组会重新显示、服务端的重名校验也会拒绝改名),识别残留分组并清掉它的无效改名键;一次改名涉及多张表,保存失败时整份配置回滚。已按报告者的配置回放验证。回归测试直接从后台页面抽出改名函数与服务端的配置应用串起来跑,测的是线上真正执行的代码
- GOOD TV:两条官方线路自动择优切换,并升到 1080p(issue #130):站点播放器给大陆观众两条线路(CloudFront 与 Akamai),此前钉死在前一条。两条线路同源、路径与分片编号完全一致,切换无需对齐。现在每次取清单时按清单延迟择优,60 秒内沿用;当前线路清单取不到就立刻换另一条,不依赖代理层回传失败;全部挂掉时 2 秒退避,吸收播放器的重试风暴。清晰度由 1280×720、2 Mbps 升到 1920×1080、4 Mbps(H.264 Main L4.0,按直播分片实读);该档没列在主清单里、可能被撤,撤了自动回落 720p、下次到期再试。清单只有是 HLS、带分片且每个分片都落在官方
/hls-live/目录时才算有效。第三条 streamingfast 线路在大陆 DNS 被污染(Globalping 10/10 探针超时),不纳入 - 咪咕版权屏蔽时说人话(issue #131):咪咕按当前节目屏蔽频道——亚运会期间 CCTV5 / CCTV5+ 播到相关赛事(直播、录像都算)就整条屏蔽,节目结束自动恢复,游客与会员一样。原来只透传「节目播出调整,换个内容看看吧!」,看着像是账号、画质或频道 ID 出了问题,报告者把登录态、画质、H.265 / HDR 排查了一遍才来问。现在对该错误码补一句说明:这是咪咕版权屏蔽,通常节目结束后自动恢复,可先切到其他源的同名频道。其余错误文案、返回码一字不改
本次为「新增香港、台湾与黑龙江、云南共 19 路直播」版本:黑龙江 7 路、云南 7 路各自成组,香港卫视并入「香港」与凤凰三台并列,大爱一台 / 二台与 GOODTV / GOODTV2 并入「台湾」;五家全部免登录、零配置、默认开启,可在源管理逐家关闭。取流方式正好各不相同——黑龙江地址固定且既不校验来源头也不挑播放器标识,频道直接写直链、本机一个字节的媒体都不转发;云南省级要按「当前这档节目」逐次换取带路径签名的 DVR 窗口,既不能预取也不能写死;香港卫视先问源站当前在播的是哪一路再换入口,并把两跳清单拍平成媒体清单;大爱按来源头防盗链、GOOD TV 卡的是播放器标识,两家的清单与分片统一由本机全代理并补齐所需请求头。升级镜像后重启即生效,现有配置与订阅无需改动。
- 新增黑龙江、云南两省官方直播:黑龙江 7 路归入「黑龙江」,云南 7 路归入「云南」,均免登录、零配置、默认开启,可在源管理单独关闭。两者取流方式正好是两个极端。黑龙江是本项目里少见的「什么都不需要」的源:极光新闻 App 在用的官方入口地址固定、不带签名,清单和分片既不校验来源头也不挑播放器标识(ffmpeg、okhttp 都是 200),所以频道直接写直链、由播放器直连官方 CDN,本机一个字节的媒体都不转发;要留意的只有端口,官方业务域名走的是 4430 而不是 443。云南则要同时接两条链路:省级四路走云视网,官网接口返回的不是一条固定直播地址,而是「当前这档节目」的 DVR 窗口加一对按路径签发的签名——拿本轮签名去请求下一档节目的路径直接 403,既不能预取也不能写死,只能每次播放请求前重新换取;节目换档后下一次解析自然拿到新窗口,实测跨档时分片序号从 141184+604 接到 141794、单调递增不回退,播放器按普通直播清单推进即可(官网播放器自己反倒不换台,它的换档代码是注释掉的,一档放完就停)。地方三路走七彩云端目录,按房间名取当前在线机位;目录里另外 14 个地方台名字当前全部复用同一条 HLS,因此不作为独立频道收录。两家回源要求也不同:省级 CDN 缺了官网来源头不是回 403 而是把连接晾着(实测五次全部连接超时),地方那条裸请求就能取,所以请求头按目标主机分别下发,不把一家的凭据漏给另一家。实测黑龙江 7 路与云南省级 4 路均为 1280×720、H.264 / AAC-LC(黑龙江 25 帧、云南省级 25 帧),云南地方三路分别是 720p25、1080p50 和 720×416。台标方面公共台标库已收黑龙江 7 路与云南省级 4 路,按台名自动匹配;地方三路库里没有,改用七彩云端下发的官方频道卡
- 新增大爱电视与 GOOD TV 官网直播,归入「台湾」分组:大爱一台、大爱二台与 GOODTV、GOODTV2 共四路台湾公开电视直播纳入「台湾」分组,与精选列表里的公视 / 民视 / 华视 / 台视等并列,免登录、零配置、默认开启,各自可在源管理单独关闭。四条地址都是官网写死的固定 HLS、不带签名,所以模块不做任何额外请求,播放时直接给地址;真正的门在回源那一侧,两家各不相同:大爱按 Referer 防盗链,清单和 .ts 分片缺了请求头都是 403;GOOD TV 不看 Referer,卡的是 CloudFront 的播放器标识白名单,浏览器 / VLC / ExoPlayer 能过,ffmpeg 的 Lavf 和 okhttp 一律 403。播放器发什么请求头不由本项目决定,因此两家的清单与媒体分片都由本机全代理回源并补齐所需请求头,回源地址另有白名单,只允许落在各自官方的直播目录内。实测四路均为 1280×720、H.264 / AAC-LC 立体声(大爱 30 帧、约 3 Mbps,GOOD TV 29.97 帧)。台标由公共台标库按台名自动匹配。节目单本轮没有:默认 EPG 源里一条台湾频道都没有,精选列表里原有的公视 / 民视等同样如此;大爱官网自己有逐日节目表接口,但抓取模块的 EPG 槽位目前还没有接进节目单流水线,故未一并接入
- 新增香港卫视官网直播,归入「香港」分组:香港卫视一路电视直播纳入「香港」分组,与凤凰三台并列,免登录、零配置、默认开启。官网入口不是固定地址——先问官网当前在播的是哪一路,再向播放器接口换这一路的 HLS;入口在本机短期缓存,官网换台导致旧地址失效时立即重取,接口短时故障则沿用最近一次成功入口并退避重试。官网给的入口是一层 master,真正的分片列表在它下面带
hls_ctx的子清单里,服务端取回时就拍平成媒体清单再下发,播放器少一跳、也不必理解跨主机的绝对地址;服务端只中继这份小清单,媒体分片由播放器直连上游 CDN,需要时也可用?relay=2全代理。实测为 1280×720、H.264 High / AAC、约 3 Mbps,节目单由默认 EPG 源直接覆盖、无需额外配置。上游 CDN 会按 IP 拒绝一部分来源(实测机房 IP 与个别移动线路回 403,电信家宽与境外正常),服务端中继取不到清单时按既有逻辑回退 302,由播放器自己直连 - 文档:README 正文(频道覆盖、内容来源、数据流向图、常见问题、配置与进阶)收敛了「官方直播 / 官方 CDN / 官网接口」一类措辞——回源那一侧统一称「源站 / 上游 CDN」,用户实际访问或登录的一侧称「站点 / 网页端」。仅措辞调整,功能、配置与订阅地址均未变动
本次为「隐藏不再失效、按名字屏蔽与台标 / 节目单修复」版本:隐藏、重命名、归类、排序四项个性化设置不再因为源换签名地址而静默作废;新增按名字长期屏蔽的规则和一次隐藏整批同前缀分组的入口(issue #123);台标改为按库索引取图、0 裂图,默认台标库与默认 EPG 源双双换新,地方台多补 129 个频道的节目单(issue #124);修复自定义分组撞名后所有分组操作被锁死。升级镜像后重启即生效,现有配置与订阅无需改动,老配置里的默认 EPG 源会自动换成新地址。
- 修复隐藏 / 重命名 / 归类 / 排序在源刷新后静默失效(issue #123):这四项设置都按「原始分组::频道 ID」存,而频道 ID 是按播放地址算的。纬来体育这类每次抓取都换一条带
?expire=&sign=签名地址的源,每个刷新周期 ID 都变一次,隐藏掉的频道自己冒回分组、改过的名字复原、挪过的位置弹回,且界面上看不到任何线索——「已隐藏」列表是按当前频道反查的,失配的那条直接就不显示。现在算 ID 前先剥掉时效 / 签名类参数(只剥确定与频道身份无关的那几个,qn等可能区分清晰度的一律保留,避免两条频道撞成一条),源换签名不再影响频道身份。全量 1078 条频道里只有 16 条的 ID 会因此变一次,且均无历史配置受影响 - 新增「屏蔽规则」:按名字长期屏蔽频道,源换址、频道每天重建都照样生效(issue #123):频道旁多了一个「屏蔽」按钮,一键把这个频道名永久屏蔽——同名的跨源实例(CCTV5+ 在体育 / 央视 / 央视频三处各一条)一次全盖住;右上角「🚫 屏蔽规则」可手动添加「整名相同」或「名字包含」规则。规则只影响当前配置档,删掉即恢复;面板里每条规则直接列出当前命中的频道,输入框边打字边报命中数,避免「名字包含」一刀切多了。空规则一律丢弃,手改配置文件把它写成字符串也不会拆成单字规则屏蔽一大片。不做白名单模式:与配置档「共享全集、各档只做减法」的定位相反,且会让新装的源一条频道都不出现
- 隐藏分组时主动提议把同前缀的一整批一起隐藏(issue #123 / #2):「体育-昨天 / 今天 / 明天」这类分组每天重建,逐条隐藏明天照样冒出来。分组隐藏通配(
体育-*)早已支持,但一直只有手改配置文件才用得上。现在对其中一个分组点「隐藏分组」时,界面会认出同前缀的兄弟分组并三选一:只隐藏这一个、或连同一起隐藏并存成规则,以后新出现的同前缀分组自动挡掉。前缀取到分隔符为止,体育-*永远不会误伤「体育」或「体育频道」。被规则隐藏的分组在「已隐藏」里标出来源;恢复时可选解除整条规则或只恢复这一个。顺带修了三处与通配相关的既有问题:「已隐藏」列表在六处各算一遍且算法不一,配置里有通配符时「恢复整组」「全选」会操作到别的分组;对通配隐藏的分组点「恢复」无效却仍提示已恢复;「已隐藏」区的「全选」实际选不中任何频道 - 修复台标裂图:改为按台标库索引取图,默认库换为 taksssss(issue #124):此前没有自带台标的频道按名字盲拼一个公共库地址写进订阅,库里没有这张图时播放器拿到 404、屏幕上就是裂图——实测 253 条兜底里 138 条 404。现在程序下载库自带的「频道名 → 图片」索引(7 天刷新一次、失败沿用缓存),只写库里真实存在的文件名,没有的留空交给播放器画占位图;命名对不上的也按保守规则救回(CCTV怀旧剧场 → 怀旧剧场、内蒙古组的「新闻综合」→ 内蒙古新闻综合等),会撞成同一个的宁可留空不贴错。默认库从 fanmingming(929 张)换成 taksssss(3266 张),对本项目实际输出的频道是前者的严格超集,仍走 jsDelivr gcore 镜像、大陆直连可达。结果 174 个频道有真台标、0 裂图。新增「🖼 缺台标」清单列出当前档没图的频道,点进去直接上传;也可把
<频道名>.png放进数据目录logos/ - 默认 EPG 源换为 e.erw.cc,地方台多补 129 个频道的节目单(issue #124):原默认源
epg.51zmt.top已退化到对三个文件返回同一份内容,只剩 101 个央视卫视频道(咪咕本来就有)、2 天节目,地方台一个都补不到。新源 521 个频道、9 天节目、大陆多地探针直连可达;河南、广东、湖南、吉林、江苏、广西、江西、上海和各省少儿频道是主要收益。老配置里一字未改的默认源会自动换成新地址;自己改过名字或地址的那条不会被动,但「设置 → EPG 节目单源」里会明确提示它已失效并给出新地址。EPG 缓存改为 gzip 落盘(17MB → 1.3MB),老的明文缓存照常可读 - 修复自定义分组撞名后,之后新增 / 改名 / 删除任何分组都被拒绝:在某个源分组暂时不可见时(源抓取失败、或整组被隐藏)建了同名自定义分组,源分组回来后两者撞名;保存端点每次都重校验整份配置,从此所有分组操作一律报「分组已存在」,且指着那个用户根本没碰的旧分组。现在只拦「本次改动新引入」的冲突,旧冲突放行、由播放列表生成时合并同名分组,界面上用 ⚠ 标出合并了几条源频道以及怎么拆开
- 「重置」增加「屏蔽规则」一项:原「隐藏的分组和频道」一项承诺「显示所有被隐藏的频道」却不清屏蔽规则;现在屏蔽规则单独一项,原项文案改为它实际做的「逐条隐藏的」
- 许可说明更正:README 此前写「仅供个人学习、不得商用」,与 GPL-3.0 第 10 条「不得附加限制」相抵触。现明确:代码按 GPL-3.0 授权、许可证之外不附加任何使用限制;「不得售卖订阅 / 公开转播」等限制针对的是未获授权的第三方内容,来自权利人与所在地法律,不来自本软件许可。补充第三方组件许可清单
本次为「B 站直播改为播放时解析、北京电视台修复与网络第三方源自助订阅」版本:B 站直播不再把 60 分钟就过期的签名直链写进播放列表,改为与虎牙、斗鱼相同的播放时解析,播放器多久重拉列表都不再每小时全部失效(issue #120);北京广播电视台 9 个电视频道导入 Cookie 后仍播不了的问题查明是电视台 CDN 只认完整频道页 Referer,已补齐;清单直出 / 全代理取回失败时日志写明上游到底回了什么,不再只有一行「回退 302」;v4.7.0 清出精选列表的 77 条网络第三方转发源整理成仓库 from-the-web/from-the-web.m3u 供自助订阅,不进内置默认,「公告」分组新增对应的添加教程短片(issue #121)。升级镜像后重启即生效,已导入的北京 Cookie 无需重做,现有订阅无需重新添加。
- 被清出精选列表的网络第三方源改放仓库
from-the-web/供自助订阅,并新增「来源于网络」频道添加教程短片(issue #121):v4.7.0 从IPTV.m3u移出的台湾 4gtv 系、港澳、新加坡 / 马来西亚和影视共 77 条第三方转发源,现整理成与精选列表同级的from-the-web/from-the-web.m3u(按台湾 / 香港 / 澳门 / 新加坡 / 马来西亚 / 影视分组,海外逐条复核可拉取清单与媒体分片,MOMO 亲子台已失效未收录),不进内置默认,需要的用户在「源管理 → + 添加自定义源 → 订阅模式 → 在线 URL」粘贴直链即可全部加回;以后从网络收集到的其它链接也会备份到这个文件里,订阅定时刷新后自动出现。转发站域名在大陆电信 / 联通 / 移动家宽与腾讯 / 阿里机房共 9 个探针上均被 DNS 污染,只有海外或全局代理环境才能播,这份清单不维护、失效不作为 bug 受理。「公告」分组新增第三条 25 秒短片,五页演示这份列表是什么、复制直链、后台添加、之后自动跟随更新,和其它系统短片一样可逐条隐藏、不可删除 / 移动 / 排序 / 重命名;短片由assets/from-the-web-guide-source.html经npm run generate:from-the-web-guide生成 - 修复北京广播电视台 9 个电视频道导入 Cookie 后仍全部播不了:取流接口其实已经成功签出电视台的短效地址,是本机代理去拉清单时被电视台专用 CDN 回 403。用真实登录态实测,这台 CDN 校验的是 Referer 的完整频道页路径(
https://www.btime.com/btv/btvsy_index),只带根路径https://www.btime.com/一律拒绝且空正文,与地区、IP、登录 Cookie、User-Agent 都无关;独立验证台当时能播正是因为服务端代理写的是完整页面路径,移植进来时收成了根路径。现已按频道页路径补齐,公开活动 / 慢直播按/live页给,Cookie 仍只发给官方取流接口、不发给媒体 CDN。升级后重启即生效,已导入的 Cookie 无需重做 - 清单直出 / 全代理取回失败时,日志写明上游到底回了什么:此前服务端替播放器拉清单被拒时只有一行「清单直出取回失败,回退 302」,CDN 回的是 403、404 还是一页 HTML 完全看不出,北京电视台这次就是对着日志猜不出原因。现在这一行末尾会带上上游主机与路径、HTTP 状态、内容类型和正文头部(查询串里的签名 / 令牌不落日志,正文里回显的令牌也会抹掉),超时与网络异常也各有一句
- 修复 B 站直播每隔一小时全部失效、必须手动刷新才恢复(issue #120):此前模块把 B 站的签名直链直接写进播放列表,按「约 2 小时过期」设计了 45~90 分钟的刷新周期;用真实直播间实测,签名只有 60 分钟有效——刷新间隔一旦调到 60 分钟以上就每轮必灭,就算准时刷新,播放器不重拉播放列表也永远拿不到新地址(多数电视端播放器几小时甚至一天才重拉一次),正在播的流还会在签名到期那一刻被 403 掐断。现改为与虎牙、斗鱼相同的播放时解析:播放列表里写的是本机稳定地址,播放请求到达时才向 B 站换取签名地址(60 秒内复用;失败短暂记忆,免得播放器的连环重试触发风控),本机只中继清单并补齐防盗链请求头,视频分片仍由播放器直连官方 CDN。播放器多久重拉列表都不再影响,不认
#EXTVLCOPT的播放器(LunaTV 等)和 TXT / TVBox 订阅也能直接播 B 站。刷新间隔现在只决定多久重挑一次直播间,允许范围放宽为 15~120 分钟(默认仍 45);「优先 HLS」「播放缓冲」两个直链时代的选项随之下线(统一 HLS)。升级后重启即生效,旧缓存里的直链会在启动抓取时被替换,订阅地址无需更换
本次为「央视频会员频道在 Docker / NAS 上真正可用」版本:登录态导入改为复制浏览器请求头里的整段 Cookie——用真实账号实测,央视频的会话 cookie 是 HttpOnly,v4.11.0 的书签工具拿不到、官网必拒;会员桥接不再因为镜像里 Chromium 被压到 96KB 的 JS 栈而在「启动官网解扰兼容桥」后立刻溢出,登录态有效就能播;导入失败时日志和报错会写明官网拒绝的具体原因;「公告」分组里的登录教程短片同步改版为开发者工具复制 Cookie 的六步演示。升级镜像即可生效,已导入的登录态保存在数据卷里无需重做,现有订阅无需重新添加。
- 修复央视频会员频道在 Docker / NAS 上一播就报「Maximum call stack size exceeded」:会员桥接把官网播放器解扰后的 fMP4 块转成 base64 时,用
String.fromCharCode(...bytes.subarray(i, i + 32768))一次把 32768 个字节当参数压栈;Mac 上默认 1MB 栈没事,官方镜像里 Alpine Chromium 为了兜住纬来体育那类混淆站崩渲染进程,JS 栈被压到 96KB,这一句直接溢出,登录态明明有效也播不了。改为 FileReader 原生编码,不占调用栈;本机用同样的--stack-size=96参数复现并验证通过,解码字节一致 - 修复央视频登录态导入在 NAS 上必定失败:书签工具改为复制请求头 Cookie:v4.11.0 的「获取央视频登录态」书签只读 document.cookie,而用真实账号实测央视频的会话 cookie(vusession、accesstoken、refreshtoken 等)全是 HttpOnly,网页脚本根本拿不到;只种入书签能看到的那半套,官网用户信息接口不认、续期接口回「inner token失效」并让 SDK 清空令牌,所以导入一定报「官网没有认出这份登录态」。现改为和北京模块同样的做法:在自己电脑浏览器的开发者工具 Network 里点开任一
yangshipin.cn请求,复制 Request Headers 中Cookie的完整值粘贴导入(请求头包含 HttpOnly 那层);种入完整 Cookie 后官网当场认出账号与 VIP,已实测。书签工具已从卡片移除;粘错来源(只有 ysp_* 令牌)时解析阶段就会说明缺的是 HttpOnly 会话 cookie,不再白起一次浏览器。导入失败时服务端日志会记下种入了哪些 cookie、官网账号接口的每次回包(路径、状态、返回码)和校验后剩余的 cookie,报错文案按原因区分(续期被拒 / 用户信息接口不认 / 缺会话 cookie)。「央视频会员频道登录教程」短片同步改版为开发者工具复制 Cookie 的六步演示
本次为「央视频登录态导入与安徽广电」版本:央视频会员频道新增「获取央视频登录态」书签工具,在自己电脑的浏览器登录官网后点一下、把内容粘贴到后台导入即可,Docker / NAS 等没有桌面的部署也能登录了;关联账号后服务端每 6 小时静默续期一次,家里几天没人看会员频道也不会掉线;「公告」分组新增一条 30 秒的登录教程短片,电视上就能照着操作,不需要可以隐藏;新增安徽广电 7 路官网直播,免登录、零配置、默认开启。升级镜像即可生效,现有订阅无需重新添加。
- 央视频会员频道支持从自己电脑的浏览器导入登录态,Docker / NAS 也能登录了:此前会员频道只能在运行服务的电脑上弹出官方登录窗,没有桌面的 Docker / NAS 部署无路可走。现在「源管理 → 央视频」提供「获取央视频登录态」书签工具:在自己电脑的浏览器登录官网后点一下,把复制出的内容粘到卡片里导入即可。服务端把这组 cookie 种进央视频专用的浏览器 profile,当场让官网 SDK 校验并显示昵称与 VIP 状态;cookie 不进配置文件与备份。远程后台也能操作,本机弹窗登录照旧可用
- 央视频登录态自动保活,几天不看也不掉线:官网 SDK 的刷新令牌 48 小时有效,且只在浏览器页面开着时才续期;而后台 Chromium 会员频道停播 45 秒后就会关掉,家里两天没人看会员频道,登录就没了(弹窗登录和导入登录都受影响)。现在只要关联过账号,服务端每 6 小时静默拉起一次后台会话让 SDK 续期再关掉,启动后约 90 秒也会先续一次;没关联过账号的部署不会为此启动浏览器
- 新增「央视频会员频道登录教程」系统短片:书签导入那套操作光看文字不容易懂,现在「公告」分组里多了一条 30 秒的教程短片,六页演示拖书签、登录官网、点书签、粘贴导入的全过程,电视上就能看。和公告一样可以在「我的频道」逐条隐藏,不支持删除、移动、排序或重命名;短片由
assets/ysp-login-guide-source.html经npm run generate:ysp-guide生成,生成脚本已支持多目标 - 新增安徽广电 7 路官网直播:安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道全部纳入独立「安徽」分组,免登录、零配置、默认开启。服务端按「安徽视讯」App 的公开算法解出直播鉴权密钥、逐路生成两小时有效的腾讯云签名,并让播放器每次轮询都重新拉取滚动清单(官方清单只含 3 个 2 秒分片,复用旧清单几秒就会卡住)。该 CDN 按播放器标识放行:App 自己的 ijkplayer 能过,VLC / Apple / ExoPlayer 等常见播放器标识一律 403,因此清单与分片统一由本机以 App 标识全代理,播放器不直连 CDN;为此代理层允许模块用函数形态请求头指定 User-Agent,其余模块行为不变。官网旧接口的 8 路地址实为「网站直播已下线」占位画面,未收录;9 路安徽广播不进电视列表
- 文档:README「产品预览」三张截图换成当前版本的后台主面板、源管理与实况播放效果
本次为「央视频会员频道、后台改版与地方台大扩充」版本:央视频在 63 个公开频道之外接入 10 个本人账号可看的会员频道,在本机登录一次官网即可长期复用,会员流自动解扰成普通播放器能播的 H.264;管理后台整体换成浅色、扁平、更舒展的新视觉,功能与操作路径不变;新增北京、重庆、四川、江西、贵州、甘肃、新疆、吉林、内蒙古九地官方广电与 iPanda 共 110 余路直播,福建省级线路改为播放时自动续签,精选列表补入宁夏三台;默认分组顺序改为央视频置顶、地方台沉底,咪咕去掉不可播与重复的分组;系统公告短片重制为 1080p,并可在后台按需隐藏;另修复换台标不生效、央视频误显回看入口、全代理长播断流和凤凰台标裂图。升级镜像即可生效,现有订阅无需重新添加。
- 央视频新增 10 个本人账号可访问的会员频道,并把本机登录与“有声无画”兼容桥接完整接入主项目:原有 63 个公开频道保持匿名动态取流;会员频道从「源管理 → 央视频」在服务所在电脑的
localhost后台打开央视频官方登录窗,登录态只保存在本地 Chromium profile,服务会自动复用会话、刷新短效签名,并把官网播放器解扰后的音视频重组为普通 IPTV 客户端可播的 H.264/AAC HLS。旧版 63 台磁盘缓存会在首次启动时按频道表版本自动重建,无需等 24 小时或手工刷新。Docker/NAS 无法远程弹出首次登录窗,远端管理页会明确禁用相关按钮;会员到期、官网退出或要求重新验证时仍需重新登录/续费 - 管理后台整体改版:换成浅色、冷调、扁平、更舒展的新视觉——顶栏把品牌、主导航和运维操作各自分组;按钮只有主操作用实心、其余白底描边,不再有立体渐变;「我的频道」保留高频操作的效率但拉开了栏间与行间;内容源卡片本身保持中性,颜色只用来表示类型和状态;设置页每个字段各自成卡,层级更清楚、更好扫读;弹窗和页内播放器是全站唯一保留明显阴影的层级;关于页改成与其它页一致的信息卡。功能与操作路径都没变,老用户不用重新适应
- 新增北京广播电视台:北京卫视、BRTV 文艺 / 纪实科教 / 影视 / 财经 / 体育休闲 / i生活 / 新闻、卡酷少儿 9 个电视频道,以及北京时间当前公开的活动或慢直播。公开直播免登录并自动排除失效项目;9 个电视频道需在「源管理 → 北京广播电视台」导入本人北京时间 Cookie(也可用
mBtimeCookie环境变量),模块先验证再启用,失效时只隐藏电视台并给出提示、免登录直播照常。凭据只发给官方取流接口,不写进订阅、不发送到媒体 CDN;清单和分片由本机补齐防盗链请求头并代理,macOS 本地会自动沿用系统 HTTPS 代理,Docker / Linux 可按需设置标准HTTPS_PROXY - 新增重庆广电:官网当前公开的 CQTV新闻,免登录、零配置、默认开启;频道表自动同步,播放时匿名换取短效 HLS,清单、AES 密钥和媒体分片由本机全代理
- 新增四川广电:四川卫视、新闻、经济、文化旅游、影视文艺、妇女儿童、四川乡村、康巴卫视、四川卫视 4K 超高清 SDR 共 9 个电视台,以及官网当前公开的活动直播(有则显示、无则隐藏、免登录)。9 个电视台需要部署者本人的四川官网登录态,后台提供书签工具一键读取官网 Token;播放时动态换取短效地址,清单、密钥和媒体分片补齐官网防盗链请求头并全代理
- 新增江西广电 8 路官网直播:江西卫视、都市、经济生活、公共农业、少儿、新闻、移动电视、陶瓷全部纳入独立「江西」分组,免登录、零配置、默认开启。服务端按官网公开算法自动换取匿名短效 token,并让播放器每次轮询都重新拉取滚动清单,避免复用仅含三个 3 秒分片的旧清单而在约 9 秒后卡住;清单、密钥和媒体分片统一补齐防盗链请求头并全代理。官网当前八路均为单档 720p,无登录解锁更高清的 Web 机制
- 新增贵州广电 8 路官网直播:贵州卫视、公共、影视文艺、大众生活、生态乡村、科教健康、经济、移动电视全部纳入独立「贵州」分组,免登录、零配置、默认开启;家有购物明确排除。播放时从官网公开 API 刷新短效签名地址,播放器每次轮询重新拉取只有三个 3 秒分片的实时清单,避免缓存快照导致约 9 秒后卡住;清单、密钥和媒体分片均经官方域名与频道路径校验后由本机全代理
- 新增甘肃广电 6 路官网直播:甘肃卫视、文化影视、移动电视、少儿、科教、公共应急全部纳入独立「甘肃」分组,免登录、零配置、默认开启。六路共用官网频道表缓存,但播放器每次轮询都会重新获取滚动 HLS 清单;入口失效会立即重读频道表,接口短时故障则使用最近一次成功地址并退避重试。服务端只中继小型清单,媒体分片由播放器直连官方 CDN,避免长期播放占满服务器带宽。官网当前少儿频道为 540p,其余五路为 720p,均为 H.264/AAC、25 帧
- 新增新疆广电 5 路官网直播:新疆卫视、维吾尔语新闻综合、哈萨克语新闻综合、体育健康、少儿全部纳入独立「新疆」分组,免登录、零配置、默认开启。播放时发现丝路视听网当前 Nuxt 构建并静态解析当天公开签名材料,不执行下载脚本;结合官网时间接口生成 MD5/RSA 请求签名,再从公开频道接口换取约一小时有效的 HLS。入口缓存会在失效时自动重签,滚动清单每次播放请求重新获取并校验官方域名、频道目录和鉴权参数;默认仅中继清单以节省服务器带宽,也支持
?relay=2全代理。官网当前将 XJTV-4、XJTV-5 标记为禁播且对应 CDN 实测 404,因此不纳入频道表 - 新增吉林广电 28 路官网直播:6 路省级频道和 9 路地方台归入「吉林」,13 路慢直播归入「吉林风景」,免登录、零配置、默认开启。省级频道与 9 路季节性景观在播放时从官网加密接口解析约四小时有效的 HLS,9 路地方台与 4 路固定景观使用已验证的官方 HTTPS 入口;所有清单、密钥和媒体分片都经过官方域名白名单校验并由本机全代理
- 新增内蒙古广电 20 路官网直播:内蒙古卫视、内蒙古蒙古语卫视等 8 路自治区频道及呼和浩特、包头等 12 路盟市频道,全部纳入唯一的「内蒙古」分组,免登录、零配置、默认开启。播放时复现奔腾融媒官网公开的 XXTEA 加密频道协议获取当前 HLS;频道 ID、官方主机和媒体路径均严格校验,清单、密钥和媒体分片补齐 Referer 后由本机全代理。官网接口短时不可用时,仅内蒙古卫视和内蒙古蒙古语文化频道使用已验证的官方备用入口
- 接入 iPanda 22 路官网公开直播:成都、都江堰 2 个 24 小时总频道与 18 个固定熊猫机位,加上江苏大丰麋鹿、云南白马雪山 2 路珍稀动物直播,统一归入独立「iPanda」分组并在源管理中提供一个零配置开关。固定机位走支持 CORS 的官方 CDN 直连,4 路动态频道播放时读取央视公开接口、实测最高档子清单并在官方 CDN 间自动回退,清单、密钥和媒体统一由本机安全代理。22 路最高均为真实 1280×720;官网把该档称为“超清”,1080p 对应的“蓝光”并未下发,匿名接口已给出全部画质,登录不会解锁更高档
- 福建省级线路改为播放时自动续签:东南卫视等省级六路改用官网直播页的短效签名接口,播放时生成约 2 小时 47 分有效的地址并自动续签,只中转清单、分片由播放器直连官方 CDN;海博继续提供重点地市频道,福州综合 / 生活 / 少儿与厦视一套 / 二套 / 三套不依赖海博,各平台独立工作、任一异常不影响其它线路
- 精选列表补入宁夏三台:宁夏卫视、宁夏公共、宁夏文旅加入内置精选列表的「宁夏」分组,随远程列表更新,无需升级镜像即可看到
- 默认分组顺序:央视频置顶、地方台沉底、咪咕精简:央视频紧跟公告排在最前——它匿名就能提供 41 个与咪咕重叠的央视 / 卫视频道的 1080p,而咪咕游客档止于 540p、1080p 要会员;地方台分组统一沉到底部,景观 / 慢直播分组(景观、吉林风景)贴在地方台上方。旧配置档还没记录央视频时会自动把它放到最前,用户显式拖拽过的顺序仍然优先。咪咕去掉无法播放的上视东方影视(「上海」分组随之消失)和已由 iPanda 模块提供的整个「熊猫」分组,输出从 96 路减到 84 路
- 公告短片重制为 1080p:「欢迎使用 iPTV for iFansClub.com」公告视频按新版后台的视觉重新制作,1920×1080,体积反而比原来小;视频由仓库内的 HTML 源稿经
scripts/generate-announcement-video.mjs生成,以后改文案不必手工剪辑 - 系统公告频道可以隐藏了,详情卡只留有用的:公告频道此前和普通频道一样不能隐藏,详情弹窗还堆着节目单配对、别名、TVG、台标上传等对公告毫无意义的内容。现在「我的频道」里可以像普通频道一样隐藏它(不想在电视上放这条短片就藏起来,随时可在「已隐藏」里恢复),详情卡精简为名称、播放预览和隐藏 / 恢复;删除、移动、排序、重命名仍不支持,显示时固定在第一位(issue #119)
- 修复后台点公告频道「在页面里播放」报 manifestParsingError:网页播放器把所有同源地址都当 HLS 交给 hls.js(延迟解析频道的旧地址没有
.m3u8后缀,本机按 HLS 直出),公告短片/assets/announcement.mp4恰好同源,被当成清单解析后直接报错。现在 mp4 / webm / mp3 等直连媒体后缀一律走浏览器原生播放,独立播放页同时放开进度条;其它频道行为不变(issue #119) - 修复后台换了台标、电视上还是旧图:本地上传的台标写进订阅的地址固定是
/logos/<频道名>.png,移除后重传同名图片地址一字不变,播放器按地址缓存台标(多数永不过期),后台看文件已是新图、电视上显示的仍是第一张。现在台标地址尾部带上文件修改时间作为版本号(?v=…),换图即换地址、播放器重新拉取;台标路由同时补齐 ETag / Last-Modified 并支持 304 条件请求,不认 query 的客户端也能校验新旧。手动放进logos/目录的图同样适用;升级后清单重生成即生效,已缓存旧图的电视重新加载播放列表即可(issue #119) - 央视频频道不再显示无效的回看入口:订阅头的全局回看声明此前会套到央视频 73 个频道上,播放器据此在节目单里给出回放按钮,点了却只能拿到直播(模块从未实现回看)。现在央视频频道逐条标为
catchup="none",播放器不再显示回看入口;要回看同一个台请切到播放器里同名频道的咪咕线路。频道表版本递增,升级后启动时自动重建缓存,无需手动刷新(issue #119) - 修复全代理多码率直播连续播放约 10 分钟后断流:播放器持续轮询嵌套子清单或请求分片时会刷新代理地址的空闲期限与最近使用顺序;只有停播超过 10 分钟的地址才会回收,避免活跃子清单被固定 TTL 清掉后返回 404
- 修复凤凰卫视三台台标全部裂图:模块里写死的台标地址挂在
c1.fengshows-cdn.com,该域名的 HTTPS 已经握不上手(大陆、香港、美国探针全部 TLS 握手失败,走 http 才能拿到图),播放器和后台里凤凰资讯 / 凤凰中文 / 凤凰香港三台一律显示无台标。凤凰秀官网现在把同一批文件挂在q1.fengshows.com下、路径一字不差、文件内容一致,且大陆直连可达,现改用该地址。升级后清单重生成即自动生效;已自行上传本地logos/台标的用户不受影响(issue #118)
本次为「咪咕取流日志整理」版本:成功取流只打一行「咪咕取流:档位」,账号没订购某条内容的产品但流已正常下发时不再报红字,只给试看时改黄字并写明秒数,红字只留给真正拿不到地址的情况。升级镜像即可生效,现有订阅无需重新添加。
- 咪咕取流日志改为一行摘要,不再把正常播放报成红字:此前每次取流打「登录认证成功」,账号没订购该内容的产品时再补一行红字「认证失败 视频内容不完整 可能缺少相关VIP」——可那时流已经正常下发(内容本身允许播放,或咪咕只给了几分钟试看),看着像出错其实什么都没坏;真正要紧的「拿到哪一档、试看多少秒」反而不打,issue #117 排查时全靠播放器截图。现在成功取流只打一行「咪咕取流:臻享 超高清」,游客标「游客」,命中缓存标「缓存」;只给试看时改黄字并写明秒数,如「咪咕取流:臻享 超高清 · 仅试看 360 秒」;红字只留给拿不到地址的情况
本次为「咪咕 4K 权益与容器抓取修复」版本:咪咕 4K 被大屏策略拒绝后改按手机策略再要一次,足球通等不含电视端的三屏会员不再卡在 1080P,拒绝日志改为带咪咕原话与实际降到的档位;纬来体育在 NAS 官方镜像里抓不到的根因是 Alpine 版 Chromium 一遇深递归就崩掉渲染进程,改为先在沙箱里解析播放器页、不起浏览器即可拿到地址,并给该 Chromium 压小 JS 栈预算兜底;大陆用户外部 / 抓取模块频道的台标改用 jsDelivr 镜像,不再全部裂图;凤凰三台只保留在「香港」,不再复制出一个空的「亚太」分组。升级镜像即可生效,现有订阅无需重新添加。
- 咪咕 4K:足球通等不含电视端的「三屏」会员此前只能拿到 1080P,现在被大屏策略拒绝后会改按手机策略再要一次 4K:4K(rateType 9)请求一直带着
ott=true,这是咪咕的「大屏 / 电视终端」取流策略,按大屏(四屏)权益判定;三屏会员在这条路上被判「需会员」,代码随即降到蓝光,日志还打「该账号没有会员」,用户明明有会员却被带着去纠结账号。用「4K赛场原声」实测:游客带 ott 直接 409 连降级流都不给,不带 ott 则正常降到 540P、且可选档位里就列着 rateType 9「臻享 超高清」,手机策略本身就有 4K。现在被大屏策略拒绝后先原样按手机策略再要一次 4K,仍被拒才按咪咕愿意给的档位降级(它给到蓝光就要蓝光,此前给蓝光也会再降一级到高清);含大屏权益的账号第一次就成功、路径不变;拒绝日志改为带咪咕原话与实际降到的档位。回归测试scripts/test-migu-4k-fallback.mjs(issue #117) - 纬来体育在 NAS 容器里抓不到:根因是镜像里 Alpine 版 Chromium 一遇「深递归且每层有分配」就崩掉渲染进程,改为先「沙箱解析」、并给该 Chromium 压小 JS 栈预算:用户容器日志显示入口页与播放器 iframe 都能打开,卡在跨域播放器 iframe「10 秒不响应脚本执行」、页面上 xgplayer 两个脚本「无响应」,三个入口轮完全部失败,同一网络的电脑浏览器却能正常播。在官方镜像(Alpine 3.24 / Chromium 152)里用本地副本复现并二分定位:播放器页的 jsjiami 混淆脚本带 obfuscator.io 的 debugProtection——每 2 秒一轮「递归到栈溢出再 catch RangeError」,而这个 Chromium 上每层带分配(对象 / 数组 / 字符串)的递归到一千多层时渲染进程直接崩、不抛 RangeError(普通递归到一万七千层都正常),iframe 一进来就死,puppeteer 只能等到超时;「脚本无响应」是渲染进程崩了之后网络事件发不出来的表象,不是网络不通。两处修:① 内置抓取源每个入口先「沙箱解析」——把入口页与其播放器 iframe 的脚本放进独立 worker 线程的
node:vm里按顺序跑一遍(跨域的播放器库、统计脚本一律不下载),收集交给播放器(new Player({url})/hls.loadSource()等)或写进 DOM 的 m3u8,带 Referer 校验通过即用,本机实测 6 秒、几 MB 内存、不起 Chromium;沙箱拿不到或校验不过才起浏览器嗅探。沙箱只传字符串、不暴露任何宿主对象,同步死循环 3 秒截断,吃内存的脚本由 worker 内存上限兜住,不会拖死主进程;源可用extractOptions.sandbox=false关掉。② Alpine 环境(即官方镜像)起 Chromium 时加--js-flags=--stack-size=96,V8 在撞穿原生栈之前先抛 RangeError 让页面自己 catch(64 / 96 / 128 验证可用、160 仍崩),官方镜像里原样的浏览器抓取从「全部失败」变为 2.8 秒拿到地址,其它网页抓取源与外部「网页提取」源一并受益;桌面 Chrome 没这个问题、不加,代价是页面 JS 递归上限约八百层。回归测试scripts/test-player-page-sandbox.mjs用真实播放器页快照做 fixture;排查脚本scripts/probe-builtin-fetch.mjs新增沙箱阶段 - 修复大陆用户外部 / 抓取模块频道台标全部加载不出来:央视频、B 站、虎牙、精选频道等没有自带台标的频道,此前按名兜底取图的默认地址是
live.fanmingming.com,该域名及其.cn镜像在大陆均被 DNS 污染、根本连不上(大陆探针 30/30 失败),表现为 LunaTV 等播放器里咪咕频道有台标、其它源全是裂图。默认地址改为同一台标库的 jsDelivr 镜像(gcore.jsdelivr.net/gh/fanmingming/live@main/tv/),文件一一对应、大陆直连可达,升级后清单重生成即自动生效、无需任何操作;已自行设置mexternalLogoBase或放了本地logos/的用户不受影响。环境变量mexternalLogoBase补进配置表与 compose 示例(issue #25 / #114) - 凤凰三台不再置顶复制到「亚太」:v4.7.0 起内置精选列表的港澳台频道已全部按「香港」「台湾」归组,「亚太」分组不再有任何内置条目,凤凰秀官方三台再复制一份进去只剩一个孤零零的空壳分组。现在三台只保留在「香港」,与内置的三条第三方凤凰线路并列,仍是置顶不顶替;外部订阅自带的「亚太」分组及其中的凤凰条目原样不动,播放器按名聚合时官方源照旧排在前面
本次为「启动提速与直播源整理」版本:纬来体育等网页抓取源改为在首份播放列表生成之后在后台抓取,启动不再被它拖住十几分钟,单个入口抓不到最多约 35 秒即放弃,抓不到也不再清掉仍可用的旧地址;亚洲与国际直播模块只保留 YTN、NHK World 两个需要动态解析的频道,50 个固定直连源改由内置精选列表 IPTV.m3u 提供,并同步复核清理了精选列表的旧条目;升级后自动清理旧模块残留的缓存频道。升级镜像即可生效,现有订阅无需重新添加。
- 纬来体育等网页抓取源不再拖慢启动,单次抓不到也不再耗时数分钟:v4.6.1 的容器日志显示启动后 13 分 44 秒全在等纬来体育,外部源、抓取模块、播放列表生成都排在它后面干等;每个入口固定耗时 6 分 3 秒——兜底「触发播放」与页内找链接各执行一次页面脚本,渲染进程被阻塞时 puppeteer 要等满默认 180 秒的协议超时才放弃,错误还被静默吞掉。现在:① 启动先用缓存生成播放列表,需要网页抓取的内置源放到列表生成之后在后台抓,抓到再补一次「仅重新生成」;抓取加防重入,5 分钟定时刷新撞上正在抓的那一轮直接跳过(此前启动那轮与第一个 tick 会同时各起一个 Chromium 抓同一个源,退避计数也被记两次);② 页面脚本执行加 10 秒上限、超时的 frame 后续不再碰,alert / confirm 弹窗自动关闭,主文档 10 秒内零响应即放弃(国内访问被 DNS 污染的
jrkan.com此前每轮白等 30 秒),页面导航上限从 puppeteer 默认的 30 秒改为 15 秒(健康页面 4~5 秒就拿到清单,嗅到即走,上限只在页面卡死时才会等满;可按源用extractOptions.timeout覆盖),单个入口最坏约 35 秒、一轮三个入口约 1.5 分钟;③ 抓取失败先带 Referer 校验缓存里的旧地址,仍可用就沿用(该 m3u8 多日不变),校验不过才清,频道不再因一次抓不到就整个消失;④ 导航超时时把仍挂着的请求按域名列进日志(挂了多久、有没有响应),不响应脚本的 frame 也会报出,内网抓不到时从容器日志即可看出卡在哪一跳,不必再进容器跑探测脚本。真实 Chromium 验证脚本scripts/verify-web-extract-timeout.mjs补了主线程死循环、页面 alert、零响应三个场景 - 亚洲与国际直播整理:模块只保留 YTN、NHK World 两个动态解析频道,固定直连源改由内置精选列表
IPTV.m3u提供:v4.6.0 起模块里的 43 个频道每次播放都要经本机解析、校验并代理清单与媒体,但其中绝大多数只是固定 HLS 地址,走这条链路只是多一跳转发。现在IPTV.m3u新增独立标记区块「亚洲直播实验台已处理直连源」,收录 50 个按直连方式复核过的固定地址(原模块迁来 27 个,新增 Wipeout Xtra、Graham Norton、Rai Italia、History Hit、Court TV、Documentary+、CGTN Documentary、Sky Racing、FUEL TV、FloRacing、World Poker Tour 等 23 个),每条附实验台备注;模块只留必须先访问官方接口才能拿到当前地址的 YTN 与 NHK World。需要防盗链 Cookie 或 Referer 才能播的 TVB 新闻、Bloomberg 三台,以及未列入实验台直连清单的 DW 两台、Al Jazeera、ABC News Australia、Al Arabiya、National Geographic、NASA+、France 24 Arabic、NBC Sports NOW、Stadium 共 14 个频道不再提供。精选列表原有条目同步绕过 VPN 逐条复核根地址与实际媒体数据:「影视」组的龙华 / 靖天 / TVB 星河等转流条目、香港 TVB / ViuTV / HOY / NOW / 澳门 / 新加坡各台、台湾 4gtv 系列,以及 v4.6.0 补充的纬来日本、纬来育乐 RTMP 源整体清理;翡翠台、公视 / 民视 / 华视 / 台视高清、TVBS 亚洲复核通过保留并按「香港」「台湾」归组,三条第三方凤凰线路归入「香港」。精选列表由运行中的实例直接从仓库拉取,这部分不用升级镜像即已生效 - 升级后自动清理抓取模块里新版不再认领的缓存频道:模块升级后磁盘缓存
extractor-cache.json里可能还留着旧版频道的延迟解析引用,本版亚洲与国际直播模块从 43 个缩到 2 个,若原样输出,已迁入IPTV.m3u的频道会和旧缓存同时出现,旧缓存那份还会生成永远解析不了的本地代理地址。现在每次加载缓存都按模块当前认领范围收口、落盘并打印清理数量;不带延迟解析引用的普通缓存频道不受影响
本次为「亚洲直播代理修复」版本:亚洲与国际直播模块改回清单、密钥与媒体全部由本机代理,修复 TVB 新闻等依赖防盗链 Cookie 的频道以及 Bloomberg 美国 / 欧洲台在 v4.6.0 播放失败的问题,Cookie 按域名与路径限定发送、回源重定向逐跳复验白名单;纬来体育把海外可达的入口提前,海外或走代理的部署不再整轮落空。升级镜像即可生效,现有订阅无需重新添加。
- 修复亚洲与国际直播模块的播放链路:v4.6.0 里该模块默认只中继清单、媒体分片由播放器直连 CDN,但 TVB 新闻这类平台的 CDN 要求分片请求也带上清单响应下发的会话 Cookie,播放器直连时拿不到 Cookie 会被拒;Bloomberg 美国 / 欧洲台的清单会指向不在白名单里的备用 CDN 域名,被模块按「不允许访问媒体地址」拦下;不能跨站取流的播放器也放不出来。现在清单、密钥与媒体分片统一由本机代理,Cookie 严格按响应主机的 Domain / Path 限定,只发给对应 CDN 的对应路径,不会泄漏给其它主机;代理层回源改为逐跳手动跟随重定向(最多 3 跳),每一跳都重新过模块白名单、跳出即拒绝,固定请求头跨站跳转时自动剥掉 Cookie / Authorization;Bloomberg 三台补齐 fastly 与 akamaized 两套 CDN 域名。代价是 Love Nature 4K 等高码率频道现在会占用本机转发带宽,不再是 v4.6.0 说明里的「媒体直连 CDN」
- 纬来体育入口顺序调整:
jrkan.com从候选末位提到主地址之后的第一顺位。四个国内镜像只放行国内 IP,jrkan.com是海外可达的入口,此前排在第六位,而每轮最多只试 3 个入口,海外或走代理的部署一旦主站抓不到就整轮落空、永远轮不到它;国内部署不受影响(jrkan.com在国内 DNS 被污染、连接失败会立即跳过换下一个),已缓存的地址也不会因调整顺序而重抓。该清单由运行中的实例直接从仓库拉取,不用升级镜像即已生效 - 文档:去掉首页过时的「v4.3.0 已接入央视频」提示
本次为「亚洲与国际直播接入」版本:新增零配置的亚洲与国际直播模块,一次带来 43 个经验证的公开频道(TVB 新闻、YTN、NHK World、DW、Bloomberg、France 24、Reuters,以及体育、文旅、宠物、台湾、娱乐时尚等),内置精选列表同步去重整理;管理后台视觉刷新并支持在页面内直接播放;修复纬来体育等网页抓取源在内网「早已嗅到地址却因导航超时被整次丢弃」的问题;凤凰三台改为置顶不顶替,第三方同名条目保留作备用线路。升级镜像即可生效,现有订阅无需重新添加。
- 接入亚洲与国际直播模块:把独立实验项目验证过的 43 个有效频道收编为主项目零配置模块,覆盖 TVB 新闻、YTN、NHK World、DW、Bloomberg、France 24、Reuters,以及体育、文旅、宠物、台湾和娱乐时尚内容;已断流的 NASA Legacy 不进入生产频道表。固定 HLS 与 TVB / YTN / NHK / NASA 动态接口统一在播放时解析,重定向、根清单及其子资源均受精确协议、端口和主机白名单限制;模块默认只中继实时清单、媒体由播放器直连 CDN,避免 Love Nature 4K 等高码率频道占满 NAS 带宽,需要时仍可用全代理订阅
- 管理后台视觉刷新 + 页面内播放:保持浅色与原有配色,面板、卡片、频道行统一为更大的圆角与细边框,悬停只变边框色不再位移;普通按钮改为白底细边框、圆角统一,主色 / 成功 / 危险 / VLC / IINA 按钮保留各自填充色;各类小标签统一为胶囊形。新增页面内播放器:「我的频道」每行常显「▶ 播放」,频道详情弹窗也有「▶ 在页面里播放」,弹窗直接起播不再跳新窗口(HLS 用 hls.js 按需加载、FLV 用自带 mpegts.js、Safari 原生 HLS 兜底),可一键改为「新窗口打开」回到独立播放页;关闭 / Esc / 点遮罩都会释放播放器
- 修复纬来体育等网页抓取源「科学上网能抓、内网经常抓不到」:抓取器此前要等页面完全空闲(networkidle2)才算加载成功,内网访问这类页面时常有某个跨境资源一直挂着,页面 30 秒都到不了空闲,导航超时后整次抓取按失败处理,把早在几秒内就已嗅探到的 m3u8 一并丢掉,换下一个入口再重蹈覆辙。现在导航与嗅探赛跑:嗅到清单立刻收工,不再陪页面把所有资源加载完;导航超时也不算失败,继续在已加载的内容里嗅探;站点根本不通(连接失败 / 零响应)则立即放弃,把时间留给下一个入口。兜底「触发播放」与页内找链接也改为遍历所有 frame,播放器在跨域 iframe 里(jrs 系页面即如此)时不再只查主页面。附带独立排查脚本
scripts/probe-builtin-fetch.mjs:不启动整个项目、只对一个源跑一遍完整链路,逐步给出 DNS / 入口页 / 播放器依赖 / 浏览器嗅探 / m3u8 校验的诊断,方便在内网与代理两种网络下对比。另实测纬来体育六个入口的地域可达性正好互补——四个备用入口只放行国内 IP(海外 403)、jrkan.com在国内被 DNS 污染,入口顺序保持不变 - 凤凰三台改为「置顶不顶替」:凤凰秀官方三台仍置顶复制到「亚太」,但亚太里其它来源(外部订阅、内置列表)的同名凤凰条目不再被顶掉,原样排在官方三台之后作备用线路,不合并;「香港」分组照旧。播放器按名聚合时官方源在前即为默认源
- 内置精选列表同步整理:已并入亚洲与国际直播模块的国际新闻、体育、纪实、娱乐时尚等条目从内置
IPTV.m3u移除,不再与模块重复;同时移除 Sky News、FashionTV、央视付费频道、美国影视等一批第三方转流条目;「体育」补充纬来体育,「台湾」补充纬来日本、纬来育乐。该列表由运行中的实例直接从仓库拉取,不用升级镜像即已生效
本次为「凤凰卫视接入」版本:新增凤凰卫视三台(登录本人凤凰秀账号即可 720p,无需付费会员)与大连三个正式电视频道;内置网页抓取源支持配置多个入口地址、主站打不开时自动换备用地址重试;并修复辽宁省台、上海频道、央视频三处播放问题与 LunaTV 漏导入频道的兼容问题。升级镜像即可生效,现有订阅无需重新添加。
- 新增凤凰卫视直播模块:接入凤凰资讯、凤凰中文、凤凰香港三路电视直播,归入「香港」分组,同时置顶复制到「亚太」分组(找凤凰不必先想它算不算「香港」),两处都在。游客为 854×480;在「🌐 源管理 → 凤凰卫视」导入本人凤凰秀账号的 Token(支持粘贴 Token 值或包含它的整段 Cookie,也可用
mFengshowsToken环境变量)后,三台均为 1280×720 / 25 fps,普通账号即可,无需付费会员;凭证随主项目配置持久保存,重启无需重填。只提供直播,不接入回看、点播与栏目目录;播放时实时向官方取新签名,Token 不发送到媒体 CDN、也不写入订阅。直播为 HTTP-FLV,本机只转发不转码——网页播放器已内置支持,外部播放器需自身支持 HTTP-FLV - 凤凰三台以官方源为准:其它来源(内置精选列表、外部订阅)提供的同台条目自动让位,命名变体(如「凤凰卫视中文台」)一并覆盖,播放器的「源1 / 源2」里不会再混进画质不明、随时失效的第三方转流
- 新增大连云直播模块:接入大连新闻综合、大连生活、大连文体三个正式电视频道,源管理里独立成「大连」卡片可单独开关,播放列表统一归入「辽宁」分组
- 内置抓取源支持多个入口地址:网页抓取型内置源改为可配一份候选清单,主站打不开或抓不到时自动换下一个地址重试(每轮最多试 3 个),上一轮抓成功的地址下轮优先。纬来体育所在的 jrs 系站点常换域名或被墙,此前单一地址一失效整个源就失联,现已补上四个备用入口。入口清单走远程配置,站点变动时改仓库文件即生效,不用等升级镜像
- 修复辽宁省台无法播放:北斗融媒的 CDN Referer 与拉流密钥会由平台轮换,模块此前把某次取得的值固定在代码里,过期后省台清单被 CDN 以
403 denied by Referer ACL拒绝(沈阳台的 CDN 恰好不校验,因此表现为「沈阳能播、省台不能」)。现在按官方客户端的公开鉴权协议动态取得并定时刷新,失效自动换新(issue #112) - 修复上海频道取不到直播地址:看看新闻已改为按当前正在播出的节目发放播放地址,频道详情接口不再直接下发;现在先查官网当前节目再取地址,并随节目结束时间自动换新。遇到节目因版权限制暂停网络直播时给出明确说明,不再沿用必然被 CDN 拒绝的旧地址
- 修复央视频偶发播放失败:选线探测成功后立刻二次取清单,会被官方 CDN 按「短间隔重复请求」拒绝(403)。现在把探测时已取回的清单正文直接下发,缓存里只留官方主备入口、不再混入 CDN 重定向后的临时地址,主备全失败时提前换票
- 修复 LunaTV / MoonTV 漏导入央视频、虎牙、斗鱼频道:部分版本只把
#EXTINF紧接的下一行当播放地址,中间的#EXTVLCOPT:network-caching缓冲提示会让整个频道被丢弃。对外订阅已省略仅含缓冲提示的选项块(防盗链所需的Referer/User-Agent仍保留),升级后在 LunaTV 后台刷新直播源即可,订阅地址无需更换(issue #114) - 文档:README 新增「凤凰卫视怎样开启 720p」「LunaTV 导入不到频道」两条 FAQ,首屏突出 Docker 部署入口;维护者发版流程加入创建 GitHub Release 的步骤,发布说明由
bump-version.js release-notes从更新日志生成,与 README 同源
本次为「低配机稳定」版本:修复多个无头 Chromium 同时运行,把内存 ≤2G 的 NAS / 小主机拖进交换分区、表现为服务卡死与硬盘狂读写的问题——全进程共用浏览器启动器限制并发、抓取失败指数退避、网页抓取只嗅探不播放;新增 mbrowserConcurrency 环境变量。升级镜像即可生效,现有订阅无需重新添加。
- 无头浏览器并发上限:新增全进程共用的浏览器启动器,同时存活的 Chromium 不超过
mbrowserConcurrency(默认 2,超出的排队;广东台 / 湖北台 / 央视景观的常驻会话空闲时主动让位,5 分钟无人取票整个关掉)。位子以浏览器进程真正退出为准归还,进程在登记前就崩溃也会立即释放,不会出现上限一路缩水到 0 的情况;统一启动参数(关 GPU / 磁盘缓存、静音、--disable-dev-shm-usage),候选二进制去重,启动超时直接失败、不再逐级换浏览器往过载的机器上加负载。内存 ≤2G 建议设 1;经常同时观看广东 / 湖北 / 央视景观多路频道且内存 ≥4G 可设 3 - 抓取失败指数退避:网页抓取型内置源 / 外部源(如纬来体育)抓取失败后按 10 → 20 → 40 分钟退避(上限为该源自己的刷新间隔),成功即清零。此前每个 5 分钟检查都会重新起 Chromium 重抓,一个抓不到的源就足以把机器拖垮
- 网页抓取只嗅探地址:拦掉视频分片、图片、字体请求,不再把直播真的播上几十秒;广东台 / 湖北台 / 央视景观的取票会话同样拦掉图片、字体(后两者连媒体请求一并拦掉)。取票后不把页面导航走——广东台官网会在页面卸载时作废刚发的票据,导致清单 403
- 修复漏进程与噪音日志:广东台会话初始化半途失败时关闭浏览器,不再漏进程;央视景观取票 Promise 提前挂上 catch,消除「未处理的 Promise rejection」
- 本地验证工具:新增
scripts/verify-browser-launcher.mjs,用真实 Chromium 跑并发上限 / 空闲让位 / 分片拦截 / 失败退避四项(需本机有 Chromium,不进 npm test);msourceTickSeconds/mbackoffBaseMinutes两个测试用环境变量可压缩 5 分钟检查周期与退避基数(仅供测试);npm test 新增浏览器位子与退避两组单测 - 文档:README 新增「服务卡死、硬盘不停读写」FAQ;央视频说明补全到频道覆盖、内容来源与 FAQ
本次为「央视频接入」版本:新增央视频官方直播模块,免登录、零配置、默认开启,一次带来 63 个官方高清频道;配套修正代理层四处会拖垮播放的通用问题(所有走清单代理/中转的模块都受益),并新增「忽略源自带分组」等频道管理能力。升级镜像即可使用,现有订阅无需重新添加。
- 新增央视频直播模块:接入央视频官方匿名接口,提供 63 个公开频道——央视全套、CGTN 多语种及各省级卫视,统一归入「央视频」分组(默认紧跟「央视」之后,旧配置档无需重新拖拽)。清晰度档逐频道校准(多数频道为 fhd 高码率档),播放时才实时生成官方短效地址并自动续签票据,主 CDN 异常自动切换备用;清单由本机中转(不跟随 302 跳转的播放器也能播),视频分片由播放器直连官方 CDN——实测平台按「谁来拉分片」判定异常流量,服务端代拉会被 403,播放器直连则与官方 App 行为一致。10 个需登录解锁的付费剧场频道不在收录范围
- 代理层四处修正(排查央视频播放问题时发现,与央视频无关、所有清单代理/中转模块通用):直播清单不再缓存正文——缓存会让播放器在整个缓存期内反复拿到同一批分片、播十几秒即无片可放而卡死,改为每次实时取回、只缓存已验证可用的入口地址;选 CDN 时不再试拉分片——官方 CDN 对短间隔重复请求回 403,这一枪会把完全正常的主备线路全误判为不可用;播放器批量探活的清单 HEAD/OPTIONS 改为本地收口,不再逐频道触发上游解析链(实测打开订阅 2 秒内 HEAD 29 个频道,此前会瞬间打出上百个上游请求);清单取回失败后熔断 2 秒,播放器连环重试(实测 1 秒 9 次)不再逐次转发上游,避免把正在正常播放的频道一起拖垮
- 订阅源新增「忽略源自带分组」:有些订阅自带的分组杂乱,以前会原样进入分组列表,而关键字自动分组规则又管不到它们(规则只对「未分组」生效)。现在在订阅源编辑里勾选「忽略源自带分组」,该源全部频道即按频道名走「设置 → 🗂️ 自动分组」的关键字规则归组,规则没命中的进该源「默认分组」;开关按源独立、不影响其它源,手动移动过的频道仍以手动设置优先(issue #110)
- 全局规则对全新配置档也生效:修复关键字自动分组、统一显示名在零个性化配置的配置档上不生效的问题——它们是全局配置,此前只有档内存在任意自定义时才会被应用(issue #69 / #56 的遗留缺口)
- 播放列表新增系统公告频道:首位固定提供项目自有的「欢迎使用 iPTV for iFansClub.com」公告频道,展示使用方式、版权提醒和侵权联系说明,不引用任何第三方节目素材;为确保每份对外分发的订阅都保留必要提示,该系统频道不支持隐藏、删除、移动、排序或重命名
本次为「全代理诊断与加固」版本(issue #98 排查配套):订阅地址格式不变,升级后无需重新添加订阅。
- 全代理链路全程可观测:订阅拉取(含
?relay=参数)、清单下发、分片请求与转发结果(状态码、字节数、耗时)、302 跳转下发全部在默认日志留痕,每行带来源 IP 与 UA——curl 自查与播放器请求一眼可分;分片 404、CDN 拒绝代取、网络失败从完全静默改为可见提示。播放异常时只需试播一次、截取一段日志,即可定位卡在哪一环 - 分片 HEAD 探测真实回源:对播放器的 HEAD 探测向 CDN 发真实 HEAD 并带回 Content-Length / Accept-Ranges(与播放器直连 CDN 拿到的一致);上游不支持 HEAD、长度不可信或分片需平台变换时自动回退合成应答,GET 行为不变。relay/proxy 清单的 HEAD 也改为返回与 GET 一致的响应头(含准确 Content-Length)
- 兼容性加固:清单行尾与 BOM 归一化(CRLF 上游不再产出混合行尾清单);HTTP keep-alive 超时从 5 秒提高到 65 秒,避开直播清单 6 秒轮询节拍
- 修复:畸形 relay/proxy 路径不再被误当账号段返回整份订阅(改为 404 并记日志);分片路由与清单路由的大小写匹配对齐;嵌套子清单取回失败改回 502,不再把未改写清单透传给播放器;代理地址表超上限时不再优先淘汰最活跃频道的地址
本次为「省市台与景观直播扩容」版本:新增 8 个省市广电模块与虎牙、斗鱼直播模块,接入央视网「直播中国」和上海松江慢直播,并为河北、福建补充景观与地市线路。新增内容全部免登录、默认开启,本版新增约 140 个官方频道与城市景观直播;连同 v4.1.0 的省级模块,官方广电与景观直播在各平台正常返回时合计可提供约 240+ 个频道,实际数量会随平台接口和直播状态动态变化。
- 新增 8 个省市广电直播模块:海南网台(7 个,海南卫视 / 三沙卫视及五个地面频道)、深圳广电第一现场(7 个,含深圳卫视4K / 深圳卫视及五个地面频道)、河北冀时(6 个非购物频道 + 13 路「美丽河北」城市景观)、辽宁北斗融媒(辽宁省台与沈阳台,最多收录 13 个白名单频道,并按当前
live状态动态筛选)、湖北长江云新闻(6 个,湖北卫视 / 经视 / 综合 / 影视 / 教育 / 垄上)、广州花城+(3 个:广州综合 / 新闻 / 南国都市4K)、南京牛咔视频(4 个电视频道 + 13 路 Live 南京城市景观,自动剔除重复电视流)、青岛蓝睛(五四广场 / 奥帆中心及三路主干道城市直播) - 新增官方景观直播:央视网「直播中国」按官网目录动态收录当前在线信号(现有约 57 路、覆盖 20 个地区),播放时从官网播放器获取 HLS;无需登录,日志中的浏览器会话仅用于执行官网播放器鉴权。央视清单与分片自动全代理以补齐 CDN 防盗链请求头,只有实际观看时才占用服务端带宽;上海松江客户端加入「松江融媒慢直播」,按公开场景清单更新主画面并排除内部测试流
- 福建官方线路扩充:省级六路改用官网直播页的短效签名接口,播放时自动续签;海博继续提供重点地市频道,另有不依赖海博的福州综合 / 生活 / 少儿,以及厦视一套 / 二套 / 三套官方直播。各平台独立工作,任一平台异常时仍保留其它线路
- 新增虎牙、斗鱼直播模块:与 B 站直播同款玩法——按所选分类自动收录热门直播间(虎牙默认「赛事」、斗鱼默认「网游竞技」,各按人气取前 8 并带最低人气门槛),也可手填房间号 / 直播间地址;分类、每类数量、人气门槛与优先画质(默认超清,可选原画)均可在源管理调整。两个平台免登录、默认开启,频道分别归入「虎牙」「斗鱼」分组;播放时才实时生成官方短效地址,本机只中转清单并补齐防盗链请求头,视频分片由播放器直连官方 CDN
- B 站内容与配置改进:热门榜最低人气改为可配置,默认从 10000 调低到 3000,填 0 可关闭过滤;默认分区改为「赛事 + 知识」,后台支持赛事、知识、生活、游戏等 12 个分区可视化多选;所有自动与手动频道统一归入「B站」分组
- 新增娱乐时尚与体育精选频道:「娱乐时尚」新增 FashionTV Paris L'Original、Global Fashion Channel、Qello Concerts、Totalmusic Concerts;「体育」新增 Stadium、MTRSPT 1
- 短效签名与代理按平台自动处理:广州按分钟刷新签名;深圳为每条 HLS 路径独立续签;河北按官网规则生成约两小时签名;福建省级六路播放时生成约 2 小时 47 分的地址;辽宁生成短效签名并携带租户防盗链;湖北复用匿名 Chromium 会话补齐
client-id与防盗链;央视景观按需读取官网播放器鉴权结果;松江按公开场景清单更新长效地址。辽宁 / 湖北 / 深圳 / 厦门 / 央视景观清单与分片全代理,河北 / 福建省级 / 松江只中转清单,其余福建地市、广州 / 南京 / 青岛基本直连 - 容器数据目录迁移:默认数据目录从
/migu/data调整为/iptv/data;旧匿名卷与旧版./data:/migu/data挂载会自动识别并继续沿用,无需手动迁移 - 省市频道归类:普通省市电视分组与源管理卡片统一只显示地区名,去掉「频道」「电视台」「地市台」等后缀;景观直播作为特殊类型仍保留「景观」后缀;广州、深圳频道与广东省台统一归入「广东」
- 省市模块命名:源管理中的省市广电卡片统一只显示地区名(如「辽宁」「广东」),不再把北斗融媒、荔枝网等平台品牌写入标题
- 默认分组顺序:新建配置档默认按「体育 → 昨天 / 今天 / 明天赛事 → 央视 → 卫视 → 亚太 → 国际 → 影视 → 少儿 → 教育 → 娱乐时尚 → 文旅 → B站 → 虎牙 → 斗鱼」置顶,之后连续排列地方台,景观分组统一置底;用户手动拖拽保存的顺序仍优先
- 咪咕地方频道精简:不再输出与免登录地方官方模块重复、且高画质受账号 / VIP 限制的咪咕「地方」分组;仅保留上视东方影视并入上海、陕西四个频道并入陕西、财富天下并入江苏;咪咕「新闻」中的地方重复源、公共新闻频道和中国天气全部移除,空分组不再显示
- 国际频道归类:项目自带的 Reuters、Sky News、NHK World、France24 从「新闻」调整到「国际」,默认紧跟在「亚太」之后
- 地方少儿频道归类:各地官方模块的少儿、卡通及动漫频道在地方分组保持完整,同时归入「少儿」分组;遇到咪咕等来源的同名或平台长名重复项时,内容分组优先保留画质更高的地方官方线路
- 地方教育频道归类:各地官方模块的教育、科教及教科频道在地方分组保持完整,同时归入「教育」分组;同台多源时内容分组优先地方官方线路,「少儿科教」类频道仍归「少儿」
- 地方体育频道归类:各地官方模块的体育、体育休闲及文旅体育频道在地方分组保持完整,同时归入「体育」分组;同台多源时体育分组优先地方官方线路
- 咪咕综艺分组移除:不再输出仅含「最强综艺趴」和重复江苏频道的咪咕「综艺」分组;地方综艺频道仍保留在各自省份分组
- 纪实分组精简:「纪实」统一更名为「文旅」,删除咪咕专题轮播「新动力量创一流」,以及已有河南 / 海南官方模块替代的梨园、社会与法、海南文旅咪咕副本
- CCTV5 双分组保留:CCTV5 体育和 CCTV5+ 体育赛事在「体育」与「央视」中各保留一份;其余咪咕跨分组重复项仍照常去重
本次为「省级台大扩容」版本:一次性新增 9 个省级广电官方直播抓取模块(模块数 2 → 11),全部零配置、免登录、默认开启——升级后无需任何操作,约 106 个官方频道自动按省分组进入播放列表;另有「全代理版」订阅与源管理页改版。
- 新增 9 个省级广电直播模块:广东荔枝网(17 个频道,含广东卫视 / 大湾区卫视 / 广东4K)、福建(官网短效接口提供 6 个省级台,海博提供 9 个地市台)、大象新闻河南(13 个,河南卫视 + 梨园 / 武术等特色频道)、看看新闻上海(13 个:东方卫视 / 五星体育等 8 个 SMG 频道 + 陆家嘴 / 外滩 / 北外滩等 5 路景观慢直播)、芒果TV(12 个,金鹰卡通 / 湖南经视等官网固定频道)、江苏网络台(10 个,含江苏卫视4K)、浙江新蓝网(9 个)、山东齐鲁网(9 个)、广西网络台(7 个)。短效地址续签、防盗链请求头、最高画质回落、购物频道剔除全部由服务端自动处理——模块卡片没有、也不需要任何配置项
- 模块默认开启,装好即出频道:新装与从未动过模块开关的部署,升级后新模块(含哔哩哔哩直播)自动启用;明确关闭过的模块保持关闭,设过
menableExtractors=false的空白部署也不会被突然打开。不想要哪个省,去「源管理」把对应卡片关掉即可 - 流的取回方式按平台特性各就各位:广西官方流带平台自研加密,本机代理边下边解密,普通播放器直接可播;广东官网地址约 2 分钟过期,用项目既有的无头浏览器无感续签(Docker 镜像自带 Chromium 无需操心;裸机部署需装 Chrome 或用
PUPPETEER_EXECUTABLE_PATH/mchromePath指定路径,没装只影响这一个模块);广西 / 江苏 / 芒果TV / 看看新闻清单与分片全代理(占用服务器带宽),浙江 / 广东 / 福建省级只中转清单、分片由播放器直连官方 CDN,河南 / 山东及福建地市基本直连 - 源管理页改版:改为「自定义源 / 内置抓取模块 / 内置源」三个标签页切换,标签直接显示启用数 / 总数并记住上次停留位置;模块配置与运行详情改在居中弹窗打开(Esc / 点遮罩关闭,有未保存改动先确认),免配置模块入口显示「详情」;模块抓取失败但仍有上一轮数据时,卡片标注「沿用缓存 N 频道」,不再让人误以为一切正常
- 全代理版订阅(
?relay=2):清单与视频分片全部由服务器同源下发,专治用了兼容版(?relay=1)仍然转圈的播放器(极空间「极影视」等取不动清单内跨主机地址的设备);后台三处订阅地址栏均新增「全代理版」一键复制。注意视频流会经服务器中转,能用兼容版就不要用它(issue #98) - 内置「精选频道」源大扫除:133 → 121 个频道——探活脚本升级为深度探活(真实下载分片、rtmp 实测握手播放),识破一批「HTTP 200 但实为失效页」与死 rtmp 的伪活源并剔除,现存 121 个频道全部实测可播;湖南 / 东方 / 浙江卫视 4K 移至清单开头
- 依赖安全更新:升级 basic-ftp(critical)与 ws / ip-address / js-yaml 等依赖修复已知漏洞,仅更新 lockfile、功能与配置无变化(issue #105)
- 杂项:B 站直播刷新间隔收紧为 45~90 分钟,越界旧值自动回落默认 45;网页播放器支持无
.m3u8后缀的同源动态清单(新模块所需);本地裸跑建议 Node.js 20+(推荐 22 LTS);Dockerfile 跳过浏览器下载的变量改用 puppeteer 实际识别的PUPPETEER_SKIP_DOWNLOAD,行为不变(issue #106)
本次为「源模块化」大版本:咪咕从写死的内核收编为第一个「抓取模块」,新增哔哩哔哩直播模块,全部内容来源统一进顶层「源管理」。升级完全向后兼容——存量配置自动迁移、老环境变量继续生效,唯一可感知的变化是抓取频道的分组归一(见下)。
- 全新「源管理」与抓取模块架构:抓取模块、内置源、精选频道、自定义源聚合为一页卡片网格,每张模块卡片自带独立开关 + 配置 + 健康状态;原「系统配置」里的平台账号 / 画质 / H.265 / HDR / 就近取流归位到模块卡片(存量配置自动迁移,
muserId/mrateType/menableH265等环境变量继续生效),「获取账号」书签工具随之搬家,后台顶部有搬家指路条 - 哔哩哔哩直播模块(一键开启即得正在打的比赛):在「源管理」打开开关即自动抓取所选分区(默认「赛事」)人气前 8 的直播间(带人气下限,挡掉同场比赛的多机位小号),也可手填房间号 / 直播间地址 / b23.tv 短链;SESSDATA 支持扫码登录(也有手动指引),不填「超清」、填了解锁「原画」;可选优先 HLS / 优先 H.264 与播放缓冲,环境变量
mbiliSessdata - 频道级播放选项(#EXTVLCOPT)全链路贯通:按频道携带 Referer / UA / 缓冲参数——B 站这类需要请求头的直链源开箱能播,订阅导入的第三方源带的 #EXTVLCOPT 也不再丢失
- 抓取频道分组归一:同一频道只出现在一个分组(「先出现者胜」),分组顺序沿用上游返回。注意:分组分布与旧版略有不同,做过个性化编排的用户升级后可进「我的频道」核对一遍
- 抓取核心稳定性大扫除:token 自动续期改用墙钟时间戳(修「更新间隔不整除 720 小时时永不续期」)、不再被容器重启 / 后台保存反复触发;平台接口暂时不可达时改用上一轮缓存,已抓到的频道不再被静默清空;设了「启动时不更新」的用户重启后频道整批消失 / 体育赛事重复追加均已修复;播放请求异常返回明确错误,不再让播放器挂死转圈
- 后台修复一批:改访问密码后不再卡 403;「保存并重启」正确执行重启并探活后跳转;已删除的内置订阅源不再复活;表单新增「未保存改动」标记与保存提示;凭据(token / SESSDATA)支持一键清除;模块表单只提交改过的字段——环境变量部署的用户点保存,不会再把 env 值固化成文件值
- 咪咕 token 不再被 /api/system-config 明文回显:凭据只回「有没有值」(后台显示掩码),未设访问密码的部署不再能被同网段一个 GET 读走登录态
- 兼容版订阅再进一步:多码率 master 清单拍平为媒体清单直出,去掉播放器侧嵌套跳转,老电视盒兼容性更好(issue #98)
- 撤掉「启用抓取模块」总开关:每张卡片的开关是唯一真相,原总开关状态升级时自动折进各模块,无感迁移;内置订阅源也不再混在「自定义源」列表里
v4.0.1 为 v4.0.0 发布当日的重打版本:并入 B 站扫码登录与后台登录态显示的收尾修复,其余内容同 v4.0.0。
- 配置导出 / 导入(备份 · 换机迁移):后台「设置 → 系统配置 → 配置备份 / 迁移」一键把全部配置(系统配置、外部订阅源、我的频道与各配置档、EPG 源、频道别名 / 分组规则、用户令牌)导出为单个备份文件,换机 / 重装后导入即可恢复,多数配置即时生效(端口修改需重启)。导入前自动把当前配置快照到数据目录
config-pre-import-backup.json,导错可恢复;摸不到 Docker 数据卷目录的 NAS 用户(极空间 / 群晖等)从此不用再找卷路径。注意:导出文件包含咪咕账号与访问密码,请妥善保管;自定义台标logos/需单独拷贝(issue #99) - 兼容版订阅在极影视仍无法播放的修复:兼容版(清单直出)频道地址现带
.m3u8后缀(/relay/<频道>.m3u8)——极空间「极影视」等播放器按 URL 后缀识别流格式,无后缀会被判定不可播放;HEAD 探测也改为按 HLS 类型应答。v3.16.0 已添加的旧格式兼容版订阅继续可用,重新复制一次兼容版地址即可获得新格式(issue #98) - 咪咕接口不可达时干净失败:服务器连不上
play.miguvideo.com(挂代理 / 海外部署 / DNS 异常最常见)时,此前日志会刷两大段错误堆栈;现在只打一行错误摘要,播放器会收到「咪咕接口请求失败:网络超时或不可达」的明确提示并自动短周期重试,排查方向一目了然 - 内置列表:移除失效的 苏州4K
- 「兼容版订阅」清单直出:修复极空间极影视等播放器播放一直转圈:少数播放器(极空间「极影视」、部分老电视盒)不跟随 302 跳转,表现为频道列表 / 台标正常、点开播放一直转圈然后失败。现提供兼容版订阅(原订阅地址加
?relay=1,后台「我的频道」订阅地址栏 / 配置档 / 用户令牌处均有「兼容版」一键复制):频道地址改为清单直出——服务器替播放器完成跳转、直接返回播放清单,播放器无需跟随任何跳转;视频流仍由播放器直连 CDN,不占服务器带宽,回看同样可用。能正常播放的播放器无需换用。README 新增「播放器适配一览表」与对应 FAQ 条目(issue #98) - 内置列表港台频道大更新:港澳台(亚太)频道大幅更新补充,体育分组调整;凤凰系频道更名为通用短名(凤凰中文 / 凤凰资讯 / 凤凰香港),配合 v3.15.0 的凤凰系 EPG 归一,长短名均可正常匹配节目单与台标
查看历史版本更新日志(v3.15.0 → v1.2.4)
- 咪咕「客户端就近取流」开关:解决跨运营商观看卡顿:服务器和观看设备不在同一运营商网络时(如服务器接移动宽带、电视用联通网络),咪咕频道常见加载慢 / 播不了——因为播放地址由服务器解析,拿到的是服务器侧运营商的 CDN 节点。在「系统配置」勾选本开关(或环境变量
menableClientDispatch=true)后,播放地址改由播放器所在网络就近选择节点,跨网观看即可流畅。默认关闭,同网部署无需开启;保存即时生效、无需重启(issue #82) - 外部源失效检测:「源管理」的订阅 / 直连源新增「检测失效」:并发探测该源全部频道的连通性(带超时与重试,只取响应状态、不下载流量),实时进度,完成后列出失效清单(超时 / HTTP 状态码分类)与存活频道首字节延迟参考,失效频道可一键隐藏到当前配置档(只隐藏不删除,可随时在「已隐藏」恢复)。rtmp/rtp/udp 组播无法 HTTP 探测会跳过保留;带防盗链的源可能误报,请以实际播放为准(issue #88)
- 外部源支持排序(决定播放器里源1/源2 的顺序):源列表每个源新增 ▲/▼ 上移下移,列表顺序 = 播放列表输出顺序 = 播放器同名频道「源1/源2」顺序,把偏好的源排前面即成为默认源;调整后自动保存并重新生成播放列表。排序作用于自定义源之间(合并顺序仍为 咪咕 > 内置 > 自定义)(issue #94)
- 频道显示所属订阅源:「我的频道」每个频道名后新增所属源徽标(单源显示源名、多源显示数量、悬停看完整列表),频道详情弹窗也改为显示具体源名——多源管理一目了然。刻意不改输出给播放器的频道名,避免破坏同名聚合与 EPG / 台标匹配(issue #94)
- 修复凤凰卫视频道匹配不上外部 EPG:内置频道用长名(凤凰卫视中文台 / 资讯台),肥羊等外部 EPG 源用短名(凤凰中文 / 凤凰资讯),命名规则没打通导致节目单一直 0 命中;现繁简长短各种写法自动归一(实测凤凰中文 / 资讯分别命中 386 / 508 条节目),升级后无需改任何配置,等一次 EPG 刷新即可(issue #97)
- 修复公网地址被强制补端口:「系统配置 → 公网地址」填
http(s)://完整地址时不再强行拼上服务端口——内网穿透 / 反向代理走 80/443 标准端口的场景此前会被改成域名:1905导致播放不了;只填裸 ip / 域名仍自动补全协议与端口,老配置不受影响 - 修复抓取模式被站点反爬拦截:部分站点(如 vtvgo.vn)检测到自动化浏览器后整页白屏,导致「未能提取到m3u8链接」;抓取内核现已隐藏自动化特征、使用完整版 Chrome UA,并对需要点一次播放才开始拉流的页面自动尝试起播
- 修复外部源并发操作竞态:订阅导入 / 网页抓取进行中调整源顺序,可能把抓取结果写进相邻的另一个源并持久化;现已加操作守卫,且服务端回写改为按源稳定 id 定位(源被删则放弃写入),多标签页、自动刷新并发等场景一并免疫
- 批量把频道整块移到分组最前/最后:进入「批量管理」勾选频道后,工具栏新增「移到最前 / 移到最后」,把选中的一批频道作为整块挪到当前分组的组首或组尾(其余频道保持原顺序)——整源频道一次排到分组前面/后面,不用再逐个拖拽调整。若该分组当前为「名称自动排序」,需先切回「手动」排序(issue #83)
- 修复订阅源频道名/播放异常:部分订阅把
group-title写在#EXTINF逗号之后(如tvg-logo="…",group-title="央视",CCTV1综合),旧解析按「第一个逗号之后」取名,会把group-title="央视"一并当成频道名;脏名字回填进tvg-id="…"后破坏整行 EXTINF 语法,导致该频道显示错乱、播放异常。改为取「最后一个属性引号之后的逗号」后的部分,名字不再吞属性。已加入的源刷新一次即修正(issue #84) - 修复网页提取源播放地址被写坏:「网页提取」模式的源,若页面文本里的地址含
×tamp=、¬in=这类参数,浏览器解析网页时会把×、¬等不带分号的旧式 HTML 实体误解成×、¬等字符,坏地址随后被保存导致一直播不了;现已自动还原。已坏的地址无需手动处理,下次刷新该源即修正。仅影响网页提取(填「网页地址」抓取)的源,订阅源不受影响(issue #84) - 后台「播放地址」显示修正:频道详情弹窗里带
×tamp=的地址此前会被浏览器渲染成×tamp=(仅显示层,复制按钮与对外播放列表始终是正确地址);现已转义,显示与实际一致(issue #84)
- 按配置档选择源:每套配置档可勾选「启用哪些源」(咪咕 / 各内置源 / 各自定义源)——档管理弹窗每档新增「源」按钮批量勾选;添加/编辑自定义源时也可直接选「在哪些配置档显示」。多源同频道只要有一个来源启用就保留;先按源粗筛、再细化隐藏,多源上千频道不用再逐个隐藏(issue #29 / #68)
- 设置页拆二级标签:原「系统配置」页更名「设置」,内部拆为 系统配置 / 频道别名 / 自动分组 / EPG 聚合 / 用户管理 五个二级标签,不再一页到底;系统配置新增「保存并重启」按钮,需重启的配置一步生效(issue #72)
- 关键字分组规则支持上移/下移:多条规则「首条命中胜」,现可直接调序改优先级,不用删了重加(issue #69)
- 自动刷新间隔更准时:外部源「自动刷新间隔」此前每小时才检查一次,导致设定的间隔不精确(如设 60 分钟最坏要近 2 小时才刷);改为每 5 分钟检查、到点即刷(间隔最小仍为 60 分钟)(issue #73)
- 画质提示更清楚:后台「咪咕账号 / 画质」提示改为明确说明——游客(不填账号)最高 540p、填免费咪咕账号可到 720p、蓝光 1080p 及以上需 VIP,避免「游客上不去 720p」的误解(issue #76)
- 关键字自动分组:后台新增「关键字自动分组」规则——按频道名关键字(如
央视 ← CCTV)把「未分组」频道自动归到对应分组。自定义订阅源里没写分组、每次刷新又回到未分组的频道,配一次以后自动归位,不用再天天手动整理;只对「未分组」生效、不动源已分好的组,手动移动优先(issue #69) - 添加订阅源可设「默认分组」:订阅源表单新增「默认分组」,订阅里没自带分组的频道整体归到这个分组(频道自带分组的保持不变),适合整源单主题的情况;与上面的关键字规则互补、按需选用(issue #69)
- 设置布局优化:把「频道别名」「关键字自动分组」两张规则卡片从系统配置最底上移、与「统一频道显示名」聚在一起,更好找
- 频道列表显示「配对状态」+ 详情可直接设别名:「我的频道」列表每个频道用两个小圆点显示节目单 / 台标是否匹配(绿=已匹配 / 红=未匹配,上方有常驻图例说明);没匹配上的点开「频道详情」可直接填规范名给它设别名(追加、不覆盖已有),保存即时重算、不用去配置页;详情台标预览也放大了(issue #62)
- 订阅地址栏支持复制公网地址:在「系统配置 → 公网地址」填好公网域名:端口后,订阅栏新增「复制公网订阅 / 公网 EPG」按钮——分享给外网用户时,m3u 里的节目单地址(
x-tvg-url)也会是公网地址,不用再手动替换内网 IP(issue #62) - 频道别名支持「编辑」+ 归一支持繁体转简体:别名规则可直接编辑(不必先删再重输)、规则多了列表可滚动不撑长页面;EPG / 台标归一时会把常见繁体频道名(鳳凰衛視 / 緯來體育 等)转成简体再匹配,繁体源也能对上(issue #56 / #62)
- 修复 CCTV 4K / 8K 被错并进 CCTV4 / CCTV8:CCTV-4K / CCTV-8K 是独立的超高清频道,之前归一时丢掉了数字后的「K」、导致和 CCTV-4 / CCTV-8 撞成同一台互相合并,现已正确区分(issue #56)
- 内置「精选频道」增加本地兜底:远程(GitHub raw + 各镜像)全部拉不到时,回退读镜像里自带的频道列表,保证「无外网、镜像也挂」的环境下精选频道仍能加载(能联网的照常拿最新)
- 内置「精选频道」新增一批频道:体育(beIN SPORTS XTRA / ESPN / FIFA+ / NBC Sports NOW / NHL Network / Tennis Channel 等)、新闻(Reuters / Sky News / NHK World / France24)、纪实(National Geographic / Love Nature 4K)、影视(HBO / Cinemax / LMN 系列)、卫视(苏州4K)及央视付费频道等,开箱即用(「精选频道」为远程下发,已有部署无需重建镜像即可获得)
- 「我的频道」列表显示优化:频道名加宽页面与卡片后完整显示(不再被截断成两三个字);台标去掉背景框、非方形图自然显示、无台标则留空对齐;移除列表里不易懂的「节目单」配对图标,配对状态改到「频道详情」里以文字展示(issue #62)
- 修复关闭 H.265 / HDR 后不生效:咪咕流地址按频道缓存、且缓存键不含 H.265 / HDR,改了开关旧缓存仍发旧编码的流。现在后台「系统配置」保存后会即时清掉该缓存、无需等缓存过期或重启容器(issue #60)
- 内置「纬来体育」切换播放源:原
jrkan.com走 Cloudflare、国内不翻墙打不开,切到国内可达的jrs03.com(远程下发,已有部署自动切换、无需重建镜像)
- 统一频道显示名(按规则批量合并不同源同台命名):不同订阅源里同一个台的不同写法(
CCTV1/CCTV-1/CCTV1综合)可按规则批量统一成同一个显示名,同名后播放器能自动并为多线路。开关enableDisplayNameUnify(默认关、opt-in;环境变量menableDisplayNameUnify=true开启),后台「系统配置」可勾选、保存即时生效;手动重命名优先、不会被覆盖。另配套「频道别名」卡片,可视化维护channel-aliases.json(规范名 ← 别名),补内置规则兜不住的写法(issue #56) - 后台直观看到每个频道的配对状态 + 内联订阅地址:「我的频道」每个频道卡片现在显示台标缩略图(没台标的显示占位)和节目单徽章(绿=已匹配 / 灰=未匹配),不用再逐个点开详情核对;「频道详情」新增「配对状态」一行,已匹配会显示归一后的规范名(如「央视1套高清 → CCTV1综合」),消除「显示名特殊、看着像没匹配」的误解;顶部新增订阅地址栏,当前档的 m3u 与 EPG 地址一键复制,免点「编辑」(issue #38)
- 修复特殊命名的常见频道匹配不到台标:名字带信源 / 清晰度后缀的常见频道(如
CCTV1高清(电信)、湖南卫视(电信))此前能匹配上节目单、却匹配不到台标——台标按「显示名」取图、EPG 按「归一名」匹配,两边口径不一致。现台标改为按归一名匹配(CCTV1高清(电信)→CCTV1、湖南卫视(电信)→湖南卫视),频道显示名保持不变((电信)等信源标识仍可见);同时频道名归一增加运营商 / 信源后缀剔除(电信 / 联通 / IPTV…),非 CCTV 频道的 EPG 匹配也一并受益(issue #40) - 放出「节目单更新间隔」配置项:之前此项在「系统配置」里被隐藏,现在显示出来可调整,并加红色提示——不建议设太短(频繁请求咪咕可能触发风控),填了咪咕 Token 时建议 ≥8 小时,修改后需重启生效
- 修正 token 刷新请求的 Content-Type 拼写:请求头误写成
appsication/json,改回标准application/json,提升咪咕 token 刷新的可靠性
- 用户访问令牌 / 一人一源(测试阶段):可在后台「系统配置 → 用户管理」给每个家人 / 朋友生成独立的源地址
/u/<令牌>/m3u,支持单独停用、重置令牌、绑定不同频道档(一人一内容),且令牌只能拉源、进不了管理后台——分享源地址不再连带暴露后台。泄露可追溯到具体某人、可单独吊销,其他人不受影响。本功能仍在测试中,建议先小范围试用、欢迎反馈;不新增用户则对现有部署与现有链接零影响。可用enableUserTokens=false(或环境变量menableUserTokens=false)关闭 - 修复外部 EPG「加了源一个都匹配不上」:很多 EPG 源的频道 id 是数字 / 拼音代号、真实台名写在
<display-name>里,旧逻辑只按 id 比对导致 0 命中;现改为优先按 display-name 归一配对(并保留 id 兜底)。另注意:外部 EPG 只给咪咕没覆盖的频道补节目单,咪咕已有 EPG 的频道显示匹配 0 属正常(issue #53) - 自定义分组「隐藏分组」按钮加说明:自定义分组本就只支持「删除分组」(不提供隐藏,因为它不随源刷新复活),现在鼠标悬停会提示「请用删除分组、或用批量管理隐藏其中频道」,避免误以为能整组隐藏(issue #42 追问)
- EPG 聚合:多个第三方节目单源自动合并成一份:后台「系统配置 → EPG 节目单源(聚合)」可添加多个 XMLTV/EPG 源(支持
.xml与.xml.gz),程序定时拉取、把各源频道名归一到本项目规范名后合并进/playback.xml——某频道只要任一源里有就能补上节目单,咪咕已覆盖的频道始终优先、不被外部覆盖。默认开启、内置默认源、开箱即用,无需手动配;每个源可看抓取时间 / 频道数 / 已匹配数,可调刷新间隔与优先级,并支持「立即刷新」。即使关闭咪咕(enableMigu=false),外部 EPG 也能独立产出节目单。可用enableEpgAggregation(或环境变量menableEpgAggregation=false)关闭(issue #38) - 网页抓取源启动浏览器更稳:抓取类源(如纬来体育)现在会优先使用系统已安装的 Google Chrome / Chromium / Edge,裸跑(非 Docker)只要装了 Chrome 就开箱即用,不必再手动
npx puppeteer browsers install chrome或下载特定版本(该版本可能被部分系统的安全软件删除导致启动失败);也可用环境变量PUPPETEER_EXECUTABLE_PATH显式指定。Docker 部署不受影响(仍使用镜像内置 Chromium) - 频道详情布局优化:把「播放地址」与拉起播放器(IINA / VLC / PotPlayer)的按钮移到靠上位置(紧跟频道 ID、在移动 / 重命名 / 复制 / 台标等管理操作之前),并放大详情弹窗,常用的复制地址 / 拉起播放器不再被挤到底部
- 修复纬来体育源抓取失败:内置源「纬来体育」旧域名
jrkan66.com已失效,切换到jrkan.com的同名页面(该配置为远程下发,部署端会自动更新、无需重建镜像)
- 频道可一键复制到多个分组:「频道详情」新增「复制到分组」,可把自己的频道(外部 / 直连 / 订阅)同时放进多个分组(如把 TVB 复制到「亚太」和「香港」),每个分组里是独立的一份、隐藏 / 排序 / 删除互不影响;复制的是固定地址的独立频道、可在「外部源管理」删除(咪咕频道地址为服务端跳转、暂不支持)(issue #37)
- 支持导入本地 .m3u/.txt 文件批量加源:「添加自定义源 → 订阅模式」新增「本地文件 / 粘贴」,可选本地 m3u/m3u8/txt 文件、或直接粘贴内容批量导入,自动识别格式与 GBK/UTF-8 编码,全程不发起网络请求(issue #43)
- 后台上传 / 预览频道台标:「频道详情」可预览当前台标,并给没台标的频道直接上传图片(png/jpg/webp),存到
data/logos/、优先级最高、保存即生效,旁边可移除(issue #40) - 修复频道移动到其它分组后无法隐藏:从原分组移动到新分组的频道,之前在新分组里点隐藏会「提示已隐藏但实际仍显示」,再次批量移动 / 移回原组也会失效(隐藏 / 移动用错了分组标识);现统一按频道真实原始分组处理,已修正(issue #42)
- 频道名称 / TVG 规整(EPG 别名归一):异构外部源里五花八门的频道名(
CCTV-1/CCTV1HD/CCTV-1综合…)会自动把tvg-id/tvg-name归一到规范名(= 本项目 EPGplayback.xml里的频道名,即咪咕频道名),让外部源频道也能匹配上节目单(issue #39)。CCTV 系列规范名内置可用;卫视/港台等由运行时的 EPG 全集自动覆盖;可在数据目录放channel-aliases.json(格式{"规范名": ["别名1","别名2"]})自定义补充。只改 tvg、不动频道显示名。可用enableTvgNormalize(或环境变量menableTvgNormalize=false)关闭 - 修复分组重命名/新建时误报「分组已存在」:当某分组的频道被全部移动到别处、或该分组被隐藏/删除而在「我的频道」列表里已不可见时,它的名字之前仍被占用,导致把别的分组改名成它、或新建同名分组时报「分组已存在」却在列表里找不到它(issue #35);现改为只按「当前可见分组」判重——看不到的分组不再占名,但同名分组若当前可见仍会被拦截(防止误合并)
- 订阅源支持带账号密码的地址:添加订阅源时可直接填
http://用户名:密码@域名/x.m3u形式的地址,系统会自动转成 HTTP Basic 认证去拉取,不再因地址里带用户名:密码@而获取失败(注:仅认证「拉取播放列表」这一步;列表内各频道的流地址若也需认证,由播放器侧处理) - 后台默认给带
.m3u后缀的订阅地址:「我的频道」配置档里复制的订阅地址改为/interface.m3u(内容与/m3u完全相同),更适配「按后缀校验订阅链接」的 App(飞牛影视等),不用再手动改地址;裸/m3u仍然有效,已配好的地址无需更换 - 修复飞牛影视等无法订阅播放列表:
/m3u、/interface.m3u之前以媒体类型audio/x-mpegurl返回,会被飞牛订阅 / 浏览器当成「一个视频」去播放、而非当订阅文本解析,导致订阅失败;现改为text/plain返回(与 GitHub raw 一致),普通播放器不受影响 - 修复「分组内按名称排序」单独设置时不生效:当某配置档只设了某分组「排序:名称」、且没有其它任何自定义(隐藏 / 分组 / 重命名等)时,该排序之前不会生效,现已修复
本次为「多套配置档(大分组)」大版本:一套服务可维护多套个性化播放列表,给家里不同电视(大厅老人 / 卧室年轻人 / 茶室)各用各的;同时补齐外部频道台标、修复多个 issue、优化若干体验。
- 多套配置档(大分组):「我的频道」可新建多套配置档,每套独立保存隐藏 / 分组 / 排序 / 重命名,通过
/m3u?profile=<短名>(如/m3u?profile=woshi)访问、互不影响——不同电视填各自地址即可各看各的。底层频道 / EPG / 回看多档共享,新增电视不增加抓取成本。完全向后兼容:默认档就是原来的「我的频道」、地址仍是裸/m3u,老用户与已配好的电视零感知、无需改地址、无数据迁移 - 配置档后台集中管理:「我的频道」首屏只留「当前档:xx + 编辑」一个入口;点开弹窗统一切换 / 新建 / 改名 / 删除,每档显示各自访问地址可一键复制。新建即复制当前档(填中文显示名 + 选填英文地址短名),适合从一台派生另一台再微调。(「重置」按钮已从标题行移入此弹窗,且只重置当前档)
- 分组内按名称自动排序:「我的频道」每个分组可切「排序:手动 / 名称」;按名称时组内频道自动排序、新增台自动归位(中文按拼音、CCTV1/2/10 按数字),方便在电视上快速定位、找失效台
- 隐藏分组里单独/批量移动频道:隐藏的整组可直接进「批量移动频道」,把个别或多个频道移到可见分组,不用再先恢复整组、移完再重新隐藏
- 外部/精选频道台标:精选频道原本没图标,现按频道名自动补台标(默认用公共台标库 fanmingming,命中约 1/3);想补全的把
<频道名>.png放进数据目录的logos/文件夹即可,优先级高于公共库。可用环境变量mexternalLogoBase改地址或留空关闭 - 新增
/interface.m3u订阅地址:内容与/m3u完全相同、仅多.m3u后缀——解决飞牛影视等按后缀校验订阅地址、填/m3u报「链接不正确」的问题 - 后台可调 H.265 +「只有声音」引导:「系统配置」露出 H.265 开关并加说明——部分频道「只有声音、没画面」多因播放器/设备不支持 H.265(HEVC),关闭即回落到兼容性最好的 H.264(个别频道仍只有声音可再用
menableHDR=false关 HDR/Vivid) - 修复自建分组名中文乱码:保存「我的频道」配置时,中文名在网络分包边界可能被解码错(如「央视咪咕」→「央视??咕」),已改为按完整字节解码修复。 已经乱掉的分组名不会自动复原,升级后重新改名一次即可
- 修复「恢复所有频道」误报:之前点该按钮会弹「恢复失败: channelIds is not defined」(其实已恢复成功),现正确提示「已恢复 N 个频道」
- 「我的频道」显示总频道数:管理后台「我的频道」标题后实时显示当前总频道数(共 X 个频道),随频道增删 / 移动自动更新
- 内置源配置支持远程拉取:
built-in-sources.json改为运行时优先从仓库 raw 链接拉取(GitHub 镜像 + 数据卷缓存 + 镜像内置 三重兜底,国内拉不到也和纯本地一样稳)。纬来体育等需网页抓取的源,其抓取网址 webUrl 现在 push 即更新、无需重建镜像(webUrl 变更会自动重抓);可用环境变量mbuiltInSourcesUrl改源地址或置空关闭 - 内置单频道源并入「精选频道」统一管理:把 WildEarth / Red Bull / 4K 卫视等直链频道从
built-in-sources.json移入IPTV.m3u,built-in-sources.json仅保留需网页抓取的纬来体育;以后这些频道改IPTV.m3upush 即可。合并时按「同分组 名称+地址」去重,与未升级镜像并存也不会重复
本次将内置订阅源从依赖第三方链接切换为项目自维护,运行时不再依赖外部仓库的内容与可用性。
- 内置订阅源改为自维护:移除第三方 YueChan 的「港澳地方频道 / 全球频道」两个内置订阅,替换为项目自带、可自行维护更新的「精选频道」(央视 / 港澳台 / 地方 / 国际,约 115 频道;源文件
IPTV.m3u随仓库分发,走本仓库的 raw 链接定时刷新),不再依赖第三方仓库的内容与可用性 - 老用户自动清理「僵尸源」:升级后启动时一次性移除已退役的旧 YueChan 订阅(含其缓存频道),避免「换源后旧源残留、且因不在内置列表里而连开关都关不掉」;只跑一次,尊重用户后续的手动增删
- 核心内容开关独立成组:管理后台「系统配置」中的「启用咪咕源 / 内置单频道源 / 内置订阅源」三项从常规配置里独立出来,做成醒目的「核心内容开关」卡片(红色描边、标注默认开启并提示谨慎关闭),与端口 / 密码等普通配置项形成 UI 区分,降低误关导致频道大幅减少甚至空白的概率
- 移除后台「一键空白」按钮:该按钮仅是一次性勾掉上述三个开关、易误触,且与单独勾选重复,本版移除;需要空白部署仍可用环境变量
mblank或手动关闭三个开关实现
- 订阅源支持 txt 格式:订阅模式现自动识别播放列表格式,除 m3u/m3u8 外也支持 txt(diyp/TVBox:
分组,#genre#/频道名,地址,一个频道用#连多个备用源时取首个),无需额外设置;兼容 GBK/GB2312 编码 - 内容开关 / 空白部署:新增
mblank空白模式总开关 +menableMigu/menableBuiltInSources/menableBuiltInSubscriptions三个细粒度开关(环境变量或管理后台「系统配置」勾选;细粒度优先于mblank;默认全开,老用户无感)。一行mblank=true即得到纯频道管理的空白部署,或单独关掉自带的内置源 / 内置订阅源,避免与自建源同名分组撞车 - 后台「一键空白」:系统配置页新增上述三个开关与一键空白按钮,保存后自动重新生成播放列表、无需重启即时生效
- 内置订阅源可彻底删除:自带的「港澳地方频道 / 全球频道」订阅改为「只播种一次」,删除后重启不再自动复活(尊重用户删除);关闭内置订阅时抓取层与输出层一并跳过,不再无谓联网下载
- 修复 Docker 主版本标签:发布镜像的主版本滚动标签此前一直错打成
:1(实际是 v2.x),现修正为:2,并修bump-version.js使其今后自动更新该标签
- 单频道重命名:频道详情弹窗可给任意频道自定义显示名(清空或改回原名即恢复);只改显示名、不动
tvg-name,不影响 EPG 匹配。适合统一不同订阅源对同一频道的不同命名 - 批量移动到分组:「我的频道」批量管理模式新增「移动选中到〈分组〉」,可一次把多个选中频道移到指定分组
- 空数据不覆盖播放列表:某次刷新获取到 0 个频道时(通常是咪咕/网络不可达)保留上一次的好播放列表,不再用空文件覆盖,避免「我的频道」被清空且不自愈
- 管理页显示实际生效配置:系统配置接口改为返回「环境变量 + 配置文件 + 默认值」合并后的实际生效值——修复用环境变量(
muserId/mtoken等)配置时,换电脑/无浏览器自动填充的情况下表单显示为空的问题 - 环境变量覆盖提示:当某些配置由 docker-compose 环境变量设置时,系统配置页顶部醒目提示并列出受影响项(说明清空保存会回退到环境变量值、需改 compose)
- 检查更新日志优化:镜像逐个回退时的失败改为黄色警告,仅全部镜像失败才标红,避免成功的检查更新看起来像报错
- 分组上移/下移后选中跟随:之前移动分组后,左侧选中仍停在原位置(变成了被换上来的另一个分组),要重新点选才能继续移动;现在选中会跟随被移动的分组,可连续点上移/下移(例如把某分组一路移到最后)
- 配置持久化(升级不再丢配置):运行时数据(咪咕账号、外部订阅源、我的频道分组顺序/隐藏/归类/排序等)改为集中存放,并支持
mdataDir自定义目录。镜像现默认写入/migu/data并声明为数据卷,因此即使不改 compose,常规docker compose pull && up -d升级也会自动复用卷、不再丢配置;仍推荐用-v ./data:/migu/data绑定到宿主机便于备份。 从旧版(数据原在/migu)首次升级会迁移丢一次,升级前请先用docker cp备份system-config.json/my-playlist-config.json/external-sources.json(详见部署说明) - README 配置说明优化:拆分为「常用配置」(新手够用)+ 折叠的「完整配置表」;补全此前未文档化的环境变量(
madminPath/mrefreshToken/mdataDir/menableHDR/menableH265/mupdateInterval);部署示例补上持久化卷与init
本次为安全与稳定性大版本,并新增多项管理功能(自 v1.8.2 起的全部改动)。
- 单频道单独归类:频道详情弹窗新增「移动到分组」,可把任意单个频道移动到其它分组(选回原分组即取消归类);移出后即使原分组被删除,该频道仍保留在新分组
- 频道拖拽排序:「我的频道」频道行支持鼠标拖拽排序(原生实现、不引第三方库),替代反复点「上移/下移」,且不再丢失焦点
- 管理页面路径可自定义:可将后台地址
/admin改成任意名字(如/console)以增强隐蔽性,默认仍为admin;改名后裸/admin失效,api/player/favicon.ico为保留字,保存后自动跳转新地址 - 重构访问密码鉴权:
/api/*由校验可伪造的Referer头改为与页面一致的路径密码校验(密码模式下经/<密码>/api/...访问);未授权统一返回 403、未知接口 404、非 GET/POST 405 - 移除全局请求串行锁:旧实现用一个全局
loading标志把所有 HTTP 请求逐个串行处理,一次慢抓取/拉取会阻塞包括频道跳转在内的全部请求;现各请求独立处理。POST 请求体读取加 try/catch,客户端中途断开连接返回 400 而非拖垮进程,并新增进程级异常兜底 - 更新流程加单飞锁:定时刷新、启动初始化与后台保存外部源可能并发调用
update(),并发改写同一批临时文件会损坏interface.txt/playback.xml;现串行化执行 - 修复 Chromium 僵尸进程:网页抓取(
fetch模式)启动的 Chromium 在容器内不再堆积<defunct>僵尸进程——镜像引入tini作为 init 进程回收孤儿子进程(docker-compose.yml增加init: true),browser.close()增加超时与强杀进程组兜底(需重建镜像/容器后生效) - 修复订阅分组乱码:订阅内容改为按原始字节解码,自动识别 GBK/GB2312(中文 IPTV 列表常见)、UTF-8 及 BOM,分组名与频道名不再乱码
- 修复 HDR / H265 无法关闭:环境变量
menableHDR=false/menableH265=false之前因布尔与字符串比较问题始终无效,现可正常关闭 - 系统配置热更新:在管理后台保存系统配置后大部分项即时生效,无需重启(监听端口与节目更新间隔仍需重启)
- 可关闭 token 刷新:每月一次的咪咕 token 刷新(可能导致封号)现可通过
refreshToken配置 /mrefreshToken环境变量关闭 - 订阅导入报错优化:所有镜像均失败时聚合显示每条线路的真实失败原因(不再是空白
reason)并给出排查提示;新增cdn.jsdelivr.net备用镜像 - 健壮性与清理:配置文件改为原子写入(临时文件 + rename),避免并发/写入中断损坏 JSON;修复
fileUtil同步函数误传回调的问题;分组内频道按「名称 + 地址」去重;修复androidURL.js中delay未引入导致 302 重试逻辑失效的隐藏问题;移除ddCalcuURL中无用的 WASM 死代码
- 频道详情弹窗新增一键调起本地播放器按钮(VLC / IINA / PotPlayer),并按当前浏览器所在平台自动筛选可用按钮(Mac 显示 VLC+IINA,Windows 显示 VLC+PotPlayer,Linux 显示 VLC)
- 播放器启动改为纯客户端实现:v1.8.0 的后端
open -a方案仅在 Node 与客户端同机时有效,Docker/NAS 等远程部署场景完全失效;改为浏览器直接调用 URL scheme(IINA / PotPlayer)或下载.m3u文件(VLC,通过系统文件关联启动),与服务端所在平台彻底解耦 - 频道详情弹窗补充 VLC 行为说明:VLC 桌面版未注册 URL scheme,点击后会先下载一个
.m3u文件,需在浏览器下载栏手动点击打开,VLC 才会启动并播放 - 播放按钮改为品牌配色 + 内联 SVG 图标(VLC 橙 / IINA 紫 / PotPlayer 金),替换渲染不一致的 emoji
- 新增内置订阅源「全球频道」(
Global.m3u),与已有的「港澳地方频道」采用同一套处理方式;BUILT_IN_SUBSCRIPTIONS常量化,新装默认写入,已有安装启动时自动补齐缺失内置源 - 修复内置订阅源展开出的频道在详情弹窗被错误标记为"外部源":内置订阅的
subscriptionUrl通过/api/built-in-sources暴露给前端,按 URL 命中判定归属,确保「全球频道」「港澳地方频道」下所有频道统一显示为"内置源" - 管理后台"我的频道"新增点击可查看详情的提示:标题下方加入操作说明,频道名前增加 ⓘ 提示图标(hover 高亮),降低用户发现成本
- 移除失效的内置频道
新加坡亚洲新闻(CNA)与Bloomberg TV - README 重构:更名为 iPTV-Docker,将部署方式前置,新增 GitHub / Docker Hub 徽章与 Ko-fi / USDT 赞助入口
- 修复频道数据缓存污染导致内置源/外部源频道重复累积的问题:
getAllChannels合并时使用浅拷贝,导致内置源和外部源频道被写入咪咕缓存,每次自动刷新触发regenerateOnly重新生成播放列表时重复叠加(如纬来体育出现多条)
- 修复 Docker 环境下内置抓取源(如纬来体育)无法抓取的问题:Alpine Linux 的 Chromium 路径为
/usr/bin/chromium,而非/usr/bin/chromium-browser,导致 Puppeteer 找不到浏览器,抓取静默失败 - 修复安全问题:未授权访问
/admin或/player时,响应中会明文暴露访问密码;现改为返回 403 并仅提示密码路径格式 - 修复设置访问密码后,使用
/密码/admin路径无法访问管理后台的问题(路由匹配未覆盖带密码前缀的路径)
- 新增手动分组功能:可在「我的频道」中创建空分组,并在自定义源中直接使用这些分组
- 新增手动分组删除功能:删除后,该分组下的自定义直连/抓取频道会自动并入
未分组 - 调整分组操作边界:内置咪咕分组、订阅源分组仅支持隐藏,
未分组不允许重命名、删除或隐藏 - 修复自定义频道与分组管理问题:避免直连频道 ID 冲突导致“我的频道”丢失频道,并阻止重命名到已存在分组名
- 修复频道去重逻辑:将全局按频道名去重改为分类内去重,允许同一频道出现在不同分组中,与咪咕 App 行为一致
- 修复隐藏频道逻辑:
hiddenChannels改为按分组独立隐藏,避免跨分组误隐藏同名频道 - 频道详情弹窗优化:清理冗余播放按钮,保留复制地址功能
- 检查更新支持 GitHub 镜像回退:依次尝试原始地址、ghfast.top、gh-proxy.com、gcore.jsdelivr.net,解决国内 Docker 环境无法访问 GitHub 的问题
- 修复 jsDelivr 镜像 URL 转换错误导致该镜像始终 404 的问题
- GitHub 镜像列表统一维护(
GITHUB_RAW_MIRRORS),检查更新与订阅抓取共用,避免重复代码 - 修复管理页面版本号显示与实际版本不一致的问题
- 新增
bump-version.js版本号统一更新脚本,一条命令同步更新所有文件
- 新增外网访问协议自动检测:通过 NAS 转发(绿联、群晖、威联通等)或自定义域名访问时,自动使用 HTTPS 协议生成频道地址,解决外网无法播放的问题
- 内网/外网/自定义域名三条路径互不影响,内网访问不走外网,避免上行带宽浪费
- 根路径
/默认返回 M3U 格式(audio/x-mpegurl),APTV 等客户端可直接用根地址导入
- 新增分组重命名功能:可自定义分组名称,重命名后同名分组自动合并,支持重置恢复原名
- 新增分组隐藏通配符支持:在配置中使用
体育-*可一次性隐藏所有体育赛事分组 - 新增检查更新功能:在「关于我们」页面可一键检查是否有新版本
- 重置功能改为弹窗选项式,支持分项重置(重命名 / 隐藏 / 排序),避免误操作
- 修复频道详情来源识别错误:正确区分咪咕源、内置源、外部源
- 修复编辑按钮在非外部源频道上错误显示的问题
- 修复订阅类型外部源编辑时无法定位到正确源的问题
- 修复
/txt端点未应用用户配置过滤的问题 - 移除冗余的「保存配置」按钮(各操作已自动保存)
- 修复 Docker 环境下播放列表文件写入不完整的问题:生成
interface.txt时使用了异步文件写入(fire-and-forget),导致文件重命名时部分分组尚未写入完成,造成港澳台地方频道(浙江、河南、广东、宁夏、广西、云南等)分组缺失;现已改为同步写入,确保文件完整性 - 优化日志输出:精简定时检查源更新、频道请求等高频日志,大幅减少 Docker 容器日志量
- 修复订阅源(如港澳台频道)首次获取失败后无重试机制,导致频道缺失的问题;现在启动 60 秒后自动重试
- 修复订阅源获取失败时不保留已有缓存数据的问题;失败时保留旧频道数据,引入指数退避重试机制
- 修复外部源每小时定时检查时无条件写入配置文件的问题;现在仅在有源被实际更新时才保存
- 启动时新增游客模式提示:未配置咪咕账号时提示最高画质为 720p
- README 新增管理后台截图展示
- 新增订阅模式(外部源第三种模式):支持导入 m3u/m3u8 播放列表 URL,一次性批量添加多个频道,支持自动定时刷新
- 新增内置港澳台及地方频道订阅源(港澳地方频道),默认启用,开箱即用
- 管理后台新增订阅模式 UI:支持填写订阅名称、m3u 地址、刷新间隔,一键导入并保存
- 更新
external-sources.json.example示例文件,新增订阅模式配置示例
- 版本号升级到
1.2.8,同步更新package.json、package-lock.json、README 展示版本及 Docker workflow 镜像版本标签 - 新增 GPL-3.0 开源许可(
LICENSE),并在文档中补充 License 说明 - 清理运行时缓存文件
pe-cache.json出仓库,并加入.gitignore防止误提交
- 修复内置抓取源 URL 刷新后重建播放列表(regenerateOnly 模式)会丢失体育-昨天/今天/明天频道的问题;现在
updatePE运行时同步保存赛事缓存,快速模式下直接从缓存恢复,无需重新调用 API
- 修复内置抓取源(如纬来体育)URL 刷新后未重新生成播放列表,导致 APTV 等客户端拿到的仍是过期链接的问题;现在每次抓取到新 URL 后会立即以快速模式重建
interface.txt - 新增内置频道 Bloomberg TV(国际分组)
- 新增内置频道 Eurosport 4K(体育分组)
- 新增内置频道 Red Bull TV(体育分组)
- 修复内置抓取源(如纬来体育)因 m3u8 链接过期导致无法播放的问题,将自动刷新间隔从 240 分钟缩短为 60 分钟
- 修复内置抓取源抓取失败时不清除旧缓存的问题,抓取失败时现在会自动清除过期缓存,避免继续使用无效链接
- 内置源管理功能
- Web 管理后台优化
如果 iPTV 为你的家庭影音体验带来了帮助,欢迎点亮一个 ⭐ Star、分享给朋友,或通过以下方式支持项目继续维护。
| ❤️ GitHub Sponsors | ☕ Ko-fi | 💰 USDT (TRC20) |
|
|
|
TArpwDgewYSFCYX6XoJ6drwpEU6UGBw5yqOnly via TRON (TRC20) network |
Warning
- 本仓库代码按 GPL-3.0 授权,许可证之外不附加任何使用限制:GPL 允许出于任何目的使用、修改与再分发(含商业用途),条件只有遵守 GPL 条款。以下各条针对的是经本软件接触到的第三方内容、数据与账号的权利,属于法律与合规提示,不是对软件本身的附加许可条件。
- 不得将未获权利人授权的第三方频道与节目内容用于售卖订阅、公开转播、商业运营或其他未经授权的用途;这一限制来自内容权利人与所在地法律,与软件许可证无关。
- 本项目提供的是频道管理、地址解析与代理分发软件;除项目自制的使用公告短片外,项目服务器不托管第三方音视频节目。仓库及运行时可能包含或获取公开可访问的播放地址、频道名称、台标与节目单元数据。公开可访问、技术上可播放或经过可用性检查,均不等同于内容属于公有领域或已获得复制、传播、转播及商业使用授权。
- 音视频内容、频道标识、平台名称和商标的权利归各自平台、制作者及其他权利人所有;文中提及第三方名称仅为说明兼容性,不表示合作、认可、授权或隶属关系。项目的 GPL-3.0 许可只适用于本仓库代码,不授予任何第三方内容、商标、接口或数据的使用权。
- 使用者应自行确认所在地区法律、内容授权范围和各平台用户协议,只接入本人拥有、合法订阅或已获明确授权的来源。不得利用本项目未经授权绕过登录、付费、DRM、地域限制或其他访问控制,不得共享、盗用或转售账号与凭据。
- 互联网来源可能随时变更、下架或被限制,项目不对其合法性、准确性、持续可用性或适销性作任何保证。部署者对其添加、启用、公开访问和转发的来源承担全部责任;如无法确认权利状态,请关闭对应模块或使用
mblank=true从空白配置开始。
如果你是内容权利人或其合法代理人,并认为本仓库收录的某个地址、频道元数据或抓取规则侵犯了你的合法权益,请通过 GitHub Issue 提交通知,标题注明「版权 / 侵权」,并尽量提供:
- 权利人及联系人身份、有效联系方式,以及代理关系说明(如适用);
- 涉嫌侵权的具体作品、频道、URL、仓库文件或模块名称;
- 权利归属或授权范围的必要证明;
- 希望采取的处理方式,以及你确认通知内容真实准确的声明。
项目维护者收到信息完整、能够明确定位的通知后,会在合理时间内核验,并视情况移除地址、停用抓取规则或采取其他必要措施。请勿在公开 Issue 中提交身份证件、账号密码、Cookie、Token 等敏感信息;需要补充非公开材料时,可先在 Issue 中留下不含敏感信息的联系方式。
本仓库代码以 GNU General Public License v3.0(SPDX 标识 GPL-3.0-only)授权,全文见 LICENSE。Copyright © 2026 Akira Le。
这意味着:
- 可以出于任何目的使用、运行、研究和修改本软件,也可以再分发,包括商业用途;许可证之外不附加任何使用限制。
- 分发修改版或衍生作品时(包括以 Docker 镜像等形式分发),须同样以 GPL-3.0 授权并提供对应源代码,保留原有版权与许可声明,并注明所做修改。只在自己的服务器上运行修改版而不对外分发,不触发此义务。
- 许可证只覆盖本仓库的代码。 通过本软件整理或获取的播放地址、频道名称、台标、节目单以及音视频内容,权利归各自权利人所有,GPL-3.0 不授予它们的任何使用权;相关合规提示见免责声明,那些提示是法律与内容权利层面的说明,不是对本软件的附加许可条件。
本项目使用的第三方组件及其许可证:
| 组件 | 用途 | 许可证 |
|---|---|---|
| undici · node-fetch | HTTP 请求 | MIT |
| puppeteer | 无界面浏览器,供需要执行网页脚本的抓取模块使用 | Apache-2.0 |
| qrcode | 后台扫码登录二维码 | MIT |
| hls.js · mpegts.js | 网页播放器解码 | Apache-2.0 |
| DPlayer | 网页播放器界面 | MIT |
以上许可证均与 GPL-3.0 兼容。mpegts.js 随仓库一起分发,其许可证文本见 web/vendor/mpegts-LICENSE.txt;其余组件由 npm 或 CDN 引入,许可证随各自软件包提供。


