直播源自动检测工具iptv-m3u-maker

【申明】:本文不提供任何播放列表或其他数字内容。屏幕截图中的频道和图片仅供演示和说明之用。

老苏以前介绍过 IPTV Checker ,能对直播源进行有效性检测

文章传送门:用Jellyfin➕xTeVe播放和录制IPTV

今天要介绍的 iptv-m3u-maker 功能是一样的,所不同的是,IPTV Checker 是个桌面端应用,需要自己运行,而 iptv-m3u-maker 是服务,可以自动运行,不需要人工干预

从源码中 crontab 的时间表达式看,任务将在每周日的午夜(凌晨 00:00)执行一次。

如果你等不及,可以在修改完直播源文件后,直接点 抓取 开始运行检测

软件的工作流程:

  • 收集网络上现有的一些网友共享的直播源, 将其汇总后.

  • 对每个连接进行测试, 同时记录当前网络对该连接的延迟, 同时对其标题进行一定的格式化.

  • 最终, 针对当前网络生成一份可用的, 同类速度最优的 “播放列表”.

  • 将其输出为 m3u 文件

  • 程序内置服务器功能, 本地运行访问: http://{你的IP}:9527/m3u

源代码有点老,起码 3 年没更新了,而且也还有不少问题,不过不影响其核心功能的使用

构建镜像

如果你不想自己构建,可以跳过,直接阅读下一章节

官方提供了 Dockerfile ,但原生的代码在编译成镜像之后,会报错👇

1
FileNotFoundError: [Errno 2] No such file or directory: './plugins/dotpy_source'

老苏参考了 Issue #47 对代码做了调整,相应的 Dockerfile 也做了微调,取消了直接从 github 上下载代码,而是使用了本地修改后的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
FROM python:3.7

ADD ./crontask /etc/cron.d/crontask
WORKDIR /srv

RUN pip install -U Flask

RUN apt-get update \
&& apt-get install -y --no-install-recommends cron git wget \
&& apt autoremove -y \
&& apt-get clean

RUN rm -rf /var/lib/apt/lists/* \
&& chmod 0644 /etc/cron.d/crontask \
&& touch /home/boot.sh \
&& echo "#!/bin/sh\n" > /home/boot.sh \
&& echo "service cron start" >> /home/boot.sh \
&& echo "\n" >> /home/boot.sh \
&& echo "/usr/local/bin/python /srv/iptv/python/main.py" >> /home/boot.sh \
&& echo "\n" >> /home/boot.sh \
&& echo "/bin/bash" >> /home/boot.sh

#RUN git clone https://521github.com/EvilCult/iptv-m3u-maker.git \
# && mv iptv-m3u-maker iptv

WORKDIR /srv/iptv
COPY . .

CMD [ "/bin/bash", "/home/boot.sh" ]

主要的变动包括:

  1. 删除了 http 目录下演示用的数据 tv.jsontv.m3u
  2. 删除了 python/plugins 目录下 dotpy_source 文件,改为由我们自己提供,具体格式后年会提到;
  3. 修改 dotpy.pysourcePath 的值,由 './plugins/dotpy_source' 改为了 '/srv/iptv/python/plugins/dotpy_source'

删除数据是为了让软件成为更纯粹的工具,避免不必要的麻烦~~~

构建镜像和容器运行的基本命令如下👇

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载代码
git clone https://github.com/EvilCult/iptv-m3u-maker.git

# 进入目录
cd iptv-m3u-maker

# 构建镜像
docker build -t wbsu2003/iptv-m3u-maker:v1 .

# 运行容器
docker run -it -d \
--name iptv \
-p 9527:9527 \
-v $(pwd)/python/plugins/dotpy_source:/srv/iptv/python/plugins/dotpy_source \
wbsu2003/iptv-m3u-maker:v1

准备文件

首先需要准备一个需要检测的直播源文件,比如叫 playlist.txt,格式很简单

1
2
3
名称1,url1
名称2,url2
名称3,url3

你可以参考源代码中的 dotpy_source 文件,文件地址:https://github.com/EvilCult/iptv-m3u-maker/blob/master/python/plugins/dotpy_source

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 iptv-m3u-maker ,选择第三个 wbsu2003/iptv-m3u-maker,版本选择 latest

docker 文件夹中,创建一个新文件夹 iptv-m3u-maker,并将我们前面准备好的 playlist.txt 放入当前文件夹内

文件 装载路径 说明
docker/iptv-m3u-maker/playlist.txt /srv/iptv/python/plugins/dotpy_source 待检测的播放列表源文件

【注意】:是 添加文件 不是 添加文件夹

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
9527 9527

默认没有对外暴露端口,需要自己添加

+ 号添加

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
# 新建文件夹 iptv-m3u-maker
mkdir -p /volume1/docker/iptv-m3u-maker

# 进入 iptv-m3u-maker 目录
cd /volume1/docker/iptv-m3u-maker

# 运行容器
docker run -d \
--restart unless-stopped \
--name iptv \
-p 9527:9527 \
-v $(pwd)/playlist.txt:/srv/iptv/python/plugins/dotpy_source \
wbsu2003/iptv-m3u-make

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
version: '3'

services:
iptv:
image: wbsu2003/iptv-m3u-make
container_name: iptv
restart: unless-stopped
ports:
- 9527:9527
volumes:
- ./playlist.txt:/srv/iptv/python/plugins/dotpy_source

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 iptv-m3u-maker
mkdir -p /volume1/docker/iptv-m3u-maker

# 进入 iptv-m3u-maker 目录
cd /volume1/docker/iptv-m3u-maker

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:9527 就能看到主界面

  • 抓取:手动启动对 playlist.txt 的有效性检测;
  • 列表:下载检测完成后的可用列表;
  • 状态:查看检测日志;

容器启动时,会自动对 playlist.txt 中的地址依次进行检测,所以你进入 状态 会看到日志

第一次运行,在结束之前,点 列表 是会报错。之后,你下载的只是上一次的结果

只有看到 抓取完成 才行

状态 页面不会自动刷新,需要手动刷

这个时候下载的 tv.m3u 才是正确的本次抓取成功的结果

将下载的 tv.m3u导入 IPTVnator,基本上可以秒开,因为针对的是同一个网络做的有效性检测,所以还是比较精准的

文章传送门:跨平台IPTV播放器IPTVnator

参考文档

EvilCult/iptv-m3u-maker: IPTV 国内+国外 电视台直播源m3u文件, 收集&汇总&本地源脚本
地址:https://github.com/EvilCult/iptv-m3u-maker

Docker运行报错 · Issue #47 · EvilCult/iptv-m3u-maker
地址:https://github.com/EvilCult/iptv-m3u-maker/issues/47

IPTV-Projects | EvilCult.Dev
地址:https://evilcult.dev/07/19/2019/IPTV-Projects/