一点关于上海电信IPTV微小的经验

前段日子办了一条5元/月的宽带做备线，送了一路IPTV电视。稍微研究了下，现在可以在任何有网络的地方看家里的有线电视了。

做了一点微小的工作，记一点笔记，以防自己忘记。

本篇文章需要有一些背景知识（VLAN、路由交换、Linux Shell），分享为主，看看就好。

目录

宽带本身

上海电信IPTV

vlan 交换机单线复用连接光猫：

使用udpxy 实现组播转TCP单播流

使用 Entware 给nas 安装udpxy

组播地址哪里来

在安卓电视/Apple TV 上 看IPTV流

宽带本身

在营业厅办理了一条上海电信魔都在线宽带，五块钱一个月。根据套餐协议，互联网速率默认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了。）