常见的电视直播源的检测工具有IPTV Checker、黑鸟播放器等。我自己编写一个Python代码,用requests库的get函数来检测电视直播源是否有效。只要get返回的status_code是200,就判断能连接,但有些电视源的链接是结尾不是.m3u8,而是视频流,用get直接读取会不停地读取数据,因此需要设置get带有stream=True参数,限定timeout=5,每次只读取最多1MB的视频流数据并计时,如果连接成功则输出连接所需的时间,否则输出异常。
本文示范的代码只能测试http(s)的电视源,不支持其他如rtsp、rmp、p2p、mitv等协议。代码如下:
import time
import requests
# ll是电视直播源的链接列表
ll=['http://........','https://.......']
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}
se=requests.Session()
for i in ll:
now=time.time()
try:
res=se.get(i,headers=headers,timeout=5,stream=True)
if res.status_code==200:
for k in res.iter_content(chunk_size=1048576):
# 这里的chunk_size是1MB,每次读取1MB测试视频流
# 如果能获取视频流,则输出读取的时间以及链接
if k:
print(f'{time.time()-now:.2f}\t{i}')
break
except Exception:
# 无法连接并超时的情况下输出“X”
print(f'X\t{i}')