前段日子办了一条5元/月的宽带做备线,送了一路IPTV电视。稍微研究了下,现在可以在任何有网络的地方看家里的有线电视了。
做了一点微小的工作,记一点笔记,以防自己忘记。
本篇文章需要有一些背景知识(VLAN、路由交换、Linux Shell),分享为主,看看就好。
目录
宽带本身
在营业厅办理了一条上海电信魔都在线宽带,五块钱一个月。根据套餐协议,互联网速率默认4Mbps(512KB/s),访问部份网站(上海网课,城市新闻等)为100Mbps(10MB/s),赠送一条IPTV。
该宽带也属于上海电信推的云宽带业务(光猫作为鉴权,不承担网关作用),NAT网关和DHCP服务在电信的机房,类似云服务的VPC。 出于安全原因,建议加一个自己的路由器避免整个二层网络暴露。云宽带因为有VPC的特性(有直接升级到混合云架构的潜质),提供了一些云硬盘(类似电信运维的SMB共享盘)之类的业务,期待后续电信可以提供更多业务,比如购买电信的云主机可以直接加入家庭宽带的内部网络,采购IPV4、V6,加入SDWAN增值服务等。
上海电信的云宽带内网目前是192.168.71.X网段,无法取得公网IP。(因为鄙户有俩条宽带,一条有公网IP实现从外部接入内网,利用另一条宽带完成IPTV访问。)

上海电信IPTV
上海电信的IPTV业务,由电信的网络加上一个IPTV的机顶盒构成。 过去电视直播需要通过模拟信号传输,而IPTV则是通过tcp/ip网络完成数字信号的传输。相比模拟信号+铜电缆,性能提高的基础上价格大大降低了。
上海电信的IPTV 的网络是一个单独的vlan 85,电脑连接在光猫上,新建一个vlan85(802.1Q)的网络,就可以分到一个IPTV的地址。该地址无法访问互联网,但是可以访问IPTV的所有RTP服务。
比如: 我在mac上,新建了一个vlan 85,使用有线网卡连接,就可以收到IPTV的DHCP Server 分给网卡的一个IP。
此时,我就可以打开播放器,打开以下地址: rtp://239.45.3.209:5140
,播放 IPTV的某一电视频道。

IPTV的机顶盒的网络其实稍微复杂点,它的网口应该虚拟了3个网口(DHCP,VLAN51和VLAN85)
晚上查到很多人非要把IPTV挂在家庭路由器下面,又要在Openwrt里面设置VLAN,设置DHCP-OPTION啥的。
还有人花了一张IPTV业务鉴权的示意图。

其实多布一条网线直接插光猫上就好了,我爷爷房间的wifi走室外的AP,网线直接怼光猫上就好了。
vlan 交换机单线复用连接光猫:
当然,我闲来无事也测试了单线复用的方法:交换机连接光猫的口设置vlan 51,vlan 85 打TAG,vlan 100(选一个没人用的vlan 即可,该vlan就是为了在交换机里虚拟成为一条网线,避免和家里的vlan冲突)。
连接IPTV盒子的口一样设置vlan 51 - tag,vlan 85 - tag,vlan 100 untag,多个交换机记得把上联口打上TAG。
这样的效果就是IPTV的盒子和光猫就可以在正常传输A面网和B面的网络(vlan 85)(虽然我也不知道为啥IPTV为啥这么叫)。
到此,介绍了一些IPTV的背景知识,1.如何在家里可以正常使用IPTV盒子看IPTV,以及 2.如何不用IPTV盒子,直接拿专网地址看IPTV。
使用udpxy 实现组播转TCP单播流
当然可以直接把电信IPTV专网(vlan 85)转发出来,直接看电视,但是电信IPTV的rtp视频流是基于udp的组播流,也就意味着会在同一个广播域(无论Wi-Fi还是有线)中广播。这是需要极力避免的。
Udpxy的作用是将组播的数据流变成TCP协议的单播流,避免了在数据链路层广播。
虽然手上有一些拼多多上买的板子,不过我这里还是装在了家里的群晖上,因为这个NAS正好有俩网口,反正也一直开着。单网口的设备(比如一些安装了Openwrt的电视盒子)也可以,因为专网走的vlan 85,本来就是虚拟的网卡。
运行Udpxy 的效果就是下面的样子:

比如我使用的udpxy server ,在局域网里的地址是 zweisudpxy.local,就可以把原有的播放地址比如 rtp://239.45.3.209:5140
就变成了 http://zweisudpxy.local:4022/udp/239.45.3.209:5140
。
msd_lite 其实也是一个东西,性能相比udpxy更好(据说好十倍)有空测试下。 因为我的群晖(J4125)性能还可以,其实没那么大的性能优化需求。
使用 Entware 给nas 安装udpxy
这部份也记一下,其实不只是群晖的NAS,大部份linux,openwrt盒子之类的东西也都被Entware 支持。
Entware-ng 是一个适用于嵌入式系统的软件包库,使用 opkg 包管理系统进行管理,udpxy或者msd也都受支持。
无需Docker,即使是入门级的 arm的 nas也可以安装。直接参考Github上面的官方文档即可。
装完后重启,就可以使用opkg
命令:

添加一个开机后执行的计划任务:

sudo -H -u username bash -c 'echo "I am $USER, with uid $UID";
/opt/bin/udpxy -T -S -p 4022 -m eth1.85 -c 10'
其中: username,4022,eth1.85 自行根据你的用户名,服务端口与IPTV 专网的网卡(ifconfig 查看)填写。
组播地址哪里来
虽然可以自己抓包来取得(IPTV开机的时候会有一个节目单),不过因为iptv 的地址基本不变化,只需要下载别人准备好的文件,将rtp的部份,替换为自己的单播地址即可。
最后将文件保存为m3u,存在nas或者网络上,在电视上加载。
在安卓电视/Apple TV 上 看IPTV流
安卓电视请使用Kodi 安装 PVR IPTV Simple Client插件,效果如下:

Apple TV的话,可以使用iPlayTV 或者 APTV 这俩APP,效果如下: ( Apple TV 没法截图,用iPad了。)
