DEAD MAN CODING

FOOOLING.COM

用Apple TV看电信IPTV

July 6, 2018, 11:50 a.m.

(有点标题党,我不是针对谁,我这里说的是所有平台播放电信IPTV的方法)

世界杯期间,如何看球是大家会遇到的一个问题。选择有很多:咪咕、优酷、电信机顶盒播放IPTV等。

我家的机顶盒是悦盒,看了下规格,最大能支持到2160p@30HZ,当然对于直播信号1080P@30HZ来说绰绰有余,但无法解决以下问题:


1. 60HZ的电视,30HZ的输出界面一定会感觉很卡顿, 而换成1080P@60HZ又感觉自己亏了 
2. 色彩,悦盒的整体色彩不如Apple TV 4K的HDR模式(可能是心理作用) 
3. 多客户端同时看(Emmmm..)


配置过程稍有复杂,首先理解一个事情,IPTV在悦盒上能看是因为悦盒主动发起了DHCP请求,去获取了一个IP地址,而IPTV的网络里面,视频信号没有加密,只要知道视频源IP,就能直接播放走起」。


以下的方式,也自然是通过模拟这个请求,去获取IP地址。

悦盒的IPTV网络IP获取认证抓包是:

Bootstrap Protocol
    Message type: Boot Request (1)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0xaaaaaaaa
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0 (0.0.0.0)
    Your (client) IP address: 0.0.0.0 (0.0.0.0)
    Next server IP address: 0.0.0.0 (0.0.0.0)
    Relay agent IP address: 0.0.0.0 (0.0.0.0)
    Client MAC address: Shenzhen_aa:bb:cc (54:93:aa:aa:aa:aa)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type
        Length: 1
        DHCP: Request (3)
    Option: (61) Client identifier
        Length: 7
        Hardware type: Ethernet (0x01)
        Client MAC address: Shenzhen_aa:bb:cc (54:93:aa:aa:aa:aa)
    Option: (50) Requested IP Address
        Length: 4
        Requested IP Address: 10.10.10.10 (10.10.10.10)
    Option: (57) Maximum DHCP Message Size
        Length: 2
        Maximum DHCP Message Size: 1500
    Option: (60) Vendor class identifier
        Length: 5
        Vendor class identifier: XXITV
    Option: (12) Host Name
        Length: 32
        Host Name: 00101234567890123456789012345678
    Option: (55) Parameter Request List
        Length: 15
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (121) Classless Static Route
        Parameter Request List Item: (33) Static Route
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (12) Host Name
        Parameter Request List Item: (15) Domain Name
        Parameter Request List Item: (26) Interface MTU
        Parameter Request List Item: (28) Broadcast Address
        Parameter Request List Item: (42) Network Time Protocol Servers
        Parameter Request List Item: (51) IP Address Lease Time
        Parameter Request List Item: (54) DHCP Server Identifier
        Parameter Request List Item: (58) Renewal Time Value
        Parameter Request List Item: (59) Rebinding Time Value
        Parameter Request List Item: (119) Domain Search
    Option: (255) End
        Option End: 255

其中验证字段有


1. Option 61, 也是MAC地址 
2. Option 60, 客户端类型, 应该取决于不同地区 
3. Hostname, 应该是IPTV的客户端id,每个机器会有一个固定值(XXITV请自行替换成省名ITV)


这里有几套方案:


1. 路由器双拨,WAN1口正常上网,WAN2口拨IPTV网络(需要修改WAN2口获取IP的命令,强制更改以上这些字段,并更改MAC地址),通过路由表决定哪些流量走互联网,哪些流量走IPTV
2. LAN里面找个机器,插2个网卡,eth0获取内网IP,eth1用来模拟IPTV电视盒子,并做好路由表+NAT转发,互联网流量走eth0,IPTV走eth1,LAN路由器上也做好路由转发,IPTV统统转发到这个选定的机器上。


实际操作时,由于梅林系统WAN口之间要么是「负载均衡 」,要么是「互为主备 」,然后「负载均衡 」还只支持到1:1 - 1:9的流量转发,更改路由表还得重启系统。

梅林系统的DHCP更改有点挫,界面上没法方便设置Option 60,需要到后台kill掉对应网卡的DHCP进程后使用类似以下命令去实现

/sbin/udhcpc -i vlan3 -p /var/run/udhcpc1.pid -V XXITV -s /tmp/udhcpc -H 00101234567890123456789012345678

最后选择了LAN里面找台机器转发的方式,机器就自然走了树莓派+USB网卡的方案。


电视的列表可以自行到悦盒提取或者利用网友的方案,利用udpxy将rtp协议转换为HTTP协议,并将频道列表写到m3u文件中,在客户端上安装支持m3u的电视客户端后,导入这个m3u文件,即可播放了。


调通后,不得不说,Apple TV对H264信号的处理还是比悦盒牛逼一些的,毕竟成本也在那。意外之喜是所有手机、平板也能看了,甚至还有办法在任意地点用任意设备连回家网看IPTV了。

友情链接