akiralereal/iptv

开箱即有 800+ 可稳定流畅播放频道的自托管 IPTV 直播源管理与分发系统,聚合了央视频、咪咕、央视、卫视、凤凰卫视、亚太、国际、地方台、体育赛事、B 站直播、斗鱼直播、虎牙直播等,以及自定义抓取源和订阅,并提供 EPG 节目单与聚合功能;另外还自带 GUI 可视化管理后台,支持 Docker Compose 或 Node.js 运行,适合 NAS 与家庭服务器。

JavaScript

794

541 commits

updated Sep 19, 2026

See the code
bilibili
bilibili-live
cctv
epg
iptv
iptv-channels
iptv-free
iptv-links
iptv-live
iptv-m3u
iptv-m3u8
iptv-playlist
live
live-tv
livetv
m3u
m3u8
migu
nas
yangshipin

README

📺 iPTV

把分散的直播源,变成一套真正属于你的频道系统

自托管 · 模块化 · 可视化 · NAS 友好

GitHub Stars Docker Pulls License Sponsor

🐳 Docker 部署教程 · 前往 Docker Hub →

推荐通过 Docker 在 NAS / 服务器上部署,镜像:akiralereal/iptv:latest

当前版本:v4.15.0 · 产品预览 · 频道覆盖 · 内容来源 · 功能说明 · 更新日志

iPTV 是一个面向家庭影音与 NAS 用户的模块化 IPTV 直播源管理与分发系统。它内置央视频、咪咕、B站、虎牙、斗鱼及多地区广电等抓取模块,也能接入需要网页解析的内置源、维护者筛选的公开独立源、自定义直连地址和 M3U/TXT 订阅;所有来源统一完成聚合、去重、编排,再输出干净的播放列表与 EPG 节目单。

[!IMPORTANT] 本项目是自托管的软件工具。除项目自制的使用公告短片外,不托管第三方音视频节目;仓库及运行时可能整理互联网上公开可访问的播放地址与频道元数据,但“公开可访问”不代表内容属于公有领域,也不代表已获得复制、转播或商业使用授权。请仅在获得合法授权的范围内使用;如你是权利人并认为相关条目侵权,请按版权与侵权处理提交下架通知。

🖼️ 产品预览

我的频道 · 所有频道一处编排

我的频道主面板

源管理 · 每个内容来源独立、透明、可控

源管理

播放器实况 · 输出标准订阅,接入常用客户端

实况播放效果

✨ 为什么选择 iPTV

📺 开箱即用🧩 模块化源管理🪄 可视化编排
默认聚合 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 南京、青岛城市直播、上海慢直播等景观频道;数量随平台在线状态动态变化
体育赛事体育频道、赛事直播,以及昨天 / 今天 / 明天的动态赛事频道
亚太与国际精选列表提供 50 个经实验台验证的固定直连频道;独立模块另提供 YTN、NHK World 两个需要动态解析的公开频道
综合内容影视、文旅、教育、少儿、娱乐时尚等分类频道

播放列表首位默认提供项目自有的「公告」分组,内含三条自制短片:“欢迎使用 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站支持扫码登录以使用本人账号可访问的画质,虎牙、斗鱼支持匿名公开直播
电视与赛事平台咪咕、体育赛事自动整理频道与节目单,并按账号权限、设备兼容性和平台接口状态选择可用画质;需要登录的能力仅使用部署者本人提供的凭据
凤凰卫视凤凰资讯、凤凰中文、凤凰香港,归入 香港仅三个电视直播频道;游客 480p,登录普通凤凰秀账号可获取 720p / 25 帧,无需付费会员。后台支持导入 Token / Cookie 并持久保存,播放时取新签名,原始 HTTP-FLV 由本机转发。内置精选列表里的三条第三方凤凰线路同在「香港」,与本模块三台并列保留作备用线路,不合并、不顶替;播放器按名聚合时本模块源排在前面
香港卫视香港卫视一路电视直播,归入 香港无需登录、无需配置;播放时先问源站当前在播的是哪一路,再换这一路的 HLS 入口。服务端把入口清单拍平成媒体清单后只中继清单,媒体分片由播放器直连上游 CDN。实测为 1280×720、H.264/AAC;节目单由默认 EPG 源直接覆盖
大爱电视大爱一台、大爱二台,归入 台湾无需登录、无需配置;官网移动版直播页写死的两条官方 HLS,长期不变也不带签名,但上游按 Referer 防盗链——清单和分片裸请求一律 403,故一律由本机补齐官网请求头后全代理。实测均为 1280×720、H.264 High / AAC-LC,30 帧、约 3 Mbps
GOOD TVGOODTV(综合台)、GOODTV2(真理台),归入 台湾无需登录、无需配置;官网播放页写死的固定 HLS,没有签名也没有 Referer 门。官网播放器备了 CloudFront、Akamai 两条线路(同一源站、分片序号一致),播放时两线竞速择优,当前线路取不到清单会在同一次轮询里当场换线。其中 CloudFront 的 WAF 按播放器标识放行(浏览器 / VLC / ExoPlayer 通过,ffmpeg、okhttp 一律 403),播放器用什么标识不由本项目决定,因此清单与分片统一走本机全代理回源。取 1920×1080 档(约 4 Mbps,H.264 Main / AAC-LC,29.97 帧),该档取不到时自动退回 1280×720
北京广播电视台北京卫视、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
安徽广电安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道共 7 路无需登录、无需配置;按「安徽视讯」App 的公开算法解出鉴权密钥并逐路生成两小时签名,播放器每次轮询都重新拉取滚动清单;上游 CDN 只放行 App 播放器标识,清单与分片均以 App 标识经本机全代理
新疆广电新疆卫视、维吾尔语新闻综合、哈萨克语新闻综合、体育健康、少儿共 5 路无需登录、无需配置;播放时从丝路视听网当前 Nuxt 包静态解析当天公开签名配置,再调用源站接口签发约一小时有效的 HLS。服务端中继实时清单,媒体分片默认由播放器直连上游 CDN,也可用全代理订阅;源站标记禁播且实测返回 404 的 XJTV-4、XJTV-5 不纳入频道表
吉林广电6 路省级频道、9 路地方台和 13 路慢直播,共 28 路无需登录、无需配置;常规电视归入「吉林」,慢直播归入「吉林风景」。省级频道和季节性景观在播放时从源站加密接口获取短效 HLS,固定地方台和固定景观使用已验证的 HTTPS 入口;清单、密钥和媒体分片均由本机全代理
内蒙古广电内蒙古卫视、蒙古语卫视等 8 路自治区频道,以及 12 路盟市频道,共 20 路无需登录、无需配置;20 路全部归入唯一的「内蒙古」分组。播放时按奔腾融媒源站公开协议调用加密频道接口获取动态地址,并为清单、密钥和媒体分片补齐防盗链请求头后由本机全代理
亚洲与国际直播2 个动态公开频道:YTN、NHK World;另有 50 个固定直连频道位于精选列表的独立标记区块动态频道由独立零配置模块在播放时从平台接口获取当前 HLS,并由本机代理清单、密钥与媒体;固定频道使用实验台验证过的原始 HLS 地址,不经过该解析模块,避免重复和额外转发开销
广电抓取北京、重庆、四川、贵州、安徽、大连、广东、广西、福建、江西、甘肃、新疆、云南、吉林、黑龙江、内蒙古、海南、河北、湖北、河南、湖南、江苏、辽宁、南京、青岛、山东、上海、深圳、浙江等从各广电源站、公开接口或客户端公开直播能力获取当前地址;短效签名、防盗链、加密清单和 CDN 代理按模块分别处理
景观直播央视网「直播中国」、吉林风景、美丽河北、Live 南京、上海与青岛城市景观等按源站当前在线状态动态收录;离线、下架或源站调整时会自动减少,不以固定频道数承诺可用性
内置网页抓取源如纬来体育等需要从公开页面解析当前地址的单频道源内置抓取规则与定时刷新;每个源可配多个入口地址,主站打不开或抓不到时自动换备用地址重试,清单本身通过远程配置更新(改仓库文件即生效,无需升级镜像)。每个源均可单独关闭
精选公开独立源体育、国际、亚太、影视、纪实、音乐、娱乐时尚等项目维护的「精选频道」列表,收集公开可访问且经可用性检查的独立播放地址,并提供远程更新与本地快照兜底;可访问性检查不等同于版权授权审查
用户自有来源M3U8 直链、网页提取、M3U/M3U8/TXT 订阅完全由部署者自行添加、排序、分组和控制在哪些配置档中显示,适合接入自有设备、合法订阅或已获授权的直播源

[!NOTE] 所有内置抓取模块、内置网页抓取源和精选频道都能在「🌐 源管理」中独立关闭;需要完全空白的频道管理器时可使用 mblank=true。平台名称及商标仅用于说明兼容性,本项目不隶属于、也不代表上述平台或内容权利人。

当前版本更新内容

v4.15.0 更新内容

本次为「新增香港、台湾与黑龙江、云南共 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」,用户实际访问或登录的一侧称「站点 / 网页端」。仅措辞调整,功能、配置与订阅地址均未变动

完整更新历史见下方 更新日志

📑 目录


🚀 快速开始

推荐使用 Docker Compose。只需要一个配置文件和一条启动命令,几分钟即可拥有自己的 IPTV 服务。

Docker 镜像:akiralereal/iptv · 查看版本标签。下面使用 latest 标签;使用 NAS 图形化容器管理器时,也可直接搜索 akiralereal/iptv,按下方配置设置端口和数据目录。

1. 创建配置文件

创建 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: always

2. 启动服务

docker compose up -d

升级时执行:

docker compose pull && docker compose up -d

3. 打开管理后台

部署完即可访问:

用途地址
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 服务端;其他可直连频道不受影响。


❓ 常见问题

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;换了路径或域名的仍会。想让某个台以后都别出现,用「我的频道」里频道旁的「屏蔽」按钮,或右上角「🚫 屏蔽规则」按名字配一条:规则只看名字,源换址、频道每天重建都照样生效,删掉规则即恢复。像「体育-昨天 / 今天 / 明天」这类每天重建的分组,逐条隐藏没有意义,对其中一个分组点「隐藏分组」时会提议把同前缀的一起隐藏,以后新出现的也自动挡掉。

台标或节目单缺了一些,怎么补?

台标:没有自带台标的频道按名字到公共台标库取图,库里没有的会留空(播放器画自己的占位图,不再裂图)。点「我的频道」右上角「🖼 缺台标」可以列出当前档里所有没图的频道,逐个点进详情上传;或直接把 <频道名>.png 放进数据目录的 logos/,优先级最高。景观、慢直播这类本来就不是台名的,留空即可。

节目单:默认 EPG 源为 https://e.erw.cc/all.xml.gz(521 个频道、9 天节目)。老部署里如果自己改过默认源的名字,程序不会替你换地址,「设置 → EPG 节目单源」里那条会有一行提示;港台频道、各地景观和 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 个会员频道,45 秒无人请求后释放。首次自动登录目前只支持有桌面环境的本机运行: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 都等同登录态、请勿外传。

环境变量参考

🔹 常用配置(够大多数人用)

