客厅想看个卫视?iPTV 我在 NAS 上跑起来了
家里 NAS 最常被问的,已经不是「片子怎么播」。Jellyfin 管点播,相册、合同、播客也各有去处。真正还在客厅里吵架的,是直播。爸妈要看新闻联播,岳母要看地方台,孩子路过想看熊猫,我自己偶尔想扫一眼体育。结果每人手里一个 App:有的要登录,有的要会员,有的今天能播明天 403。电视盒子里那份 m3u 更烦,群里转发一次、地址挂一次,过两周你只记得「好像有个源」,点开却是一片空白。
我原本以为缺的是「再找一份能用的直播源」。真去找,发现缺的是一个能把源收回家里管的地方:哪些台显示、哪些台隐藏、订阅地址给哪台电视、节目单从哪来。今天这篇不讲概念。我在本机(ARM64、约 4C / 3.8G 内存、根盘 115G)按官方 Dockerfile 把 v4.13.0 跑起来,Web 映射 1905:1905。空载大约 64MiB,CPU 接近 0。后台自己报:54 个分组,809 个频道。下面除封面外都是实机。
官方镜像名是 akiralereal/iptv:latest。这点最好先说清楚:Hub 上确实有 latest / 4.13.0,工作流也写了 linux/arm64。我这边直连 Docker Hub 超时,走本机 mirrors 拉层时有一层 not found,所以没有假装已经 pull 到官方预构建包。源码来自仓库 main(package.json 写着 4.13.0),基础镜像是 node:22-alpine。对家用 NAS 来说,结论不变:compose 里填官方镜像即可;我这次是构建路径上的实跑。
客厅电视看直播,书房 NAS 在灯后面值班封面是氛围图:遥控器在沙发上,真正排队的是书房那台小主机。
仓库是 akiralereal/iptv,公开大约 ★662 / fork 213,GPL-3.0。README 自己把边界写在最前面:这是自托管工具,除了项目自制的使用公告短片,不托管第三方节目;整理到的公开地址,也不等于授权你去转播。这句话比「800+ 频道开箱即用」更重要。它不是又一个电视盒子系统,更像家里的直播源值班室:把央视频、地方台、景观、精选列表、你自己的订阅,收成一份 M3U / TXT / EPG,再丢给 TiviMate、APTV、Kodi、飞牛影视去播。
第一次打开浏览器,标题是 IPTV 频道管理,顶栏四个字:我的频道、源管理、设置、关于我们。首页就写着 共 809 个频道。订阅地址直接印在上面:
http://127.0.0.1:1905/interface.m3u
旁边还有兼容版、全代理版,节目单是 /playback.xml。左侧分组从「公告」开始,然后是央视频 73、体育、卫视、iPanda 22、B 站 / 虎牙 / 斗鱼,再往下是各省和景观。公告那三组是项目自制短片,锁定置顶,能藏不能删。点开「央视频」,右边就是 CCTV1 到一串卫视,台标和节目单用绿点标配对。
管理后台「我的频道」:809 个频道、订阅地址和分组订阅地址就在标题下面。家用的意思是:把这一行填进电视 App,而不是把 809 个台全留给客厅。
点开「央视频」分组后的频道列表73 个台排在「央视频」下面。客厅真正常用的,往往只有前面那一小截。
点进 CCTV1综合,弹层把这件事说得很土。名称、分组「央视频」、节目单已匹配、台标走公共库,播放地址是本机代理:
http://127.0.0.1:1905/relay/ysp-cctv1.m3u8
可以复制、可以唤本机 VLC,也可以改名、换分组、换台标。我没有在这台机器上真的把客厅电视点亮——浏览器在 NAS 本机,VLC 协议也注册不上,页面自己写了会先下一份 .m3u。这点很重要:后台是编排台,播放发生在电视、手机、电脑上。
频道详情:CCTV1综合的本机代理地址和节目单配对地址指向 /relay/ysp-cctv1.m3u8。它不是把节目存在硬盘里,是在你家门口帮播放器换票、补请求头。
源管理页才是它真正花钱的地方。二级标签三个:自定义源 0、内置抓取模块 38/38、内置源 2/2。咪咕视频卡片写着「正常 · 84 频道」,央视频 73,凤凰三路,北京台 6(没导入 Cookie 时电视台不会全出来),四川这次是 0 频道——没登录态就没有固定台,活动直播有才显示。B 站 11、虎牙 8、斗鱼 8。免账号那一组更长:安徽、江西、贵州、甘肃、吉林、内蒙古、iPanda 这些,打开就能抓公开流。每个模块一个开关,关掉就不联网、不进列表,配置还留着。
源管理:38 个抓取模块,咪咕 84、央视频 73「正常 · 73 频道」只说明模块今天抓到了表,不说明客厅电视一定能顺。
设置页把端口、公网地址、访问密码、管理路径、节目单间隔摊开。我这次 mport=1905、mhost=http://127.0.0.1:1905、HDR / H265 关掉,Chromium 并发设成 1——这台 3.8G 的板子,README 自己警告每个无头浏览器大约 200~400MB。备份 / 迁移是一键导出,含账号和访问密码,页面写着别随手发给别人;自定义台标在 logos/,不进那个包。关于我们页确认版本就是 v4.13.0,项目地址、Docker Hub、ifansclub.com 列在一起。
设置页:端口 1905、公网地址、备份迁移公网地址那一行决定了电视 App 拿到的不是 127.0.0.1。改反代、改 Tailscale,先改这里。
关于我们:当前版本 v4.13.0检查更新按钮在版本号旁边。家用 NAS 升镜像前,先确认 data 目录挂着。
顺手的地方其实很土。第一,默认就能吐出一份能订阅的列表。我这次 /interface.m3u 大约 23 万字节、809 条 #EXTINF,/txt 给 DIYP / 百川,/playback.xml 大约 75 万字节,生成器写着 iFansClub。第二,分组、隐藏、多配置档都在浏览器里,不用为第二台电视再改 compose。第三,内存友好。带 Chromium 的镜像磁盘不小,约 1.44GB,但空载只有六十多兆;真正吃内存的是网页抓取把无头浏览器拉起来的时候。第四,源是模块化的。你不需要 B 站、不需要景观,关掉对应卡片就行,不是一份死 m3u 绑死全家。
落差也明确。它不是直播中继站,更不是「把央视下到 NAS」。硬盘里没有节目文件,电视能不能播,取决于上游今天给不给、家宽到不了、播放器认不认跳转。标准订阅失败才用 ?relay=1 兼容版,还不行才 ?relay=2 全代理——全代理会让 NAS 转发分片,4C 小盒子扛几路 1080 会难受。我没给咪咕填 Token,也没给央视频会员导 Cookie,所以会员台、更高画质、四川固定台,这篇都没打开。别把 README 里的「63 个公开 + 10 个会员」写成你已经全部看上了。
还有一层预期要先拆开。公开可访问不等于你有权给全小区转播。项目自己把侵权联系和公告短片放进列表第一组,态度是克制的。家用我只把它当成:合法持有的直播入口、官网公开频道、以及你自己添加的订阅,在局域网里编排。把来路不明的「全套海外台」整份加进去,风险是你的,不是这个面板的。B 站 / 虎牙 / 斗鱼是热门直播间,不是电视台;地址短效,v4.13.0 才改成播放时解析,免得列表里的签名一小时过期。景观频道会随官网上下线,数量不是 KPI。
界面是中文的,这点比很多自托管项目客气。但它默认没有登录墙——访问密码要你自己在设置里加,路径还可以把 /admin 改掉。公网裸奔 1905 不合适;家用该走 Caddy / NPM / Tailscale,再把公网地址改成家人真正打开的那个,否则电视拿到的 enclosure 会指向 127.0.0.1。我这次就是本机测试地址,订阅只能在这台机器上验证列表,不能假装已经给客厅盒子用上了。
如果你已经有一台长期开机的 NAS,客厅电视只认 M3U / TXT,又厌倦了群里那种「源又挂了」的转发,可以考虑。绿联、电犀牛、飞牛、群晖 Container Manager、TrueNAS 的 Custom App、Armbian 小盒子,官方镜像声明了 linux/arm64。内存不宽裕就把 mbrowserConcurrency 设 1,别一上来当转码机。
不适合的人也清楚。只想在手机 App 里点一个台,用不上自建。需要给家里每个人单独账号、权限分级,它有用户令牌,但不是家庭成员系统。指望它替代有版权的有线电视套餐、把会员台免费化,方向反了。完全不想碰反代,又要把 1905 丢到光猫 DMZ,也别装。磁盘只剩几个 G、还想顺手跑 Chromium 抓网页源,这台 3.8G 的板子会提醒你。
家用 NAS 我更愿意把数据绑到本地目录,端口避开占用:
services: iptv: image: akiralereal/iptv:latest container_name: iptv init: true ports: - "1905:1905" environment: - mport=1905 - mhost=http://NAS_IP:1905 - mbrowserConcurrency=1 - TZ=Asia/Shanghai # - mpass=自己设 volumes: - ./iptv-data:/iptv/data restart: unless-stopped
起来后打开 /admin;源管理里关掉用不到的模块;「我的频道」里把公告短片隐藏,少让电视开机先播教程。把 /interface.m3u 填进电视 App,EPG 填 /playback.xml。飞牛影视要带 .m3u 后缀。升级是 compose pull && up -d,配置在 ./iptv-data。账号、Cookie、Token 只进后台对应卡片,不要写进随手转发的截图。这次实装从构建到后台可开大约几分钟,配置应用完成时日志就是那句 54 分组 / 809 频道。会员、全代理、公网穿透,这篇都没打开,不把它写成已经给全家做好了有线电视替代。
日常就三件事:订阅只给家里的播放器,密码和路径不要用默认;./iptv-data 做进 NAS 快照,换机用设置里的导出;公网地址跟着反代或 Tailscale 改,别让电视永远停在测试用的 127.0.0.1。
后来我冷静想了一下。家里真正缺的不是又一份「能播的源」,是让客厅那台电视少翻五个 App、少问一句「这个地址还能用吗」。iPTV 不是电视台,更像 NAS 上的频道表值班室:你决定哪些台出列,它负责聚合、去重、出订阅。这句话听起来没有那么刺激,但可能更真实。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
