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

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

群晖NAS转发上海电信的IPTV

前段日子办了一条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访问。)

image.png

上海电信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的某一电视频道。

image.png

IPTV的机顶盒的网络其实稍微复杂点,它的网口应该虚拟了3个网口(DHCP,VLAN51和VLAN85)

晚上查到很多人非要把IPTV挂在家庭路由器下面,又要在Openwrt里面设置VLAN,设置DHCP-OPTION啥的。

还有人花了一张IPTV业务鉴权的示意图。

image.png

其实多布一条网线直接插光猫上就好了,我爷爷房间的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 的效果就是下面的样子:

image.png

比如我使用的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 命令:

image.png

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

image.png

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插件,效果如下:

image.png

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

DF77441A-BD18-4C5E-91D0-D6B112C51794_1_102_o.jpeg