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了。