在 NAS 上搭了个直播源服务,用了三个月,说点实话
如果你家里只有一台电视在看直播,这篇可以先关了,别折腾。
客厅一个盒子、卧室一个 Apple TV、书房还有个平板,三台都在看,而且每次某个台黑了就得挨个去改——这种情况才值得花一个晚上。
我用了三个月,中间改过两次配置,没后悔。下面把过程和账都摊开。
起因
去年世界杯,我在客厅看球,看到一个台突然卡住不动,退出重进,没了。
后来才知道是列表里的地址失效了。
我手上当时有三份列表:客厅盒子一份、卧室一份、平板一份,来源不同,失效时间也不同。那天晚上干的就是挨个找新列表、挨个导进去,搞到十二点。
更烦的是三份内容不一样。盒子那份塞了一堆购物台,平板那份干净但没体育,客厅那份画质最好但缺两个台。
我以前也买过按月付的现成源,用过两个,都没撑过半年。不是跑路,就是某个台突然没了,问过去也没人管。
所以这次不是想找更好的源,是想把"管源"这件事拿回自己手里。
需要什么
一台常开的机器。我用的是 NAS,2 核 4 G。软路由、闲置小主机也行。
2 G 内存的 NAS 也能跑,但要加一个参数,后面说。
镜像 426 MB,占一个端口。我用 1905,没跟别的服务撞。
时间:第一次装,含查资料大概三个小时。熟 Docker 的话二十分钟。
装的过程
docker pull docker.xuanyuan.run/akiralereal/iptv:4.51.2
NAS 上直连 Docker Hub,十次有三次卡在 Waiting,拉到一半断掉又得重来。所以这台机器上所有镜像都是走轩辕镜像的入口拉的,一次充了钱,到现在没管过。
要是你家网络本来拉得动 Docker Hub,这段跳过就行。
版本和 Digest 在镜像页能核对。
群晖的路径是 /volume1/docker/iptv,威联通是 /share/Container/iptv。我用的前者,下面按这个写。
sudo mkdir -p /volume1/docker/iptv/data
cd /volume1/docker/iptv
cat > compose.yaml <<'EOF'
services:
iptv:
image: docker.xuanyuan.run/akiralereal/iptv:4.51.2
container_name: iptv
init: true
restart: always
ports:
- "1905:1905"
environment:
- mport=1905
- mdataDir=/iptv/data
- mbrowserConcurrency=1
volumes:
- ./data:/iptv/data
EOF
docker compose up -d
mbrowserConcurrency=1 这一行,2 G 的机器必须加。这项目会开无头浏览器解析网页类来源,每路 200~400 MB。我第一次没加,容器十分钟后被系统杀掉重启了一次,日志里什么都看不出来,最后在 dmesg 里找到的。
浏览器打开 http://NAS的IP:1905/admin,没有账号密码。
一分钟左右,页面显示 1036 个频道、56 个分组。
iPTV 后台:共 1036 个频道,左侧选中体育分组装完是什么样
央视频 73 个台、咪咕 84 个,加一份外部订阅 32 个,各抓取模块报出来的总数是 630。页面上的 1036 是把同名频道合并之后的结果,两个数对不上是正常的。
体育分组里 24 个台,CCTV5 和 CCTV5+ 都在,点「播放」直接在网页里出画面,不用开播放器。
播放窗:CCTV5体育,体操比赛这种"先在网页里试一下"的体验挺重要。以前导列表进盒子,要等它加载完、切过去、发现是黑的,再回来改。现在后台里点一下就知道这个台活不活。
最好用的是分档
后台可以建配置档,每档一条自己的地址:
http://NAS的IP:1905/interface.m3u?profile=客厅
http://NAS的IP:1905/interface.m3u?profile=卧室
我用它做了三件事。
客厅那个盒子留全量,1036 个,想看什么自己找。
卧室的 Apple TV 只留体育和新闻,晚上躺下不想在一堆台里翻。
给我妈那台旧盒子只留十五个台。央视一套、十三套,几个省卫视,购物台全隐藏。她只需要这几个,多了反而找不到。
改一次源,三个地址同时生效。这是我最后决定留着它的原因——找现成列表永远做不到这件事。
三个不顺的地方
第一次打开会以为坏了。 日志里刷 interface.txt 不存在,页面分组数是 0。我当时去查了挂载和权限,还 chmod 了一遍,全白费。它只是还没抓完,等一分钟。
日志开头有三行 tini 警告。 镜像入口本来就是 tini,compose 里的 init: true 又套了一层。容器是 Up 的,不影响用。嫌烦就删掉 init: true。
只有一个声音没有画面。 H.265 的问题。进「源管理」,把对应模块的「启用 H.265 原画」关掉,重播。有个别台还得关 HDR。
另外 relay=2 那个全代理模式,我在 2 G 的机器上试过,两路 1080p 一起开就卡死。它会把视频流也转发一遍,等于这台 NAS 当服务器用。除非播放器实在播不了,别开。
成本
硬件 0,用的是现有的 NAS。
电费:常驻不到 500 MB,NAS 本来就 24 小时开着,可以忽略。
软件 0。
镜像源:一年八块。这笔钱我算进去了,因为省掉的是每次卡 Waiting 的那几分钟,还有配 proxy 的麻烦。
时间:第一次三个小时,之后调编排又花了一个小时。
维护:三个月里进后台两次。一次是某个模块的台集体没了,关掉换了个来源;一次是升级。
值不值
值,但有前提。
适合:两台以上设备在看、有常开的 NAS、不介意一个月看一眼后台。
不适合:只有一台电视;完全不想维护;机器只有 1 G 内存;NAS 常年跑满。
还有一个要和家里人说清楚的点:这工具解决的是"你自己怎么管",不是"哪里有台"。公开能访问的地址不等于可以拿去转售或者公开转播,README 里写明了这是个人学习和家庭自用的用途。拿不准的来源,后台里关掉就行。
最后
以前我总觉得看直播这件事,麻烦的地方在"找源"。折腾完这一圈才发现,麻烦的是"管源"。
源会失效,这是常态。但失效之后你要花十分钟还是十秒钟处理,这个可以自己定。
版本 4.51.2,群晖 DSM 7.3 实测。升级:改 compose 里的标签,docker compose pull && docker compose up -d。备份直接拷 ./data,停机别加 -v。
镜像入口:轩辕镜像|akiralereal/iptv 镜像详情
