装了IPTV,设备是一个cable modem和一个IPTV STB. 前者把HFC变成普通的以太网,后者负责解码和播放。
本着有RJ45的设备,都插电脑抓抓包的习惯,发现直播是基于组播的,协议用的是RTP。
全能播放器VLC出马,输入对应地址,果然在电脑可以播放。
更有趣的是,收费台的鉴权是在机顶盒完成的,用电脑直接访问地址的话,播放毫无压力。
于是,一个通过openwrt+igmpproxy+udpxy+xupnpd+dlna的方案被研究出来,实现了原机顶盒不受影响,电视通过DLNA功能也能看包括收费台的全部节目,电脑通过内网,还能看运营商提供的网络直播和回看,基本实现了电视剧和球赛兼得。
先说说igmpproxy,顾名思义实现igmpproxy协议的代理~
这个软件在openwrt官方源是有的,直接安装即可,但配置上比较讲究。
配置文件在/etc/config/igmpproxy
config igmpproxy option quickleave 1//使能quickleave config phyint option network eth0.1//上行端口,也就是路由要连接modem,具体数字因人而异 option direction upstream//配置为上行端口 list altnet 192.168.56.0/24//允许的地址。这个地址要通过wireshark抓包查看。这个地方不是写组播地址,而是组播服务器的地址。 config phyint option network br-lan//下行端口的名称,这里我在vlan分配了两个物理端口,并配成桥连。 option direction downstream//配置为下行端口
自此igmpproxy就配完了,条目不多,但每个都要搞清楚。
下面是对应的防火墙配置
//允许IGMP数据包入站 config rule option target \'ACCEPT\' option src \'wan\' option name \'Allow-IGMP\' option proto \'IGMP\'
//允许udp数据入站 config rule option target \'ACCEPT\' option src \'wan\' option proto \'udp\' option name \'Allow-UDP-igmpproxy\' option family \'ipv4\' option dest \'lan\' option dest_ip \'224.0.0.0/4\'
防火墙除了目标区域和组播地址,不清楚功能的情况下,尽量不要改动别的参数,这里的目标地址以及包括了全部组播地址。
完成配置后,路由器应该能串联在modem和机顶盒之间,机顶盒的功能不受任何影响。