免费观看北京移动IPTV

异地的家人平时有看电视的需求,但是不会使用机顶盒,所以一直使用安卓电视端的TVBox,基本上开机就能看电视。最近运营商对这种公开的电视直播源打击越来越大,一个源的有效期甚至只有几个小时,导致家人频繁反馈电视无法观看。为了一劳永逸,打算基于本地IPTV自建直播源,再结合异地组网共享给家人,要是能不花钱,那就更好了。

0. 问题分析

无论是移动、联通还是电信的IPTV,大家都使用组播的方式发送直播数据给机顶盒,理论上我们拿到组播地址,并且通过鉴权,就可以在支持组播协议的三方播放器上观看直播,如VLC。

但如果想把直播源共享给异地网络,就需要首先把组播转换成单播,再通过单播链接拉取直播流,目前主流的转换工具是udpxy和msd_lite。

所以,我们主要需要解决3个问题:

  1. 获取组播地址
  2. 绕过鉴权
  3. 组播转单播

1. 获取组播地址

最简单的方式就是看是否有其他人共享过本地相同运营商的组播地址,比如以下项目:

如果找不到,那就需要自己通过Wireshark抓包,网上的教程很多,可以根据自己的实际情况操作。

2. 绕过鉴权

虽然理论上组播可以增加鉴权机制,如MAC地址校验,账号密码等,但根据大量网友反馈,实际上基本没有运营商的IPTV会使用校验手段。

最简单的验证方式就是:

  1. 使用网线连接光猫的IPTV口和电脑,同时电脑启用DHCP
  2. 在电脑上使用VLC直接播放任意组播地址,如rtp://228.1.1.235:8002
  3. 如果能够播放,则表示此组播源无认证校验

如果不幸你的组播源就是需要认证,那就需要根据具体情况分析了。

3. 组播转单播

组播转单播的原理并不复杂,udpxy和msd_lite会将请单播求链接转换为组播链接,并拉去对应的组播数据流返回给客户端。

但由于光猫的IPTV口与网口通常是2个独立的网口,并且无法复用,这也就意味着你需要一台独立的双网口设备,一个网口接光猫IPTV口,用于接收组播数据;一个网口接局域网LAN口,用于接收单播请求。

考虑到这台设备的本质就是连通2个不同的网络,这其实就是路由器的职责,因此,用路由器运行该服务是比较合理的,还能省去LAN口的连接。

这里主要以OpenWRT为例,其他路由器系统可以参考配置。

3.1. 线路连接

这里根据光猫的IPTV口是否会通过DHCP分配IP,需要采用不同的连接方式。

  1. IPTV口不会分配IP

    这种情况是最简单的了,只需要将光猫的IPTV口插到路由器的LAN口即可。

  2. IPTV口会分配IP

    这种情况下我们需要在OpenWRT中创建一个新的网络接口,并绑定到一个空闲的物理网口。要释放物理网口,可以在网络/网口配置中,取消勾选并保存,这里以eth2为例。新的网络接口配置如下:

    • 名称:iptv
    • 协议:DHCP客户端
    • 设备:eth2
    • 防火墙:iptv(新建)

    最后在网络/接口/设备/br-lan配置/高级设备选项中,打开启用 IGMP 嗅探

3.2 udpxy配置

根据线路连接的不同,配置也会稍有不同:

  1. IPTV口接路由器LAN口

    • 绑定 IP/接口:br-lan
    • 端口:4022
    • 源 IP/接口:br-lan
  2. IPTV口接路由器新建网口

    • 绑定 IP/接口:br-lan
    • 端口:4022
    • 源 IP/接口:iptv

3.3 msd_lite配置

根据线路连接的不同,配置也会稍有不同:

  1. IPTV口接路由器LAN口

    • 端口:4022
    • 源 IP/接口:br-lan
  2. IPTV口接路由器新建网口

    • 端口:4022
    • 源 IP/接口:iptv

4. 测试效果

假设你的路由器IP为192.168.50.1, 组播地址为rtp://228.1.1.235:8002,那么对应的单播地址为http://192.168.50.1:4022/rtp/228.1.1.235:8002,使用VLC即可播放。

最后再结合zerotier或tailscale等异地组网机制,即可在异地通过单播链接获取直播流,实测上行带宽占用大约10Mbps,完全在可用的范围。

另外一点题外话,经过测试,虽然我并没有开通IPTV,但仍然可以观看直播,猜测移动对IPTV的限制较弱,开通IPTV仅仅是给安装一个机顶盒,组播数据则是始终存在的,自此免费的目的也达到了。

5. 参考资料

https://github.com/qwerttvv/Beijing-IPTV/blob/master/howto.md