老爸说想在卧室看电视,网上的电视直播软件大多都不怎么稳定,还有广告。而 GitHub 上的 IPTV 项目里的源清晰度也都不咋地。自己动手,丰衣足食,自己从机顶盒里抓吧!

首先我们需要抓取机顶盒从开机到进入电视播放的所有数据包,怎么抓随你,网上有很多,在这里我就提供一个非常简单的思路。

  • 保证你的机顶盒和电脑在同一个局域网
  • 电脑打开 网络连接 - 属性 - 共享,开启 “允许其他网络用户通过此计算机的 Internet 连接来连接”
  • 机顶盒 - 设置 - 网络 - 静态 IP - 网关 设置为你的电脑 IP
  • 打开人见人爱的 Wireshark

当然你想用路由器抓包之类的什么方法都可以,总之抓到包就行。

抓到完整过程的包之后,找到 POST /EPG/jsp/getchannellistHWCTC.jsp 这个请求

然后跟着下面找到返回包,在 Line-based text data 上右键,导出分组字节流。导出文件名就叫 channel.html

用记事本或者什么编辑软件打开 channel.html ,在开头加上以下代码。

<script>
const goServicesEntry=function(){};
var Authentication={};
var m3u8Channels="";
Authentication['CTCSetConfig']=function(){
const regex = /,?(.+?)="(.*?)"/gm;
if(arguments[0]=='Channel'){
var info={};
while ((m = regex.exec(arguments[1])) !== null) {
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
	
	if(m[1]=="ChannelName"){
	m3u8Channels+="#EXTINF:-1 tvg-name=\"" + m[2] + "\"," + m[2] + "\n"
	}
	if(m[1]=="ChannelURL"){
	m3u8Channels+=m[2]+"\n"
	}
}
}
}
setTimeout(function(){
var a = window.document.createElement('a');
a.href = window.URL.createObjectURL(new Blob([m3u8Channels], {type: 'application/x-mpegURL'}));
a.download = 'IPTV.m3u8';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
},1000);
</script>

保存,然后用浏览器打开就会提示你下载解析好的 m3u8 了。这些 RTSP 或者 HLS 播放地址里面都带有你机顶盒的用户鉴权信息,所以建议不要随便分享给别人,自己抓自己用就好。

使用 PotPlayer 即可正常播放,其中有个别台看不了属于正常现象;在智能电视上推荐使用 Kodi 播放,需要把 .m3u8 扩展名改为 .m3u。

整个过程得到了子安大佬的大力支持和帮助,特别感谢。

一些补充:广东电信 IPTV 在省内电信公网(@163.gd拨号)和私网(@iptv.gd拨号)都能看,如果你不想占用公网宽带速度可以自己做分流;宽带速度足够或者不在意的可以直接看。