变量名默认值说明
mport1905容器监听端口
mhost公网 / NAS 访问地址,如 http://192.168.1.100:1905
mpass访问密码(可选),设置后访问 http://ip:port/密码/...
mdataDir/iptv/data数据持久化目录(镜像已默认此值并声明数据卷);建议 -v ./data:/iptv/data 绑定宿主机便于备份。老部署挂的 /migu/data 继续兼容,无需改动
📋 完整配置表(全部环境变量)
变量名默认值类型介绍
mport1905number本地运行端口号
mhoststring公网/自定义访问地址
格式http://ip:port
mpassstring访问密码 大小写字母和数字
添加后访问格式 http://ip:port/mpass/...
mdataDir镜像内 /iptv/data;node 直跑为当前目录string配置 / 数据持久化目录(仅环境变量可设
旧镜像路径 /migu/data 继续兼容:新路径无数据、旧路径有数据时自动沿用旧路径
madminPathadminstring管理页面自定义路径,如填 console 则用 /console 访问后台(/admin 失效)
保留字 api/player/favicon.ico 与非法值会回退 admin
muserIdstring咪咕模块的账号 ID(仅需高画质 / 会员内容时配置)
推荐改在后台模块卡片里配置(附书签工具一键获取)
mtokenstring咪咕模块的登录 token(同上)
mrateType3number咪咕模块画质
2: 标清 (480p)
3: 高清 (720p)
4: 蓝光 (1080p,需VIP)
7: 原画 (1080p+,需VIP)
9: 4K (2160p,需VIP)
mbiliSessdatastring哔哩哔哩模块的登录态 SESSDATA(不填限「超清」,填了解锁「原画」)
推荐改在后台模块卡片里扫码登录
mBtimeCookiestring北京时间站点登录 Cookie(仅北京 9 个电视频道需要;公开活动 / 慢直播免登录)
推荐改在后台「源管理 → 北京广播电视台」配置
menableHDRtrueboolean是否开启 HDR(vivid/4kvivid)
false 关闭
menableH265trueboolean是否开启 H.265 原画
有兼容性问题(如只有声音没画面)时设 false 关闭
menableClientDispatchfalseboolean客户端就近取流:服务器与观看设备不同运营商导致抓取频道跨网卡顿 / 播不了时设 true
同网部署无需开启
mupdateInterval8number节目单 / 源更新间隔(小时),不建议过短
mexternalLogoBasehttps://gcore.jsdelivr.net/gh/taksssss/tv@main/icon/string外部 / 内置 / 抓取模块频道没有自带台标时,按频道名到公共台标库兜底取图的基址(默认 taksssss 台标库的 jsDelivr 镜像,3266 个台标,大陆直连可达)
换成其它库需保证 <基址><频道名>.png 可访问;留空关闭兜底。本地 logos/ 里的图始终优先
mexternalLogoIndex跟随 mexternalLogoBasestring台标库的「频道名 → 图片」索引地址。有索引才知道库里到底有没有这张图:没有就把台标留空、由播放器画占位图,而不是写一个必定 404 的地址(裂图)
索引每 7 天下载一次并落盘缓存,拉不到时自动退回按名兜底。自定义了 mexternalLogoBase 时默认关闭(别人的清单对不上你的库);留空同样关闭
mrefreshTokentrueboolean是否每月自动续期平台 token
可能导致封号,可设 false 关闭
mblankfalseboolean空白模式总开关,设 true 后下面三项内容开关默认翻转为关
细粒度开关显式设值时优先于本项
menableMigutrueboolean是否启用咪咕抓取模块(CCTV/卫视 + 体育赛事 + EPG)
false体育赛事、回看、对应 EPG 不可用
menableBuiltInSourcestrueboolean是否启用内置单频道源(纬来体育 / Red Bull / 4K 卫视 等)
menableBuiltInSubscriptionstrueboolean是否启用内置订阅源(精选频道)
已添加的可在「源管理」删除,删后不复活

mdataDir/mport 外,多数项也可在后台修改(模块项在「🌐 源管理」,平台级项在「设置」页),保存即时生效(端口与更新间隔需重启)。升级用户:环境变量与旧配置继续有效,首次启动自动迁移,无需改动。

📺 多套配置档(给不同电视各一套)

后台「📺 我的频道」标题行右侧可新建 / 切换配置档,每档独立维护隐藏 / 分组 / 排序 / 重命名,互不影响;每台电视填各自的地址(每档底部可复制),如 http://你的IP:1905/interface.m3u?profile=woshi。各档共享同一份底层频道与 EPG,新增电视不增加抓取成本;默认档地址不变、老用户零感知。

🧹 空白部署 / 纯频道管理

只想用自己的源时,用内容开关关掉自带内容(也避免同名分组撞车):

需求配置
彻底空白,自己加源mblank=true
空白但保留抓取核心mblank=true + menableMigu=true
只去掉自带的额外源 / 订阅menableBuiltInSources=false + menableBuiltInSubscriptions=false

也可在后台「🌐 源管理」直接开关各卡片,保存即时生效。关闭 menableMigu 后体育赛事、回看与对应 EPG 不可用,属预期表现。

📡 公网地址 (mhost)

反向代理 / 域名访问 / 对外分享时填写(如 http://yourdomain.com:1905),仅内网使用留空即可。系统自动按访问来源选择播放列表里的地址:内网访问用内网地址,反代访问(带 X-Forwarded-For)用配置的公网地址;填 http(s):// 完整地址时不会强制补端口。

🔐 访问密码 (mpass)

设置后所有服务都要在 URL 带密码路径:http://ip:port/密码/interface.m3uhttp://ip:port/密码/admin 等,播放列表内的频道链接自动注入密码路径,未授权访问返回 403。

🔧 本地运行(不用 Docker)

需要 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)。


更新日志

v4.15.0 (2026-09-13)

本次为「新增香港、台湾与黑龙江、云南共 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」,用户实际访问或登录的一侧称「站点 / 网页端」。仅措辞调整,功能、配置与订阅地址均未变动

v4.14.0 (2026-09-09)

本次为「隐藏不再失效、按名字屏蔽与台标 / 节目单修复」版本:隐藏、重命名、归类、排序四项个性化设置不再因为源换签名地址而静默作废;新增按名字长期屏蔽的规则和一次隐藏整批同前缀分组的入口(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 授权、许可证之外不附加任何使用限制;「不得售卖订阅 / 公开转播」等限制针对的是未获授权的第三方内容,来自权利人与所在地法律,不来自本软件许可。补充第三方组件许可清单

v4.13.0 (2026-09-07)

本次为「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.htmlnpm 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)。升级后重启即生效,旧缓存里的直链会在启动抓取时被替换,订阅地址无需更换

v4.12.0 (2026-09-06)

本次为「央视频会员频道在 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 的六步演示

v4.11.0 (2026-09-06)

本次为「央视频登录态导入与安徽广电」版本:央视频会员频道新增「获取央视频登录态」书签工具,在自己电脑的浏览器登录官网后点一下、把内容粘贴到后台导入即可,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.htmlnpm run generate:ysp-guide 生成,生成脚本已支持多目标
  • 新增安徽广电 7 路官网直播:安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道全部纳入独立「安徽」分组,免登录、零配置、默认开启。服务端按「安徽视讯」App 的公开算法解出直播鉴权密钥、逐路生成两小时有效的腾讯云签名,并让播放器每次轮询都重新拉取滚动清单(官方清单只含 3 个 2 秒分片,复用旧清单几秒就会卡住)。该 CDN 按播放器标识放行:App 自己的 ijkplayer 能过,VLC / Apple / ExoPlayer 等常见播放器标识一律 403,因此清单与分片统一由本机以 App 标识全代理,播放器不直连 CDN;为此代理层允许模块用函数形态请求头指定 User-Agent,其余模块行为不变。官网旧接口的 8 路地址实为「网站直播已下线」占位画面,未收录;9 路安徽广播不进电视列表
  • 文档:README「产品预览」三张截图换成当前版本的后台主面板、源管理与实况播放效果

v4.10.0 (2026-09-06)

本次为「央视频会员频道、后台改版与地方台大扩充」版本:央视频在 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)

v4.8.1 (2026-09-05)

本次为「咪咕取流日志整理」版本:成功取流只打一行「咪咕取流:档位」,账号没订购某条内容的产品但流已正常下发时不再报红字,只给试看时改黄字并写明秒数,红字只留给真正拿不到地址的情况。升级镜像即可生效,现有订阅无需重新添加。

  • 咪咕取流日志改为一行摘要,不再把正常播放报成红字:此前每次取流打「登录认证成功」,账号没订购该内容的产品时再补一行红字「认证失败 视频内容不完整 可能缺少相关VIP」——可那时流已经正常下发(内容本身允许播放,或咪咕只给了几分钟试看),看着像出错其实什么都没坏;真正要紧的「拿到哪一档、试看多少秒」反而不打,issue #117 排查时全靠播放器截图。现在成功取流只打一行「咪咕取流:臻享 超高清」,游客标「游客」,命中缓存标「缓存」;只给试看时改黄字并写明秒数,如「咪咕取流:臻享 超高清 · 仅试看 360 秒」;红字只留给拿不到地址的情况

v4.8.0 (2026-09-05)

本次为「咪咕 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 起内置精选列表的港澳台频道已全部按「香港」「台湾」归组,「亚太」分组不再有任何内置条目,凤凰秀官方三台再复制一份进去只剩一个孤零零的空壳分组。现在三台只保留在「香港」,与内置的三条第三方凤凰线路并列,仍是置顶不顶替;外部订阅自带的「亚太」分组及其中的凤凰条目原样不动,播放器按名聚合时官方源照旧排在前面

v4.7.0 (2026-09-05)

本次为「启动提速与直播源整理」版本:纬来体育等网页抓取源改为在首份播放列表生成之后在后台抓取,启动不再被它拖住十几分钟,单个入口抓不到最多约 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 的频道会和旧缓存同时出现,旧缓存那份还会生成永远解析不了的本地代理地址。现在每次加载缓存都按模块当前认领范围收口、落盘并打印清理数量;不带延迟解析引用的普通缓存频道不受影响

v4.6.1 (2026-09-05)

本次为「亚洲直播代理修复」版本:亚洲与国际直播模块改回清单、密钥与媒体全部由本机代理,修复 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 已接入央视频」提示

v4.6.0 (2026-09-05)

本次为「亚洲与国际直播接入」版本:新增零配置的亚洲与国际直播模块,一次带来 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、央视付费频道、美国影视等一批第三方转流条目;「体育」补充纬来体育,「台湾」补充纬来日本、纬来育乐。该列表由运行中的实例直接从仓库拉取,不用升级镜像即已生效

v4.5.0 (2026-09-03)

本次为「凤凰卫视接入」版本:新增凤凰卫视三台(登录本人凤凰秀账号即可 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 同源

v4.4.0 (2026-09-02)

本次为「低配机稳定」版本:修复多个无头 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

v4.3.0 (2026-09-01)

本次为「央视频接入」版本:新增央视频官方直播模块,免登录、零配置、默认开启,一次带来 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」公告频道,展示使用方式、版权提醒和侵权联系说明,不引用任何第三方节目素材;为确保每份对外分发的订阅都保留必要提示,该系统频道不支持隐藏、删除、移动、排序或重命名

v4.2.1 (2026-08-31)

本次为「全代理诊断与加固」版本(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,不再把未改写清单透传给播放器;代理地址表超上限时不再优先淘汰最活跃频道的地址

v4.2.0 (2026-08-30)

本次为「省市台与景观直播扩容」版本:新增 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+ 体育赛事在「体育」与「央视」中各保留一份;其余咪咕跨分组重复项仍照常去重

v4.1.0 (2026-08-29)

本次为「省级台大扩容」版本:一次性新增 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)

v4.0.1 (2026-08-23)

本次为「源模块化」大版本:咪咕从写死的内核收编为第一个「抓取模块」,新增哔哩哔哩直播模块,全部内容来源统一进顶层「源管理」。升级完全向后兼容——存量配置自动迁移、老环境变量继续生效,唯一可感知的变化是抓取频道的分组归一(见下)。

  • 全新「源管理」与抓取模块架构:抓取模块、内置源、精选频道、自定义源聚合为一页卡片网格,每张模块卡片自带独立开关 + 配置 + 健康状态;原「系统配置」里的平台账号 / 画质 / 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。

v3.17.0 (2026-08-19)

  • 配置导出 / 导入(备份 · 换机迁移):后台「设置 → 系统配置 → 配置备份 / 迁移」一键把全部配置(系统配置、外部订阅源、我的频道与各配置档、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

v3.16.0 (2026-08-18)

  • 「兼容版订阅」清单直出:修复极空间极影视等播放器播放一直转圈:少数播放器(极空间「极影视」、部分老电视盒)不跟随 302 跳转,表现为频道列表 / 台标正常、点开播放一直转圈然后失败。现提供兼容版订阅(原订阅地址加 ?relay=1,后台「我的频道」订阅地址栏 / 配置档 / 用户令牌处均有「兼容版」一键复制):频道地址改为清单直出——服务器替播放器完成跳转、直接返回播放清单,播放器无需跟随任何跳转;视频流仍由播放器直连 CDN,不占服务器带宽,回看同样可用。能正常播放的播放器无需换用。README 新增「播放器适配一览表」与对应 FAQ 条目(issue #98)
  • 内置列表港台频道大更新:港澳台(亚太)频道大幅更新补充,体育分组调整;凤凰系频道更名为通用短名(凤凰中文 / 凤凰资讯 / 凤凰香港),配合 v3.15.0 的凤凰系 EPG 归一,长短名均可正常匹配节目单与台标
查看历史版本更新日志(v3.15.0 → v1.2.4)

v3.15.0 (2026-08-16)

  • 咪咕「客户端就近取流」开关:解决跨运营商观看卡顿:服务器和观看设备不在同一运营商网络时(如服务器接移动宽带、电视用联通网络),咪咕频道常见加载慢 / 播不了——因为播放地址由服务器解析,拿到的是服务器侧运营商的 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 定位(源被删则放弃写入),多标签页、自动刷新并发等场景一并免疫

v3.14.0 (2026-07-11)

  • 批量把频道整块移到分组最前/最后:进入「批量管理」勾选频道后,工具栏新增「移到最前 / 移到最后」,把选中的一批频道作为整块挪到当前分组的组首或组尾(其余频道保持原顺序)——整源频道一次排到分组前面/后面,不用再逐个拖拽调整。若该分组当前为「名称自动排序」,需先切回「手动」排序(issue #83)
  • 修复订阅源频道名/播放异常:部分订阅把 group-title 写在 #EXTINF 逗号之后(如 tvg-logo="…",group-title="央视",CCTV1综合),旧解析按「第一个逗号之后」取名,会把 group-title="央视" 一并当成频道名;脏名字回填进 tvg-id="…" 后破坏整行 EXTINF 语法,导致该频道显示错乱、播放异常。改为取「最后一个属性引号之后的逗号」后的部分,名字不再吞属性。已加入的源刷新一次即修正(issue #84)
  • 修复网页提取源播放地址被写坏:「网页提取」模式的源,若页面文本里的地址含 &timestamp=&notin= 这类参数,浏览器解析网页时会把 &times&not 等不带分号的旧式 HTML 实体误解成 ׬ 等字符,坏地址随后被保存导致一直播不了;现已自动还原。已坏的地址无需手动处理,下次刷新该源即修正。仅影响网页提取(填「网页地址」抓取)的源,订阅源不受影响(issue #84)
  • 后台「播放地址」显示修正:频道详情弹窗里带 &timestamp= 的地址此前会被浏览器渲染成 ×tamp=(仅显示层,复制按钮与对外播放列表始终是正确地址);现已转义,显示与实际一致(issue #84)

v3.13.0 (2026-07-05)

  • 按配置档选择源:每套配置档可勾选「启用哪些源」(咪咕 / 各内置源 / 各自定义源)——档管理弹窗每档新增「源」按钮批量勾选;添加/编辑自定义源时也可直接选「在哪些配置档显示」。多源同频道只要有一个来源启用就保留;先按源粗筛、再细化隐藏,多源上千频道不用再逐个隐藏(issue #29 / #68)
  • 设置页拆二级标签:原「系统配置」页更名「设置」,内部拆为 系统配置 / 频道别名 / 自动分组 / EPG 聚合 / 用户管理 五个二级标签,不再一页到底;系统配置新增「保存并重启」按钮,需重启的配置一步生效(issue #72)
  • 关键字分组规则支持上移/下移:多条规则「首条命中胜」,现可直接调序改优先级,不用删了重加(issue #69)
  • 自动刷新间隔更准时:外部源「自动刷新间隔」此前每小时才检查一次,导致设定的间隔不精确(如设 60 分钟最坏要近 2 小时才刷);改为每 5 分钟检查、到点即刷(间隔最小仍为 60 分钟)(issue #73)
  • 画质提示更清楚:后台「咪咕账号 / 画质」提示改为明确说明——游客(不填账号)最高 540p、填免费咪咕账号可到 720p、蓝光 1080p 及以上需 VIP,避免「游客上不去 720p」的误解(issue #76)

v3.12.0 (2026-06-29)

  • 关键字自动分组:后台新增「关键字自动分组」规则——按频道名关键字(如 央视 ← CCTV)把「未分组」频道自动归到对应分组。自定义订阅源里没写分组、每次刷新又回到未分组的频道,配一次以后自动归位,不用再天天手动整理;只对「未分组」生效、不动源已分好的组,手动移动优先(issue #69)
  • 添加订阅源可设「默认分组」:订阅源表单新增「默认分组」,订阅里没自带分组的频道整体归到这个分组(频道自带分组的保持不变),适合整源单主题的情况;与上面的关键字规则互补、按需选用(issue #69)
  • 设置布局优化:把「频道别名」「关键字自动分组」两张规则卡片从系统配置最底上移、与「统一频道显示名」聚在一起,更好找

v3.11.0 (2026-06-28)

  • 频道列表显示「配对状态」+ 详情可直接设别名:「我的频道」列表每个频道用两个小圆点显示节目单 / 台标是否匹配(绿=已匹配 / 红=未匹配,上方有常驻图例说明);没匹配上的点开「频道详情」可直接填规范名给它设别名(追加、不覆盖已有),保存即时重算、不用去配置页;详情台标预览也放大了(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 + 各镜像)全部拉不到时,回退读镜像里自带的频道列表,保证「无外网、镜像也挂」的环境下精选频道仍能加载(能联网的照常拿最新)

v3.10.0 (2026-06-27)

  • 内置「精选频道」新增一批频道:体育(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(远程下发,已有部署自动切换、无需重建镜像)

v3.9.0 (2026-06-27)

  • 统一频道显示名(按规则批量合并不同源同台命名):不同订阅源里同一个台的不同写法(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 刷新的可靠性

v3.8.0 (2026-06-25)

  • 用户访问令牌 / 一人一源(测试阶段):可在后台「系统配置 → 用户管理」给每个家人 / 朋友生成独立的源地址 /u/<令牌>/m3u,支持单独停用、重置令牌、绑定不同频道档(一人一内容),且令牌只能拉源、进不了管理后台——分享源地址不再连带暴露后台。泄露可追溯到具体某人、可单独吊销,其他人不受影响。本功能仍在测试中,建议先小范围试用、欢迎反馈;不新增用户则对现有部署与现有链接零影响。可用 enableUserTokens=false(或环境变量 menableUserTokens=false)关闭
  • 修复外部 EPG「加了源一个都匹配不上」:很多 EPG 源的频道 id 是数字 / 拼音代号、真实台名写在 <display-name> 里,旧逻辑只按 id 比对导致 0 命中;现改为优先按 display-name 归一配对(并保留 id 兜底)。另注意:外部 EPG 只给咪咕没覆盖的频道补节目单,咪咕已有 EPG 的频道显示匹配 0 属正常(issue #53)
  • 自定义分组「隐藏分组」按钮加说明:自定义分组本就只支持「删除分组」(不提供隐藏,因为它不随源刷新复活),现在鼠标悬停会提示「请用删除分组、或用批量管理隐藏其中频道」,避免误以为能整组隐藏(issue #42 追问)

v3.7.0 (2026-06-24)

  • 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 的同名页面(该配置为远程下发,部署端会自动更新、无需重建镜像)

v3.6.0 (2026-06-23)

  • 频道可一键复制到多个分组:「频道详情」新增「复制到分组」,可把自己的频道(外部 / 直连 / 订阅)同时放进多个分组(如把 TVB 复制到「亚太」和「香港」),每个分组里是独立的一份、隐藏 / 排序 / 删除互不影响;复制的是固定地址的独立频道、可在「外部源管理」删除(咪咕频道地址为服务端跳转、暂不支持)(issue #37)
  • 支持导入本地 .m3u/.txt 文件批量加源:「添加自定义源 → 订阅模式」新增「本地文件 / 粘贴」,可选本地 m3u/m3u8/txt 文件、或直接粘贴内容批量导入,自动识别格式与 GBK/UTF-8 编码,全程不发起网络请求(issue #43)
  • 后台上传 / 预览频道台标:「频道详情」可预览当前台标,并给没台标的频道直接上传图片(png/jpg/webp),存到 data/logos/、优先级最高、保存即生效,旁边可移除(issue #40)
  • 修复频道移动到其它分组后无法隐藏:从原分组移动到新分组的频道,之前在新分组里点隐藏会「提示已隐藏但实际仍显示」,再次批量移动 / 移回原组也会失效(隐藏 / 移动用错了分组标识);现统一按频道真实原始分组处理,已修正(issue #42)

v3.5.0 (2026-06-19)

  • 频道名称 / TVG 规整(EPG 别名归一):异构外部源里五花八门的频道名(CCTV-1 / CCTV1HD / CCTV-1综合 …)会自动把 tvg-id/tvg-name 归一到规范名(= 本项目 EPG playback.xml 里的频道名,即咪咕频道名),让外部源频道也能匹配上节目单(issue #39)。CCTV 系列规范名内置可用;卫视/港台等由运行时的 EPG 全集自动覆盖;可在数据目录放 channel-aliases.json(格式 {"规范名": ["别名1","别名2"]})自定义补充。只改 tvg、不动频道显示名。可用 enableTvgNormalize(或环境变量 menableTvgNormalize=false)关闭
  • 修复分组重命名/新建时误报「分组已存在」:当某分组的频道被全部移动到别处、或该分组被隐藏/删除而在「我的频道」列表里已不可见时,它的名字之前仍被占用,导致把别的分组改名成它、或新建同名分组时报「分组已存在」却在列表里找不到它(issue #35);现改为只按「当前可见分组」判重——看不到的分组不再占名,但同名分组若当前可见仍会被拦截(防止误合并)

v3.4.0 (2026-06-17)

  • 订阅源支持带账号密码的地址:添加订阅源时可直接填 http://用户名:密码@域名/x.m3u 形式的地址,系统会自动转成 HTTP Basic 认证去拉取,不再因地址里带 用户名:密码@ 而获取失败(注:仅认证「拉取播放列表」这一步;列表内各频道的流地址若也需认证,由播放器侧处理)
  • 后台默认给带 .m3u 后缀的订阅地址:「我的频道」配置档里复制的订阅地址改为 /interface.m3u(内容与 /m3u 完全相同),更适配「按后缀校验订阅链接」的 App(飞牛影视等),不用再手动改地址;裸 /m3u 仍然有效,已配好的地址无需更换
  • 修复飞牛影视等无法订阅播放列表/m3u/interface.m3u 之前以媒体类型 audio/x-mpegurl 返回,会被飞牛订阅 / 浏览器当成「一个视频」去播放、而非当订阅文本解析,导致订阅失败;现改为 text/plain 返回(与 GitHub raw 一致),普通播放器不受影响
  • 修复「分组内按名称排序」单独设置时不生效:当某配置档只设了某分组「排序:名称」、且没有其它任何自定义(隐藏 / 分组 / 重命名等)时,该排序之前不会生效,现已修复

v3.3.0 (2026-06-14)

本次为「多套配置档(大分组)」大版本:一套服务可维护多套个性化播放列表,给家里不同电视(大厅老人 / 卧室年轻人 / 茶室)各用各的;同时补齐外部频道台标、修复多个 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 个频道」

v3.2.0 (2026-06-07)

  • 「我的频道」显示总频道数:管理后台「我的频道」标题后实时显示当前总频道数(共 X 个频道),随频道增删 / 移动自动更新

v3.1.0 (2026-06-07)

  • 内置源配置支持远程拉取built-in-sources.json 改为运行时优先从仓库 raw 链接拉取(GitHub 镜像 + 数据卷缓存 + 镜像内置 三重兜底,国内拉不到也和纯本地一样稳)。纬来体育等需网页抓取的源,其抓取网址 webUrl 现在 push 即更新、无需重建镜像(webUrl 变更会自动重抓);可用环境变量 mbuiltInSourcesUrl 改源地址或置空关闭
  • 内置单频道源并入「精选频道」统一管理:把 WildEarth / Red Bull / 4K 卫视等直链频道从 built-in-sources.json 移入 IPTV.m3ubuilt-in-sources.json 仅保留需网页抓取的纬来体育;以后这些频道改 IPTV.m3u push 即可。合并时按「同分组 名称+地址」去重,与未升级镜像并存也不会重复

v3.0.0 (2026-06-06)

本次将内置订阅源从依赖第三方链接切换为项目自维护,运行时不再依赖外部仓库的内容与可用性。

  • 内置订阅源改为自维护:移除第三方 YueChan 的「港澳地方频道 / 全球频道」两个内置订阅,替换为项目自带、可自行维护更新的「精选频道」(央视 / 港澳台 / 地方 / 国际,约 115 频道;源文件 IPTV.m3u 随仓库分发,走本仓库的 raw 链接定时刷新),不再依赖第三方仓库的内容与可用性
  • 老用户自动清理「僵尸源」:升级后启动时一次性移除已退役的旧 YueChan 订阅(含其缓存频道),避免「换源后旧源残留、且因不在内置列表里而连开关都关不掉」;只跑一次,尊重用户后续的手动增删

v2.2.1 (2026-06-05)

  • 核心内容开关独立成组:管理后台「系统配置」中的「启用咪咕源 / 内置单频道源 / 内置订阅源」三项从常规配置里独立出来,做成醒目的「核心内容开关」卡片(红色描边、标注默认开启并提示谨慎关闭),与端口 / 密码等普通配置项形成 UI 区分,降低误关导致频道大幅减少甚至空白的概率
  • 移除后台「一键空白」按钮:该按钮仅是一次性勾掉上述三个开关、易误触,且与单独勾选重复,本版移除;需要空白部署仍可用环境变量 mblank 或手动关闭三个开关实现

v2.2.0 (2026-06-05)

  • 订阅源支持 txt 格式:订阅模式现自动识别播放列表格式,除 m3u/m3u8 外也支持 txt(diyp/TVBox:分组,#genre# / 频道名,地址,一个频道用 # 连多个备用源时取首个),无需额外设置;兼容 GBK/GB2312 编码
  • 内容开关 / 空白部署:新增 mblank 空白模式总开关 + menableMigu / menableBuiltInSources / menableBuiltInSubscriptions 三个细粒度开关(环境变量或管理后台「系统配置」勾选;细粒度优先于 mblank默认全开,老用户无感)。一行 mblank=true 即得到纯频道管理的空白部署,或单独关掉自带的内置源 / 内置订阅源,避免与自建源同名分组撞车
  • 后台「一键空白」:系统配置页新增上述三个开关与一键空白按钮,保存后自动重新生成播放列表、无需重启即时生效
  • 内置订阅源可彻底删除:自带的「港澳地方频道 / 全球频道」订阅改为「只播种一次」,删除后重启不再自动复活(尊重用户删除);关闭内置订阅时抓取层与输出层一并跳过,不再无谓联网下载
  • 修复 Docker 主版本标签:发布镜像的主版本滚动标签此前一直错打成 :1(实际是 v2.x),现修正为 :2,并修 bump-version.js 使其今后自动更新该标签

v2.1.0 (2026-06-02)

  • 单频道重命名:频道详情弹窗可给任意频道自定义显示名(清空或改回原名即恢复);只改显示名、不动 tvg-name,不影响 EPG 匹配。适合统一不同订阅源对同一频道的不同命名
  • 批量移动到分组:「我的频道」批量管理模式新增「移动选中到〈分组〉」,可一次把多个选中频道移到指定分组
  • 空数据不覆盖播放列表:某次刷新获取到 0 个频道时(通常是咪咕/网络不可达)保留上一次的好播放列表,不再用空文件覆盖,避免「我的频道」被清空且不自愈
  • 管理页显示实际生效配置:系统配置接口改为返回「环境变量 + 配置文件 + 默认值」合并后的实际生效值——修复用环境变量(muserId/mtoken 等)配置时,换电脑/无浏览器自动填充的情况下表单显示为空的问题
  • 环境变量覆盖提示:当某些配置由 docker-compose 环境变量设置时,系统配置页顶部醒目提示并列出受影响项(说明清空保存会回退到环境变量值、需改 compose)
  • 检查更新日志优化:镜像逐个回退时的失败改为黄色警告,仅全部镜像失败才标红,避免成功的检查更新看起来像报错

v2.0.1 (2026-05-31)

  • 分组上移/下移后选中跟随:之前移动分组后,左侧选中仍停在原位置(变成了被换上来的另一个分组),要重新点选才能继续移动;现在选中会跟随被移动的分组,可连续点上移/下移(例如把某分组一路移到最后)
  • 配置持久化(升级不再丢配置):运行时数据(咪咕账号、外部订阅源、我的频道分组顺序/隐藏/归类/排序等)改为集中存放,并支持 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

v2.0.0 (2026-05-30)

本次为安全与稳定性大版本,并新增多项管理功能(自 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.jsdelay 未引入导致 302 重试逻辑失效的隐藏问题;移除 ddCalcuURL 中无用的 WASM 死代码

v1.8.2 (2026-04-05)

  • 频道详情弹窗新增一键调起本地播放器按钮(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 赞助入口

v1.7.2 (2026-03-25)

  • 修复频道数据缓存污染导致内置源/外部源频道重复累积的问题:getAllChannels 合并时使用浅拷贝,导致内置源和外部源频道被写入咪咕缓存,每次自动刷新触发 regenerateOnly 重新生成播放列表时重复叠加(如纬来体育出现多条)

v1.7.1 (2026-03-23)

  • 修复 Docker 环境下内置抓取源(如纬来体育)无法抓取的问题:Alpine Linux 的 Chromium 路径为 /usr/bin/chromium,而非 /usr/bin/chromium-browser,导致 Puppeteer 找不到浏览器,抓取静默失败
  • 修复安全问题:未授权访问 /admin/player 时,响应中会明文暴露访问密码;现改为返回 403 并仅提示密码路径格式
  • 修复设置访问密码后,使用 /密码/admin 路径无法访问管理后台的问题(路由匹配未覆盖带密码前缀的路径)

v1.7.0 (2026-03-18)

  • 新增手动分组功能:可在「我的频道」中创建空分组,并在自定义源中直接使用这些分组
  • 新增手动分组删除功能:删除后,该分组下的自定义直连/抓取频道会自动并入 未分组
  • 调整分组操作边界:内置咪咕分组、订阅源分组仅支持隐藏,未分组 不允许重命名、删除或隐藏
  • 修复自定义频道与分组管理问题:避免直连频道 ID 冲突导致“我的频道”丢失频道,并阻止重命名到已存在分组名

v1.6.0 (2026-03-16)

  • 修复频道去重逻辑:将全局按频道名去重改为分类内去重,允许同一频道出现在不同分组中,与咪咕 App 行为一致
  • 修复隐藏频道逻辑:hiddenChannels 改为按分组独立隐藏,避免跨分组误隐藏同名频道
  • 频道详情弹窗优化:清理冗余播放按钮,保留复制地址功能

v1.5.0 (2026-03-11)

  • 检查更新支持 GitHub 镜像回退:依次尝试原始地址、ghfast.top、gh-proxy.com、gcore.jsdelivr.net,解决国内 Docker 环境无法访问 GitHub 的问题
  • 修复 jsDelivr 镜像 URL 转换错误导致该镜像始终 404 的问题
  • GitHub 镜像列表统一维护(GITHUB_RAW_MIRRORS),检查更新与订阅抓取共用,避免重复代码
  • 修复管理页面版本号显示与实际版本不一致的问题
  • 新增 bump-version.js 版本号统一更新脚本,一条命令同步更新所有文件

v1.4.3 (2026-03-11)

  • 新增外网访问协议自动检测:通过 NAS 转发(绿联、群晖、威联通等)或自定义域名访问时,自动使用 HTTPS 协议生成频道地址,解决外网无法播放的问题
  • 内网/外网/自定义域名三条路径互不影响,内网访问不走外网,避免上行带宽浪费
  • 根路径 / 默认返回 M3U 格式(audio/x-mpegurl),APTV 等客户端可直接用根地址导入

v1.4.1 (2026-03-11)

  • 新增分组重命名功能:可自定义分组名称,重命名后同名分组自动合并,支持重置恢复原名
  • 新增分组隐藏通配符支持:在配置中使用 体育-* 可一次性隐藏所有体育赛事分组
  • 新增检查更新功能:在「关于我们」页面可一键检查是否有新版本
  • 重置功能改为弹窗选项式,支持分项重置(重命名 / 隐藏 / 排序),避免误操作
  • 修复频道详情来源识别错误:正确区分咪咕源、内置源、外部源
  • 修复编辑按钮在非外部源频道上错误显示的问题
  • 修复订阅类型外部源编辑时无法定位到正确源的问题
  • 修复 /txt 端点未应用用户配置过滤的问题
  • 移除冗余的「保存配置」按钮(各操作已自动保存)

v1.3.3 (2026-03-10)

  • 修复 Docker 环境下播放列表文件写入不完整的问题:生成 interface.txt 时使用了异步文件写入(fire-and-forget),导致文件重命名时部分分组尚未写入完成,造成港澳台地方频道(浙江、河南、广东、宁夏、广西、云南等)分组缺失;现已改为同步写入,确保文件完整性
  • 优化日志输出:精简定时检查源更新、频道请求等高频日志,大幅减少 Docker 容器日志量
  • 修复订阅源(如港澳台频道)首次获取失败后无重试机制,导致频道缺失的问题;现在启动 60 秒后自动重试
  • 修复订阅源获取失败时不保留已有缓存数据的问题;失败时保留旧频道数据,引入指数退避重试机制
  • 修复外部源每小时定时检查时无条件写入配置文件的问题;现在仅在有源被实际更新时才保存
  • 启动时新增游客模式提示:未配置咪咕账号时提示最高画质为 720p
  • README 新增管理后台截图展示

v1.3.0 (2026-03-10)

  • 新增订阅模式(外部源第三种模式):支持导入 m3u/m3u8 播放列表 URL,一次性批量添加多个频道,支持自动定时刷新
  • 新增内置港澳台及地方频道订阅源(港澳地方频道),默认启用,开箱即用
  • 管理后台新增订阅模式 UI:支持填写订阅名称、m3u 地址、刷新间隔,一键导入并保存
  • 更新 external-sources.json.example 示例文件,新增订阅模式配置示例

v1.2.8 (2026-03-05)

  • 版本号升级到 1.2.8,同步更新 package.jsonpackage-lock.json、README 展示版本及 Docker workflow 镜像版本标签
  • 新增 GPL-3.0 开源许可(LICENSE),并在文档中补充 License 说明
  • 清理运行时缓存文件 pe-cache.json 出仓库,并加入 .gitignore 防止误提交

v1.2.7 (2026-02-28)

  • 修复内置抓取源 URL 刷新后重建播放列表(regenerateOnly 模式)会丢失体育-昨天/今天/明天频道的问题;现在 updatePE 运行时同步保存赛事缓存,快速模式下直接从缓存恢复,无需重新调用 API

v1.2.6 (2026-02-27)

  • 修复内置抓取源(如纬来体育)URL 刷新后未重新生成播放列表,导致 APTV 等客户端拿到的仍是过期链接的问题;现在每次抓取到新 URL 后会立即以快速模式重建 interface.txt
  • 新增内置频道 Bloomberg TV(国际分组)
  • 新增内置频道 Eurosport 4K(体育分组)
  • 新增内置频道 Red Bull TV(体育分组)

v1.2.5 (2026-02-27)

  • 修复内置抓取源(如纬来体育)因 m3u8 链接过期导致无法播放的问题,将自动刷新间隔从 240 分钟缩短为 60 分钟
  • 修复内置抓取源抓取失败时不清除旧缓存的问题,抓取失败时现在会自动清除过期缓存,避免继续使用无效链接

v1.2.4

  • 内置源管理功能
  • Web 管理后台优化

💖 支持项目

如果 iPTV 为你的家庭影音体验带来了帮助,欢迎点亮一个 ⭐ Star、分享给朋友,或通过以下方式支持项目继续维护。

❤️ GitHub Sponsors☕ Ko-fi💰 USDT (TRC20)
GitHub Sponsors Ko-fi USDT TRC20 QR Code
TArpwDgewYSFCYX6XoJ6drwpEU6UGBw5yq

⚠️ 仅支持 TRON (TRC20) 网络,请勿使用其他网络
Only via TRON (TRC20) network

⚖️ 免责声明

[!WARNING]

  • 本仓库代码按 GPL-3.0 授权,许可证之外不附加任何使用限制:GPL 允许出于任何目的使用、修改与再分发(含商业用途),条件只有遵守 GPL 条款。以下各条针对的是经本软件接触到的第三方内容、数据与账号的权利,属于法律与合规提示,不是对软件本身的附加许可条件
  • 不得将未获权利人授权的第三方频道与节目内容用于售卖订阅、公开转播、商业运营或其他未经授权的用途;这一限制来自内容权利人与所在地法律,与软件许可证无关。
  • 本项目提供的是频道管理、地址解析与代理分发软件;除项目自制的使用公告短片外,项目服务器不托管第三方音视频节目。仓库及运行时可能包含或获取公开可访问的播放地址、频道名称、台标与节目单元数据。公开可访问、技术上可播放或经过可用性检查,均不等同于内容属于公有领域或已获得复制、传播、转播及商业使用授权
  • 音视频内容、频道标识、平台名称和商标的权利归各自平台、制作者及其他权利人所有;文中提及第三方名称仅为说明兼容性,不表示合作、认可、授权或隶属关系。项目的 GPL-3.0 许可只适用于本仓库代码,不授予任何第三方内容、商标、接口或数据的使用权
  • 使用者应自行确认所在地区法律、内容授权范围和各平台用户协议,只接入本人拥有、合法订阅或已获明确授权的来源。不得利用本项目未经授权绕过登录、付费、DRM、地域限制或其他访问控制,不得共享、盗用或转售账号与凭据。
  • 互联网来源可能随时变更、下架或被限制,项目不对其合法性、准确性、持续可用性或适销性作任何保证。部署者对其添加、启用、公开访问和转发的来源承担全部责任;如无法确认权利状态,请关闭对应模块或使用 mblank=true 从空白配置开始。

📮 版权与侵权处理

如果你是内容权利人或其合法代理人,并认为本仓库收录的某个地址、频道元数据或抓取规则侵犯了你的合法权益,请通过 GitHub Issue 提交通知,标题注明「版权 / 侵权」,并尽量提供:

  1. 权利人及联系人身份、有效联系方式,以及代理关系说明(如适用);
  2. 涉嫌侵权的具体作品、频道、URL、仓库文件或模块名称;
  3. 权利归属或授权范围的必要证明;
  4. 希望采取的处理方式,以及你确认通知内容真实准确的声明。

项目维护者收到信息完整、能够明确定位的通知后,会在合理时间内核验,并视情况移除地址、停用抓取规则或采取其他必要措施。请勿在公开 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-fetchHTTP 请求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 引入,许可证随各自软件包提供。

Contributors

akiralereal

494 commits

claude

46 commits

akiralereal/iptv

开箱即有 800+ 可稳定流畅播放频道的自托管 IPTV 直播源管理与分发系统,聚合了央视频、咪咕、央视、卫视、凤凰卫视、亚太、国际、地方台、体育赛事、B 站直播、斗鱼直播、虎牙直播等,以及自定义抓取源和订阅,并提供 EPG 节目单与聚合功能;另外还自带 GUI 可视化管理后台,支持 Docker Compose 或 Node.js 运行,适合 NAS 与家庭服务器。

JavaScript

794

541 commits

updated Sep 19, 2026

See the code
bilibili
bilibili-live
cctv
epg
iptv
iptv-channels
iptv-free
iptv-links
iptv-live
iptv-m3u
iptv-m3u8
iptv-playlist
live
live-tv
livetv
m3u
m3u8
migu
nas
yangshipin

README

📺 iPTV

把分散的直播源,变成一套真正属于你的频道系统

自托管 · 模块化 · 可视化 · NAS 友好

GitHub Stars Docker Pulls License Sponsor

🐳 Docker 部署教程 · 前往 Docker Hub →

推荐通过 Docker 在 NAS / 服务器上部署,镜像:akiralereal/iptv:latest

当前版本:v4.15.0 · 产品预览 · 频道覆盖 · 内容来源 · 功能说明 · 更新日志

iPTV 是一个面向家庭影音与 NAS 用户的模块化 IPTV 直播源管理与分发系统。它内置央视频、咪咕、B站、虎牙、斗鱼及多地区广电等抓取模块,也能接入需要网页解析的内置源、维护者筛选的公开独立源、自定义直连地址和 M3U/TXT 订阅;所有来源统一完成聚合、去重、编排,再输出干净的播放列表与 EPG 节目单。

[!IMPORTANT] 本项目是自托管的软件工具。除项目自制的使用公告短片外,不托管第三方音视频节目;仓库及运行时可能整理互联网上公开可访问的播放地址与频道元数据,但“公开可访问”不代表内容属于公有领域,也不代表已获得复制、转播或商业使用授权。请仅在获得合法授权的范围内使用;如你是权利人并认为相关条目侵权,请按版权与侵权处理提交下架通知。

🖼️ 产品预览

我的频道 · 所有频道一处编排

我的频道主面板

源管理 · 每个内容来源独立、透明、可控

源管理

播放器实况 · 输出标准订阅,接入常用客户端

实况播放效果

✨ 为什么选择 iPTV

📺 开箱即用🧩 模块化源管理🪄 可视化编排
默认聚合 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 南京、青岛城市直播、上海慢直播等景观频道;数量随平台在线状态动态变化
体育赛事体育频道、赛事直播,以及昨天 / 今天 / 明天的动态赛事频道
亚太与国际精选列表提供 50 个经实验台验证的固定直连频道;独立模块另提供 YTN、NHK World 两个需要动态解析的公开频道
综合内容影视、文旅、教育、少儿、娱乐时尚等分类频道

播放列表首位默认提供项目自有的「公告」分组,内含三条自制短片:“欢迎使用 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站支持扫码登录以使用本人账号可访问的画质,虎牙、斗鱼支持匿名公开直播
电视与赛事平台咪咕、体育赛事自动整理频道与节目单,并按账号权限、设备兼容性和平台接口状态选择可用画质;需要登录的能力仅使用部署者本人提供的凭据
凤凰卫视凤凰资讯、凤凰中文、凤凰香港,归入 香港仅三个电视直播频道;游客 480p,登录普通凤凰秀账号可获取 720p / 25 帧,无需付费会员。后台支持导入 Token / Cookie 并持久保存,播放时取新签名,原始 HTTP-FLV 由本机转发。内置精选列表里的三条第三方凤凰线路同在「香港」,与本模块三台并列保留作备用线路,不合并、不顶替;播放器按名聚合时本模块源排在前面
香港卫视香港卫视一路电视直播,归入 香港无需登录、无需配置;播放时先问源站当前在播的是哪一路,再换这一路的 HLS 入口。服务端把入口清单拍平成媒体清单后只中继清单,媒体分片由播放器直连上游 CDN。实测为 1280×720、H.264/AAC;节目单由默认 EPG 源直接覆盖
大爱电视大爱一台、大爱二台,归入 台湾无需登录、无需配置;官网移动版直播页写死的两条官方 HLS,长期不变也不带签名,但上游按 Referer 防盗链——清单和分片裸请求一律 403,故一律由本机补齐官网请求头后全代理。实测均为 1280×720、H.264 High / AAC-LC,30 帧、约 3 Mbps
GOOD TVGOODTV(综合台)、GOODTV2(真理台),归入 台湾无需登录、无需配置;官网播放页写死的固定 HLS,没有签名也没有 Referer 门。官网播放器备了 CloudFront、Akamai 两条线路(同一源站、分片序号一致),播放时两线竞速择优,当前线路取不到清单会在同一次轮询里当场换线。其中 CloudFront 的 WAF 按播放器标识放行(浏览器 / VLC / ExoPlayer 通过,ffmpeg、okhttp 一律 403),播放器用什么标识不由本项目决定,因此清单与分片统一走本机全代理回源。取 1920×1080 档(约 4 Mbps,H.264 Main / AAC-LC,29.97 帧),该档取不到时自动退回 1280×720
北京广播电视台北京卫视、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
安徽广电安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道共 7 路无需登录、无需配置;按「安徽视讯」App 的公开算法解出鉴权密钥并逐路生成两小时签名,播放器每次轮询都重新拉取滚动清单;上游 CDN 只放行 App 播放器标识,清单与分片均以 App 标识经本机全代理
新疆广电新疆卫视、维吾尔语新闻综合、哈萨克语新闻综合、体育健康、少儿共 5 路无需登录、无需配置;播放时从丝路视听网当前 Nuxt 包静态解析当天公开签名配置,再调用源站接口签发约一小时有效的 HLS。服务端中继实时清单,媒体分片默认由播放器直连上游 CDN,也可用全代理订阅;源站标记禁播且实测返回 404 的 XJTV-4、XJTV-5 不纳入频道表
吉林广电6 路省级频道、9 路地方台和 13 路慢直播,共 28 路无需登录、无需配置;常规电视归入「吉林」,慢直播归入「吉林风景」。省级频道和季节性景观在播放时从源站加密接口获取短效 HLS,固定地方台和固定景观使用已验证的 HTTPS 入口;清单、密钥和媒体分片均由本机全代理
内蒙古广电内蒙古卫视、蒙古语卫视等 8 路自治区频道,以及 12 路盟市频道,共 20 路无需登录、无需配置;20 路全部归入唯一的「内蒙古」分组。播放时按奔腾融媒源站公开协议调用加密频道接口获取动态地址,并为清单、密钥和媒体分片补齐防盗链请求头后由本机全代理
亚洲与国际直播2 个动态公开频道:YTN、NHK World;另有 50 个固定直连频道位于精选列表的独立标记区块动态频道由独立零配置模块在播放时从平台接口获取当前 HLS,并由本机代理清单、密钥与媒体;固定频道使用实验台验证过的原始 HLS 地址,不经过该解析模块,避免重复和额外转发开销
广电抓取北京、重庆、四川、贵州、安徽、大连、广东、广西、福建、江西、甘肃、新疆、云南、吉林、黑龙江、内蒙古、海南、河北、湖北、河南、湖南、江苏、辽宁、南京、青岛、山东、上海、深圳、浙江等从各广电源站、公开接口或客户端公开直播能力获取当前地址;短效签名、防盗链、加密清单和 CDN 代理按模块分别处理
景观直播央视网「直播中国」、吉林风景、美丽河北、Live 南京、上海与青岛城市景观等按源站当前在线状态动态收录;离线、下架或源站调整时会自动减少,不以固定频道数承诺可用性
内置网页抓取源如纬来体育等需要从公开页面解析当前地址的单频道源内置抓取规则与定时刷新;每个源可配多个入口地址,主站打不开或抓不到时自动换备用地址重试,清单本身通过远程配置更新(改仓库文件即生效,无需升级镜像)。每个源均可单独关闭
精选公开独立源体育、国际、亚太、影视、纪实、音乐、娱乐时尚等项目维护的「精选频道」列表,收集公开可访问且经可用性检查的独立播放地址,并提供远程更新与本地快照兜底;可访问性检查不等同于版权授权审查
用户自有来源M3U8 直链、网页提取、M3U/M3U8/TXT 订阅完全由部署者自行添加、排序、分组和控制在哪些配置档中显示,适合接入自有设备、合法订阅或已获授权的直播源

[!NOTE] 所有内置抓取模块、内置网页抓取源和精选频道都能在「🌐 源管理」中独立关闭;需要完全空白的频道管理器时可使用 mblank=true。平台名称及商标仅用于说明兼容性,本项目不隶属于、也不代表上述平台或内容权利人。

当前版本更新内容

v4.15.0 更新内容

本次为「新增香港、台湾与黑龙江、云南共 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」,用户实际访问或登录的一侧称「站点 / 网页端」。仅措辞调整,功能、配置与订阅地址均未变动

完整更新历史见下方 更新日志

📑 目录


🚀 快速开始

推荐使用 Docker Compose。只需要一个配置文件和一条启动命令,几分钟即可拥有自己的 IPTV 服务。

Docker 镜像:akiralereal/iptv · 查看版本标签。下面使用 latest 标签;使用 NAS 图形化容器管理器时,也可直接搜索 akiralereal/iptv,按下方配置设置端口和数据目录。

1. 创建配置文件

创建 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: always

2. 启动服务

docker compose up -d

升级时执行:

docker compose pull && docker compose up -d

3. 打开管理后台

部署完即可访问:

用途地址
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 服务端;其他可直连频道不受影响。


❓ 常见问题

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;换了路径或域名的仍会。想让某个台以后都别出现,用「我的频道」里频道旁的「屏蔽」按钮,或右上角「🚫 屏蔽规则」按名字配一条:规则只看名字,源换址、频道每天重建都照样生效,删掉规则即恢复。像「体育-昨天 / 今天 / 明天」这类每天重建的分组,逐条隐藏没有意义,对其中一个分组点「隐藏分组」时会提议把同前缀的一起隐藏,以后新出现的也自动挡掉。

台标或节目单缺了一些,怎么补?

台标:没有自带台标的频道按名字到公共台标库取图,库里没有的会留空(播放器画自己的占位图,不再裂图)。点「我的频道」右上角「🖼 缺台标」可以列出当前档里所有没图的频道,逐个点进详情上传;或直接把 <频道名>.png 放进数据目录的 logos/,优先级最高。景观、慢直播这类本来就不是台名的,留空即可。

节目单:默认 EPG 源为 https://e.erw.cc/all.xml.gz(521 个频道、9 天节目)。老部署里如果自己改过默认源的名字,程序不会替你换地址,「设置 → EPG 节目单源」里那条会有一行提示;港台频道、各地景观和 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 个会员频道,45 秒无人请求后释放。首次自动登录目前只支持有桌面环境的本机运行: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 都等同登录态、请勿外传。

环境变量参考

🔹 常用配置(够大多数人用)

变量名默认值说明
mport1905容器监听端口
mhost公网 / NAS 访问地址,如 http://192.168.1.100:1905
mpass访问密码(可选),设置后访问 http://ip:port/密码/...
mdataDir/iptv/data数据持久化目录(镜像已默认此值并声明数据卷);建议 -v ./data:/iptv/data 绑定宿主机便于备份。老部署挂的 /migu/data 继续兼容,无需改动
📋 完整配置表(全部环境变量)
变量名默认值类型介绍
mport1905number本地运行端口号
mhoststring公网/自定义访问地址
格式http://ip:port
mpassstring访问密码 大小写字母和数字
添加后访问格式 http://ip:port/mpass/...
mdataDir镜像内 /iptv/data;node 直跑为当前目录string配置 / 数据持久化目录(仅环境变量可设
旧镜像路径 /migu/data 继续兼容:新路径无数据、旧路径有数据时自动沿用旧路径
madminPathadminstring管理页面自定义路径,如填 console 则用 /console 访问后台(/admin 失效)
保留字 api/player/favicon.ico 与非法值会回退 admin
muserIdstring咪咕模块的账号 ID(仅需高画质 / 会员内容时配置)
推荐改在后台模块卡片里配置(附书签工具一键获取)
mtokenstring咪咕模块的登录 token(同上)
mrateType3number咪咕模块画质
2: 标清 (480p)
3: 高清 (720p)
4: 蓝光 (1080p,需VIP)
7: 原画 (1080p+,需VIP)
9: 4K (2160p,需VIP)
mbiliSessdatastring哔哩哔哩模块的登录态 SESSDATA(不填限「超清」,填了解锁「原画」)
推荐改在后台模块卡片里扫码登录
mBtimeCookiestring北京时间站点登录 Cookie(仅北京 9 个电视频道需要;公开活动 / 慢直播免登录)
推荐改在后台「源管理 → 北京广播电视台」配置
menableHDRtrueboolean是否开启 HDR(vivid/4kvivid)
false 关闭
menableH265trueboolean是否开启 H.265 原画
有兼容性问题(如只有声音没画面)时设 false 关闭
menableClientDispatchfalseboolean客户端就近取流:服务器与观看设备不同运营商导致抓取频道跨网卡顿 / 播不了时设 true
同网部署无需开启
mupdateInterval8number节目单 / 源更新间隔(小时),不建议过短
mexternalLogoBasehttps://gcore.jsdelivr.net/gh/taksssss/tv@main/icon/string外部 / 内置 / 抓取模块频道没有自带台标时,按频道名到公共台标库兜底取图的基址(默认 taksssss 台标库的 jsDelivr 镜像,3266 个台标,大陆直连可达)
换成其它库需保证 <基址><频道名>.png 可访问;留空关闭兜底。本地 logos/ 里的图始终优先
mexternalLogoIndex跟随 mexternalLogoBasestring台标库的「频道名 → 图片」索引地址。有索引才知道库里到底有没有这张图:没有就把台标留空、由播放器画占位图,而不是写一个必定 404 的地址(裂图)
索引每 7 天下载一次并落盘缓存,拉不到时自动退回按名兜底。自定义了 mexternalLogoBase 时默认关闭(别人的清单对不上你的库);留空同样关闭
mrefreshTokentrueboolean是否每月自动续期平台 token
可能导致封号,可设 false 关闭
mblankfalseboolean空白模式总开关,设 true 后下面三项内容开关默认翻转为关
细粒度开关显式设值时优先于本项
menableMigutrueboolean是否启用咪咕抓取模块(CCTV/卫视 + 体育赛事 + EPG)
false体育赛事、回看、对应 EPG 不可用
menableBuiltInSourcestrueboolean是否启用内置单频道源(纬来体育 / Red Bull / 4K 卫视 等)
menableBuiltInSubscriptionstrueboolean是否启用内置订阅源(精选频道)
已添加的可在「源管理」删除,删后不复活

mdataDir/mport 外,多数项也可在后台修改(模块项在「🌐 源管理」,平台级项在「设置」页),保存即时生效(端口与更新间隔需重启)。升级用户:环境变量与旧配置继续有效,首次启动自动迁移,无需改动。

📺 多套配置档(给不同电视各一套)

后台「📺 我的频道」标题行右侧可新建 / 切换配置档,每档独立维护隐藏 / 分组 / 排序 / 重命名,互不影响;每台电视填各自的地址(每档底部可复制),如 http://你的IP:1905/interface.m3u?profile=woshi。各档共享同一份底层频道与 EPG,新增电视不增加抓取成本;默认档地址不变、老用户零感知。

🧹 空白部署 / 纯频道管理

只想用自己的源时,用内容开关关掉自带内容(也避免同名分组撞车):

需求配置
彻底空白,自己加源mblank=true
空白但保留抓取核心mblank=true + menableMigu=true
只去掉自带的额外源 / 订阅menableBuiltInSources=false + menableBuiltInSubscriptions=false

也可在后台「🌐 源管理」直接开关各卡片,保存即时生效。关闭 menableMigu 后体育赛事、回看与对应 EPG 不可用,属预期表现。

📡 公网地址 (mhost)

反向代理 / 域名访问 / 对外分享时填写(如 http://yourdomain.com:1905),仅内网使用留空即可。系统自动按访问来源选择播放列表里的地址:内网访问用内网地址,反代访问(带 X-Forwarded-For)用配置的公网地址;填 http(s):// 完整地址时不会强制补端口。

🔐 访问密码 (mpass)

设置后所有服务都要在 URL 带密码路径:http://ip:port/密码/interface.m3uhttp://ip:port/密码/admin 等,播放列表内的频道链接自动注入密码路径,未授权访问返回 403。

🔧 本地运行(不用 Docker)

需要 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)。


更新日志

v4.15.0 (2026-09-13)

本次为「新增香港、台湾与黑龙江、云南共 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」,用户实际访问或登录的一侧称「站点 / 网页端」。仅措辞调整,功能、配置与订阅地址均未变动

v4.14.0 (2026-09-09)

本次为「隐藏不再失效、按名字屏蔽与台标 / 节目单修复」版本:隐藏、重命名、归类、排序四项个性化设置不再因为源换签名地址而静默作废;新增按名字长期屏蔽的规则和一次隐藏整批同前缀分组的入口(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 授权、许可证之外不附加任何使用限制;「不得售卖订阅 / 公开转播」等限制针对的是未获授权的第三方内容,来自权利人与所在地法律,不来自本软件许可。补充第三方组件许可清单

v4.13.0 (2026-09-07)

本次为「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.htmlnpm 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)。升级后重启即生效,旧缓存里的直链会在启动抓取时被替换,订阅地址无需更换

v4.12.0 (2026-09-06)

本次为「央视频会员频道在 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 的六步演示

v4.11.0 (2026-09-06)

本次为「央视频登录态导入与安徽广电」版本:央视频会员频道新增「获取央视频登录态」书签工具,在自己电脑的浏览器登录官网后点一下、把内容粘贴到后台导入即可,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.htmlnpm run generate:ysp-guide 生成,生成脚本已支持多目标
  • 新增安徽广电 7 路官网直播:安徽卫视、经济生活、影视、公共、农业科教、综艺体育、国际频道全部纳入独立「安徽」分组,免登录、零配置、默认开启。服务端按「安徽视讯」App 的公开算法解出直播鉴权密钥、逐路生成两小时有效的腾讯云签名,并让播放器每次轮询都重新拉取滚动清单(官方清单只含 3 个 2 秒分片,复用旧清单几秒就会卡住)。该 CDN 按播放器标识放行:App 自己的 ijkplayer 能过,VLC / Apple / ExoPlayer 等常见播放器标识一律 403,因此清单与分片统一由本机以 App 标识全代理,播放器不直连 CDN;为此代理层允许模块用函数形态请求头指定 User-Agent,其余模块行为不变。官网旧接口的 8 路地址实为「网站直播已下线」占位画面,未收录;9 路安徽广播不进电视列表
  • 文档:README「产品预览」三张截图换成当前版本的后台主面板、源管理与实况播放效果

v4.10.0 (2026-09-06)

本次为「央视频会员频道、后台改版与地方台大扩充」版本:央视频在 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)

v4.8.1 (2026-09-05)

本次为「咪咕取流日志整理」版本:成功取流只打一行「咪咕取流:档位」,账号没订购某条内容的产品但流已正常下发时不再报红字,只给试看时改黄字并写明秒数,红字只留给真正拿不到地址的情况。升级镜像即可生效,现有订阅无需重新添加。

  • 咪咕取流日志改为一行摘要,不再把正常播放报成红字:此前每次取流打「登录认证成功」,账号没订购该内容的产品时再补一行红字「认证失败 视频内容不完整 可能缺少相关VIP」——可那时流已经正常下发(内容本身允许播放,或咪咕只给了几分钟试看),看着像出错其实什么都没坏;真正要紧的「拿到哪一档、试看多少秒」反而不打,issue #117 排查时全靠播放器截图。现在成功取流只打一行「咪咕取流:臻享 超高清」,游客标「游客」,命中缓存标「缓存」;只给试看时改黄字并写明秒数,如「咪咕取流:臻享 超高清 · 仅试看 360 秒」;红字只留给拿不到地址的情况

v4.8.0 (2026-09-05)

本次为「咪咕 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 起内置精选列表的港澳台频道已全部按「香港」「台湾」归组,「亚太」分组不再有任何内置条目,凤凰秀官方三台再复制一份进去只剩一个孤零零的空壳分组。现在三台只保留在「香港」,与内置的三条第三方凤凰线路并列,仍是置顶不顶替;外部订阅自带的「亚太」分组及其中的凤凰条目原样不动,播放器按名聚合时官方源照旧排在前面

v4.7.0 (2026-09-05)

本次为「启动提速与直播源整理」版本:纬来体育等网页抓取源改为在首份播放列表生成之后在后台抓取,启动不再被它拖住十几分钟,单个入口抓不到最多约 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 的频道会和旧缓存同时出现,旧缓存那份还会生成永远解析不了的本地代理地址。现在每次加载缓存都按模块当前认领范围收口、落盘并打印清理数量;不带延迟解析引用的普通缓存频道不受影响

v4.6.1 (2026-09-05)

本次为「亚洲直播代理修复」版本:亚洲与国际直播模块改回清单、密钥与媒体全部由本机代理,修复 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 已接入央视频」提示

v4.6.0 (2026-09-05)

本次为「亚洲与国际直播接入」版本:新增零配置的亚洲与国际直播模块,一次带来 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、央视付费频道、美国影视等一批第三方转流条目;「体育」补充纬来体育,「台湾」补充纬来日本、纬来育乐。该列表由运行中的实例直接从仓库拉取,不用升级镜像即已生效

v4.5.0 (2026-09-03)

本次为「凤凰卫视接入」版本:新增凤凰卫视三台(登录本人凤凰秀账号即可 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 同源

v4.4.0 (2026-09-02)

本次为「低配机稳定」版本:修复多个无头 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

v4.3.0 (2026-09-01)

本次为「央视频接入」版本:新增央视频官方直播模块,免登录、零配置、默认开启,一次带来 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」公告频道,展示使用方式、版权提醒和侵权联系说明,不引用任何第三方节目素材;为确保每份对外分发的订阅都保留必要提示,该系统频道不支持隐藏、删除、移动、排序或重命名

v4.2.1 (2026-08-31)

本次为「全代理诊断与加固」版本(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,不再把未改写清单透传给播放器;代理地址表超上限时不再优先淘汰最活跃频道的地址

v4.2.0 (2026-08-30)

本次为「省市台与景观直播扩容」版本:新增 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+ 体育赛事在「体育」与「央视」中各保留一份;其余咪咕跨分组重复项仍照常去重

v4.1.0 (2026-08-29)

本次为「省级台大扩容」版本:一次性新增 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)

v4.0.1 (2026-08-23)

本次为「源模块化」大版本:咪咕从写死的内核收编为第一个「抓取模块」,新增哔哩哔哩直播模块,全部内容来源统一进顶层「源管理」。升级完全向后兼容——存量配置自动迁移、老环境变量继续生效,唯一可感知的变化是抓取频道的分组归一(见下)。

  • 全新「源管理」与抓取模块架构:抓取模块、内置源、精选频道、自定义源聚合为一页卡片网格,每张模块卡片自带独立开关 + 配置 + 健康状态;原「系统配置」里的平台账号 / 画质 / 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。

v3.17.0 (2026-08-19)

  • 配置导出 / 导入(备份 · 换机迁移):后台「设置 → 系统配置 → 配置备份 / 迁移」一键把全部配置(系统配置、外部订阅源、我的频道与各配置档、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

v3.16.0 (2026-08-18)

  • 「兼容版订阅」清单直出:修复极空间极影视等播放器播放一直转圈:少数播放器(极空间「极影视」、部分老电视盒)不跟随 302 跳转,表现为频道列表 / 台标正常、点开播放一直转圈然后失败。现提供兼容版订阅(原订阅地址加 ?relay=1,后台「我的频道」订阅地址栏 / 配置档 / 用户令牌处均有「兼容版」一键复制):频道地址改为清单直出——服务器替播放器完成跳转、直接返回播放清单,播放器无需跟随任何跳转;视频流仍由播放器直连 CDN,不占服务器带宽,回看同样可用。能正常播放的播放器无需换用。README 新增「播放器适配一览表」与对应 FAQ 条目(issue #98)
  • 内置列表港台频道大更新:港澳台(亚太)频道大幅更新补充,体育分组调整;凤凰系频道更名为通用短名(凤凰中文 / 凤凰资讯 / 凤凰香港),配合 v3.15.0 的凤凰系 EPG 归一,长短名均可正常匹配节目单与台标
查看历史版本更新日志(v3.15.0 → v1.2.4)

v3.15.0 (2026-08-16)

  • 咪咕「客户端就近取流」开关:解决跨运营商观看卡顿:服务器和观看设备不在同一运营商网络时(如服务器接移动宽带、电视用联通网络),咪咕频道常见加载慢 / 播不了——因为播放地址由服务器解析,拿到的是服务器侧运营商的 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 定位(源被删则放弃写入),多标签页、自动刷新并发等场景一并免疫

v3.14.0 (2026-07-11)

  • 批量把频道整块移到分组最前/最后:进入「批量管理」勾选频道后,工具栏新增「移到最前 / 移到最后」,把选中的一批频道作为整块挪到当前分组的组首或组尾(其余频道保持原顺序)——整源频道一次排到分组前面/后面,不用再逐个拖拽调整。若该分组当前为「名称自动排序」,需先切回「手动」排序(issue #83)
  • 修复订阅源频道名/播放异常:部分订阅把 group-title 写在 #EXTINF 逗号之后(如 tvg-logo="…",group-title="央视",CCTV1综合),旧解析按「第一个逗号之后」取名,会把 group-title="央视" 一并当成频道名;脏名字回填进 tvg-id="…" 后破坏整行 EXTINF 语法,导致该频道显示错乱、播放异常。改为取「最后一个属性引号之后的逗号」后的部分,名字不再吞属性。已加入的源刷新一次即修正(issue #84)
  • 修复网页提取源播放地址被写坏:「网页提取」模式的源,若页面文本里的地址含 &timestamp=&notin= 这类参数,浏览器解析网页时会把 &times&not 等不带分号的旧式 HTML 实体误解成 ׬ 等字符,坏地址随后被保存导致一直播不了;现已自动还原。已坏的地址无需手动处理,下次刷新该源即修正。仅影响网页提取(填「网页地址」抓取)的源,订阅源不受影响(issue #84)
  • 后台「播放地址」显示修正:频道详情弹窗里带 &timestamp= 的地址此前会被浏览器渲染成 ×tamp=(仅显示层,复制按钮与对外播放列表始终是正确地址);现已转义,显示与实际一致(issue #84)

v3.13.0 (2026-07-05)

  • 按配置档选择源:每套配置档可勾选「启用哪些源」(咪咕 / 各内置源 / 各自定义源)——档管理弹窗每档新增「源」按钮批量勾选;添加/编辑自定义源时也可直接选「在哪些配置档显示」。多源同频道只要有一个来源启用就保留;先按源粗筛、再细化隐藏,多源上千频道不用再逐个隐藏(issue #29 / #68)
  • 设置页拆二级标签:原「系统配置」页更名「设置」,内部拆为 系统配置 / 频道别名 / 自动分组 / EPG 聚合 / 用户管理 五个二级标签,不再一页到底;系统配置新增「保存并重启」按钮,需重启的配置一步生效(issue #72)
  • 关键字分组规则支持上移/下移:多条规则「首条命中胜」,现可直接调序改优先级,不用删了重加(issue #69)
  • 自动刷新间隔更准时:外部源「自动刷新间隔」此前每小时才检查一次,导致设定的间隔不精确(如设 60 分钟最坏要近 2 小时才刷);改为每 5 分钟检查、到点即刷(间隔最小仍为 60 分钟)(issue #73)
  • 画质提示更清楚:后台「咪咕账号 / 画质」提示改为明确说明——游客(不填账号)最高 540p、填免费咪咕账号可到 720p、蓝光 1080p 及以上需 VIP,避免「游客上不去 720p」的误解(issue #76)

v3.12.0 (2026-06-29)

  • 关键字自动分组:后台新增「关键字自动分组」规则——按频道名关键字(如 央视 ← CCTV)把「未分组」频道自动归到对应分组。自定义订阅源里没写分组、每次刷新又回到未分组的频道,配一次以后自动归位,不用再天天手动整理;只对「未分组」生效、不动源已分好的组,手动移动优先(issue #69)
  • 添加订阅源可设「默认分组」:订阅源表单新增「默认分组」,订阅里没自带分组的频道整体归到这个分组(频道自带分组的保持不变),适合整源单主题的情况;与上面的关键字规则互补、按需选用(issue #69)
  • 设置布局优化:把「频道别名」「关键字自动分组」两张规则卡片从系统配置最底上移、与「统一频道显示名」聚在一起,更好找

v3.11.0 (2026-06-28)

  • 频道列表显示「配对状态」+ 详情可直接设别名:「我的频道」列表每个频道用两个小圆点显示节目单 / 台标是否匹配(绿=已匹配 / 红=未匹配,上方有常驻图例说明);没匹配上的点开「频道详情」可直接填规范名给它设别名(追加、不覆盖已有),保存即时重算、不用去配置页;详情台标预览也放大了(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 + 各镜像)全部拉不到时,回退读镜像里自带的频道列表,保证「无外网、镜像也挂」的环境下精选频道仍能加载(能联网的照常拿最新)

v3.10.0 (2026-06-27)

  • 内置「精选频道」新增一批频道:体育(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(远程下发,已有部署自动切换、无需重建镜像)

v3.9.0 (2026-06-27)

  • 统一频道显示名(按规则批量合并不同源同台命名):不同订阅源里同一个台的不同写法(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 刷新的可靠性

v3.8.0 (2026-06-25)

  • 用户访问令牌 / 一人一源(测试阶段):可在后台「系统配置 → 用户管理」给每个家人 / 朋友生成独立的源地址 /u/<令牌>/m3u,支持单独停用、重置令牌、绑定不同频道档(一人一内容),且令牌只能拉源、进不了管理后台——分享源地址不再连带暴露后台。泄露可追溯到具体某人、可单独吊销,其他人不受影响。本功能仍在测试中,建议先小范围试用、欢迎反馈;不新增用户则对现有部署与现有链接零影响。可用 enableUserTokens=false(或环境变量 menableUserTokens=false)关闭
  • 修复外部 EPG「加了源一个都匹配不上」:很多 EPG 源的频道 id 是数字 / 拼音代号、真实台名写在 <display-name> 里,旧逻辑只按 id 比对导致 0 命中;现改为优先按 display-name 归一配对(并保留 id 兜底)。另注意:外部 EPG 只给咪咕没覆盖的频道补节目单,咪咕已有 EPG 的频道显示匹配 0 属正常(issue #53)
  • 自定义分组「隐藏分组」按钮加说明:自定义分组本就只支持「删除分组」(不提供隐藏,因为它不随源刷新复活),现在鼠标悬停会提示「请用删除分组、或用批量管理隐藏其中频道」,避免误以为能整组隐藏(issue #42 追问)

v3.7.0 (2026-06-24)

  • 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 的同名页面(该配置为远程下发,部署端会自动更新、无需重建镜像)

v3.6.0 (2026-06-23)

  • 频道可一键复制到多个分组:「频道详情」新增「复制到分组」,可把自己的频道(外部 / 直连 / 订阅)同时放进多个分组(如把 TVB 复制到「亚太」和「香港」),每个分组里是独立的一份、隐藏 / 排序 / 删除互不影响;复制的是固定地址的独立频道、可在「外部源管理」删除(咪咕频道地址为服务端跳转、暂不支持)(issue #37)
  • 支持导入本地 .m3u/.txt 文件批量加源:「添加自定义源 → 订阅模式」新增「本地文件 / 粘贴」,可选本地 m3u/m3u8/txt 文件、或直接粘贴内容批量导入,自动识别格式与 GBK/UTF-8 编码,全程不发起网络请求(issue #43)
  • 后台上传 / 预览频道台标:「频道详情」可预览当前台标,并给没台标的频道直接上传图片(png/jpg/webp),存到 data/logos/、优先级最高、保存即生效,旁边可移除(issue #40)
  • 修复频道移动到其它分组后无法隐藏:从原分组移动到新分组的频道,之前在新分组里点隐藏会「提示已隐藏但实际仍显示」,再次批量移动 / 移回原组也会失效(隐藏 / 移动用错了分组标识);现统一按频道真实原始分组处理,已修正(issue #42)

v3.5.0 (2026-06-19)

  • 频道名称 / TVG 规整(EPG 别名归一):异构外部源里五花八门的频道名(CCTV-1 / CCTV1HD / CCTV-1综合 …)会自动把 tvg-id/tvg-name 归一到规范名(= 本项目 EPG playback.xml 里的频道名,即咪咕频道名),让外部源频道也能匹配上节目单(issue #39)。CCTV 系列规范名内置可用;卫视/港台等由运行时的 EPG 全集自动覆盖;可在数据目录放 channel-aliases.json(格式 {"规范名": ["别名1","别名2"]})自定义补充。只改 tvg、不动频道显示名。可用 enableTvgNormalize(或环境变量 menableTvgNormalize=false)关闭
  • 修复分组重命名/新建时误报「分组已存在」:当某分组的频道被全部移动到别处、或该分组被隐藏/删除而在「我的频道」列表里已不可见时,它的名字之前仍被占用,导致把别的分组改名成它、或新建同名分组时报「分组已存在」却在列表里找不到它(issue #35);现改为只按「当前可见分组」判重——看不到的分组不再占名,但同名分组若当前可见仍会被拦截(防止误合并)

v3.4.0 (2026-06-17)

  • 订阅源支持带账号密码的地址:添加订阅源时可直接填 http://用户名:密码@域名/x.m3u 形式的地址,系统会自动转成 HTTP Basic 认证去拉取,不再因地址里带 用户名:密码@ 而获取失败(注:仅认证「拉取播放列表」这一步;列表内各频道的流地址若也需认证,由播放器侧处理)
  • 后台默认给带 .m3u 后缀的订阅地址:「我的频道」配置档里复制的订阅地址改为 /interface.m3u(内容与 /m3u 完全相同),更适配「按后缀校验订阅链接」的 App(飞牛影视等),不用再手动改地址;裸 /m3u 仍然有效,已配好的地址无需更换
  • 修复飞牛影视等无法订阅播放列表/m3u/interface.m3u 之前以媒体类型 audio/x-mpegurl 返回,会被飞牛订阅 / 浏览器当成「一个视频」去播放、而非当订阅文本解析,导致订阅失败;现改为 text/plain 返回(与 GitHub raw 一致),普通播放器不受影响
  • 修复「分组内按名称排序」单独设置时不生效:当某配置档只设了某分组「排序:名称」、且没有其它任何自定义(隐藏 / 分组 / 重命名等)时,该排序之前不会生效,现已修复

v3.3.0 (2026-06-14)

本次为「多套配置档(大分组)」大版本:一套服务可维护多套个性化播放列表,给家里不同电视(大厅老人 / 卧室年轻人 / 茶室)各用各的;同时补齐外部频道台标、修复多个 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 个频道」

v3.2.0 (2026-06-07)

  • 「我的频道」显示总频道数:管理后台「我的频道」标题后实时显示当前总频道数(共 X 个频道),随频道增删 / 移动自动更新

v3.1.0 (2026-06-07)

  • 内置源配置支持远程拉取built-in-sources.json 改为运行时优先从仓库 raw 链接拉取(GitHub 镜像 + 数据卷缓存 + 镜像内置 三重兜底,国内拉不到也和纯本地一样稳)。纬来体育等需网页抓取的源,其抓取网址 webUrl 现在 push 即更新、无需重建镜像(webUrl 变更会自动重抓);可用环境变量 mbuiltInSourcesUrl 改源地址或置空关闭
  • 内置单频道源并入「精选频道」统一管理:把 WildEarth / Red Bull / 4K 卫视等直链频道从 built-in-sources.json 移入 IPTV.m3ubuilt-in-sources.json 仅保留需网页抓取的纬来体育;以后这些频道改 IPTV.m3u push 即可。合并时按「同分组 名称+地址」去重,与未升级镜像并存也不会重复

v3.0.0 (2026-06-06)

本次将内置订阅源从依赖第三方链接切换为项目自维护,运行时不再依赖外部仓库的内容与可用性。

  • 内置订阅源改为自维护:移除第三方 YueChan 的「港澳地方频道 / 全球频道」两个内置订阅,替换为项目自带、可自行维护更新的「精选频道」(央视 / 港澳台 / 地方 / 国际,约 115 频道;源文件 IPTV.m3u 随仓库分发,走本仓库的 raw 链接定时刷新),不再依赖第三方仓库的内容与可用性
  • 老用户自动清理「僵尸源」:升级后启动时一次性移除已退役的旧 YueChan 订阅(含其缓存频道),避免「换源后旧源残留、且因不在内置列表里而连开关都关不掉」;只跑一次,尊重用户后续的手动增删

v2.2.1 (2026-06-05)

  • 核心内容开关独立成组:管理后台「系统配置」中的「启用咪咕源 / 内置单频道源 / 内置订阅源」三项从常规配置里独立出来,做成醒目的「核心内容开关」卡片(红色描边、标注默认开启并提示谨慎关闭),与端口 / 密码等普通配置项形成 UI 区分,降低误关导致频道大幅减少甚至空白的概率
  • 移除后台「一键空白」按钮:该按钮仅是一次性勾掉上述三个开关、易误触,且与单独勾选重复,本版移除;需要空白部署仍可用环境变量 mblank 或手动关闭三个开关实现

v2.2.0 (2026-06-05)

  • 订阅源支持 txt 格式:订阅模式现自动识别播放列表格式,除 m3u/m3u8 外也支持 txt(diyp/TVBox:分组,#genre# / 频道名,地址,一个频道用 # 连多个备用源时取首个),无需额外设置;兼容 GBK/GB2312 编码
  • 内容开关 / 空白部署:新增 mblank 空白模式总开关 + menableMigu / menableBuiltInSources / menableBuiltInSubscriptions 三个细粒度开关(环境变量或管理后台「系统配置」勾选;细粒度优先于 mblank默认全开,老用户无感)。一行 mblank=true 即得到纯频道管理的空白部署,或单独关掉自带的内置源 / 内置订阅源,避免与自建源同名分组撞车
  • 后台「一键空白」:系统配置页新增上述三个开关与一键空白按钮,保存后自动重新生成播放列表、无需重启即时生效
  • 内置订阅源可彻底删除:自带的「港澳地方频道 / 全球频道」订阅改为「只播种一次」,删除后重启不再自动复活(尊重用户删除);关闭内置订阅时抓取层与输出层一并跳过,不再无谓联网下载
  • 修复 Docker 主版本标签:发布镜像的主版本滚动标签此前一直错打成 :1(实际是 v2.x),现修正为 :2,并修 bump-version.js 使其今后自动更新该标签

v2.1.0 (2026-06-02)

  • 单频道重命名:频道详情弹窗可给任意频道自定义显示名(清空或改回原名即恢复);只改显示名、不动 tvg-name,不影响 EPG 匹配。适合统一不同订阅源对同一频道的不同命名
  • 批量移动到分组:「我的频道」批量管理模式新增「移动选中到〈分组〉」,可一次把多个选中频道移到指定分组
  • 空数据不覆盖播放列表:某次刷新获取到 0 个频道时(通常是咪咕/网络不可达)保留上一次的好播放列表,不再用空文件覆盖,避免「我的频道」被清空且不自愈
  • 管理页显示实际生效配置:系统配置接口改为返回「环境变量 + 配置文件 + 默认值」合并后的实际生效值——修复用环境变量(muserId/mtoken 等)配置时,换电脑/无浏览器自动填充的情况下表单显示为空的问题
  • 环境变量覆盖提示:当某些配置由 docker-compose 环境变量设置时,系统配置页顶部醒目提示并列出受影响项(说明清空保存会回退到环境变量值、需改 compose)
  • 检查更新日志优化:镜像逐个回退时的失败改为黄色警告,仅全部镜像失败才标红,避免成功的检查更新看起来像报错

v2.0.1 (2026-05-31)

  • 分组上移/下移后选中跟随:之前移动分组后,左侧选中仍停在原位置(变成了被换上来的另一个分组),要重新点选才能继续移动;现在选中会跟随被移动的分组,可连续点上移/下移(例如把某分组一路移到最后)
  • 配置持久化(升级不再丢配置):运行时数据(咪咕账号、外部订阅源、我的频道分组顺序/隐藏/归类/排序等)改为集中存放,并支持 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

v2.0.0 (2026-05-30)

本次为安全与稳定性大版本,并新增多项管理功能(自 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.jsdelay 未引入导致 302 重试逻辑失效的隐藏问题;移除 ddCalcuURL 中无用的 WASM 死代码

v1.8.2 (2026-04-05)

  • 频道详情弹窗新增一键调起本地播放器按钮(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 赞助入口

v1.7.2 (2026-03-25)

  • 修复频道数据缓存污染导致内置源/外部源频道重复累积的问题:getAllChannels 合并时使用浅拷贝,导致内置源和外部源频道被写入咪咕缓存,每次自动刷新触发 regenerateOnly 重新生成播放列表时重复叠加(如纬来体育出现多条)

v1.7.1 (2026-03-23)

  • 修复 Docker 环境下内置抓取源(如纬来体育)无法抓取的问题:Alpine Linux 的 Chromium 路径为 /usr/bin/chromium,而非 /usr/bin/chromium-browser,导致 Puppeteer 找不到浏览器,抓取静默失败
  • 修复安全问题:未授权访问 /admin/player 时,响应中会明文暴露访问密码;现改为返回 403 并仅提示密码路径格式
  • 修复设置访问密码后,使用 /密码/admin 路径无法访问管理后台的问题(路由匹配未覆盖带密码前缀的路径)

v1.7.0 (2026-03-18)

  • 新增手动分组功能:可在「我的频道」中创建空分组,并在自定义源中直接使用这些分组
  • 新增手动分组删除功能:删除后,该分组下的自定义直连/抓取频道会自动并入 未分组
  • 调整分组操作边界:内置咪咕分组、订阅源分组仅支持隐藏,未分组 不允许重命名、删除或隐藏
  • 修复自定义频道与分组管理问题:避免直连频道 ID 冲突导致“我的频道”丢失频道,并阻止重命名到已存在分组名

v1.6.0 (2026-03-16)

  • 修复频道去重逻辑:将全局按频道名去重改为分类内去重,允许同一频道出现在不同分组中,与咪咕 App 行为一致
  • 修复隐藏频道逻辑:hiddenChannels 改为按分组独立隐藏,避免跨分组误隐藏同名频道
  • 频道详情弹窗优化:清理冗余播放按钮,保留复制地址功能

v1.5.0 (2026-03-11)

  • 检查更新支持 GitHub 镜像回退:依次尝试原始地址、ghfast.top、gh-proxy.com、gcore.jsdelivr.net,解决国内 Docker 环境无法访问 GitHub 的问题
  • 修复 jsDelivr 镜像 URL 转换错误导致该镜像始终 404 的问题
  • GitHub 镜像列表统一维护(GITHUB_RAW_MIRRORS),检查更新与订阅抓取共用,避免重复代码
  • 修复管理页面版本号显示与实际版本不一致的问题
  • 新增 bump-version.js 版本号统一更新脚本,一条命令同步更新所有文件

v1.4.3 (2026-03-11)

  • 新增外网访问协议自动检测:通过 NAS 转发(绿联、群晖、威联通等)或自定义域名访问时,自动使用 HTTPS 协议生成频道地址,解决外网无法播放的问题
  • 内网/外网/自定义域名三条路径互不影响,内网访问不走外网,避免上行带宽浪费
  • 根路径 / 默认返回 M3U 格式(audio/x-mpegurl),APTV 等客户端可直接用根地址导入

v1.4.1 (2026-03-11)

  • 新增分组重命名功能:可自定义分组名称,重命名后同名分组自动合并,支持重置恢复原名
  • 新增分组隐藏通配符支持:在配置中使用 体育-* 可一次性隐藏所有体育赛事分组
  • 新增检查更新功能:在「关于我们」页面可一键检查是否有新版本
  • 重置功能改为弹窗选项式,支持分项重置(重命名 / 隐藏 / 排序),避免误操作
  • 修复频道详情来源识别错误:正确区分咪咕源、内置源、外部源
  • 修复编辑按钮在非外部源频道上错误显示的问题
  • 修复订阅类型外部源编辑时无法定位到正确源的问题
  • 修复 /txt 端点未应用用户配置过滤的问题
  • 移除冗余的「保存配置」按钮(各操作已自动保存)

v1.3.3 (2026-03-10)

  • 修复 Docker 环境下播放列表文件写入不完整的问题:生成 interface.txt 时使用了异步文件写入(fire-and-forget),导致文件重命名时部分分组尚未写入完成,造成港澳台地方频道(浙江、河南、广东、宁夏、广西、云南等)分组缺失;现已改为同步写入,确保文件完整性
  • 优化日志输出:精简定时检查源更新、频道请求等高频日志,大幅减少 Docker 容器日志量
  • 修复订阅源(如港澳台频道)首次获取失败后无重试机制,导致频道缺失的问题;现在启动 60 秒后自动重试
  • 修复订阅源获取失败时不保留已有缓存数据的问题;失败时保留旧频道数据,引入指数退避重试机制
  • 修复外部源每小时定时检查时无条件写入配置文件的问题;现在仅在有源被实际更新时才保存
  • 启动时新增游客模式提示:未配置咪咕账号时提示最高画质为 720p
  • README 新增管理后台截图展示

v1.3.0 (2026-03-10)

  • 新增订阅模式(外部源第三种模式):支持导入 m3u/m3u8 播放列表 URL,一次性批量添加多个频道,支持自动定时刷新
  • 新增内置港澳台及地方频道订阅源(港澳地方频道),默认启用,开箱即用
  • 管理后台新增订阅模式 UI:支持填写订阅名称、m3u 地址、刷新间隔,一键导入并保存
  • 更新 external-sources.json.example 示例文件,新增订阅模式配置示例

v1.2.8 (2026-03-05)

  • 版本号升级到 1.2.8,同步更新 package.jsonpackage-lock.json、README 展示版本及 Docker workflow 镜像版本标签
  • 新增 GPL-3.0 开源许可(LICENSE),并在文档中补充 License 说明
  • 清理运行时缓存文件 pe-cache.json 出仓库,并加入 .gitignore 防止误提交

v1.2.7 (2026-02-28)

  • 修复内置抓取源 URL 刷新后重建播放列表(regenerateOnly 模式)会丢失体育-昨天/今天/明天频道的问题;现在 updatePE 运行时同步保存赛事缓存,快速模式下直接从缓存恢复,无需重新调用 API

v1.2.6 (2026-02-27)

  • 修复内置抓取源(如纬来体育)URL 刷新后未重新生成播放列表,导致 APTV 等客户端拿到的仍是过期链接的问题;现在每次抓取到新 URL 后会立即以快速模式重建 interface.txt
  • 新增内置频道 Bloomberg TV(国际分组)
  • 新增内置频道 Eurosport 4K(体育分组)
  • 新增内置频道 Red Bull TV(体育分组)

v1.2.5 (2026-02-27)

  • 修复内置抓取源(如纬来体育)因 m3u8 链接过期导致无法播放的问题,将自动刷新间隔从 240 分钟缩短为 60 分钟
  • 修复内置抓取源抓取失败时不清除旧缓存的问题,抓取失败时现在会自动清除过期缓存,避免继续使用无效链接

v1.2.4

  • 内置源管理功能
  • Web 管理后台优化

💖 支持项目

如果 iPTV 为你的家庭影音体验带来了帮助,欢迎点亮一个 ⭐ Star、分享给朋友,或通过以下方式支持项目继续维护。

❤️ GitHub Sponsors☕ Ko-fi💰 USDT (TRC20)
GitHub Sponsors Ko-fi USDT TRC20 QR Code
TArpwDgewYSFCYX6XoJ6drwpEU6UGBw5yq

⚠️ 仅支持 TRON (TRC20) 网络,请勿使用其他网络
Only via TRON (TRC20) network

⚖️ 免责声明

[!WARNING]

  • 本仓库代码按 GPL-3.0 授权,许可证之外不附加任何使用限制:GPL 允许出于任何目的使用、修改与再分发(含商业用途),条件只有遵守 GPL 条款。以下各条针对的是经本软件接触到的第三方内容、数据与账号的权利,属于法律与合规提示,不是对软件本身的附加许可条件
  • 不得将未获权利人授权的第三方频道与节目内容用于售卖订阅、公开转播、商业运营或其他未经授权的用途;这一限制来自内容权利人与所在地法律,与软件许可证无关。
  • 本项目提供的是频道管理、地址解析与代理分发软件;除项目自制的使用公告短片外,项目服务器不托管第三方音视频节目。仓库及运行时可能包含或获取公开可访问的播放地址、频道名称、台标与节目单元数据。公开可访问、技术上可播放或经过可用性检查,均不等同于内容属于公有领域或已获得复制、传播、转播及商业使用授权
  • 音视频内容、频道标识、平台名称和商标的权利归各自平台、制作者及其他权利人所有;文中提及第三方名称仅为说明兼容性,不表示合作、认可、授权或隶属关系。项目的 GPL-3.0 许可只适用于本仓库代码,不授予任何第三方内容、商标、接口或数据的使用权
  • 使用者应自行确认所在地区法律、内容授权范围和各平台用户协议,只接入本人拥有、合法订阅或已获明确授权的来源。不得利用本项目未经授权绕过登录、付费、DRM、地域限制或其他访问控制,不得共享、盗用或转售账号与凭据。
  • 互联网来源可能随时变更、下架或被限制,项目不对其合法性、准确性、持续可用性或适销性作任何保证。部署者对其添加、启用、公开访问和转发的来源承担全部责任;如无法确认权利状态,请关闭对应模块或使用 mblank=true 从空白配置开始。

📮 版权与侵权处理

如果你是内容权利人或其合法代理人,并认为本仓库收录的某个地址、频道元数据或抓取规则侵犯了你的合法权益,请通过 GitHub Issue 提交通知,标题注明「版权 / 侵权」,并尽量提供:

  1. 权利人及联系人身份、有效联系方式,以及代理关系说明(如适用);
  2. 涉嫌侵权的具体作品、频道、URL、仓库文件或模块名称;
  3. 权利归属或授权范围的必要证明;
  4. 希望采取的处理方式,以及你确认通知内容真实准确的声明。

项目维护者收到信息完整、能够明确定位的通知后,会在合理时间内核验,并视情况移除地址、停用抓取规则或采取其他必要措施。请勿在公开 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-fetchHTTP 请求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 引入,许可证随各自软件包提供。

Contributors

akiralereal

494 commits

claude

46 commits

Languages

JavaScript

73.9%

HTML

26.0%