以组播流方式替换运营商IPTV直播频道

前言
研究这个初衷是因为家里没办法收到自己想要的地波,后来入某群后发现有设备可以直接把地波串流到IP网络,自己是网络技术爱好者,纯粹的网络底层技术爱好,基本上研究的范畴不涉及到软件系统,所以从一开始就没想过要root电视root机顶盒安装第三方之类的想法,也没有这个能力。
但想必弄过串流的网友都想把串流融入到自家机顶盒(当然是走IP的机顶盒,广电的无能为力),不需要看自己串流的时候频繁切换软件或者机顶盒,奈何运营商的IPTV又不支持自定义频道。偶尔在网络网上发现有文章提及到运营商的IPTV直播频道大多使用组播技术,通过抓包取得组播地址后可以绕开机顶盒直接用电脑的VLC播放软件可以直接播放直播节目,而我自家同时安装了中国移动和中国电信的宽带和IPTV,根据网上的文章我在中国移动线路上(完全不需要认证)通过VLC打开相应的RTP地址可以直接播放到直播频道,在确认这个基础上开始了如何替换特定频道的研究。而我通过替换的方法已经稳定在中国移动的机顶盒上观看了超过半年的时间。
而中国电信的机顶盒我一直认为广东地区的直播频道用的不是组播协议,所以也没想过在中国电信的机顶盒上实现类似移动的替换方法,原因是教科书的误导,认为PPPoE认证的其中一个缺点是不支持组播。而在最近的研究发现其实电信的直播频道也有使用组播技术,只不过电信比移动更加智能能自动适应不同网络环境,简单的来说就是能取到组播流的网络环境就取组播流,不能取组播流就会自动取单播流。而最最最重点的是,电信的组播流是封装在PPPoE数据里面的,也就是在不通过PPPoE认证的情况下是没有办法像移动那样直接取得组播流的,有网友反映某些地方的电信可以不认证直接取到,这个就不好评论了,但起码实测广东珠海地区是必须通过PPPoE认证后才能取到(光猫里的组播vlan设置可有可无)。

言归正传,应网友要求,写出中国电信版IPTV盒子的替换流方法,关于中国移动版的待日后有时间再写。在操作之前请先注意一些问题,替换的频道没办法调整字幕和音轨;中国电信的盒子有些版本会先取单播流(已知华为EC6108V9C),再取组播流,导致转台的时候先显示原来的频道,要隔10多秒才会切换到替换后的频道,这个比较烦人;最好有一定网络基础,对RouterOS有一定接触和理解。

基本思路就是寻找替换目标频道,生成一个一样的组播源发送到机顶盒,同时控制原生组播数据发送到机顶盒避免冲突。

组播源
本人的串流是从TVH出来,再通过VLC转成组播串流发送到局域网内,当然有网友说可以不用TVH直接出组播串流,奈何本人TVH也同时在用。且我的应用场景组播源和机顶盒不在同一个地方,跨互联网传输,一个组播源供多个不同地方的机顶盒同时使用,本人实际在用的方案比本文的解说更为复杂,还会涉及VPN和组播路由。

路由器需求:
1、支持组播代理
2、支持IGMP Snooping
本人是Routeros的粉丝,以下方案均使用ROS完成,当然理论上支持以上功能的路由器也可以,但路由器本人只用ROS,手上也没有其他路由器。

设定场景如下:TVH、组播源、机顶盒均在同一局域网下,TVH、IPTV机顶盒、VLC组播源三者均在RouterOS同一网桥Bridge下的成员端口,即三者连接在同一个交换机。
以组播流方式替换运营商IPTV直播频道_第1张图片

1、 取得机顶盒网络账号
取得机顶盒的网络账号,注意是网络账号,在机顶盒的网络设置菜单里面可以查询到账号一般是一个带“@iptv.gd”域名的账号,而密码请自行查询装机单或者尝试简单密码如“12345678”、“12341234”,不行找电信要,再高级点可以在ROS上搭个PPPoE服务器选PAP认证打开调试模式可以直接看到机顶盒发送过来的用户名和密码。

2、 连接网线并设置拨号连接
ROS通过网线连接到光猫的itv口,在ROS上设置拨号信息,如下图红色部分,interface选择你的ROS实际连接到光猫的端口,我这个选用VRRP口的原因是我网络和电视都是同一根线拨号,也就是网络和电视都是同一个路由器多拨处理的,还会涉及策略路由,请大家忽略。比方说ROS接的1端口,那么interface选择“ether1”,name暂定为“tv”
以组播流方式替换运营商IPTV直播频道_第2张图片
确保PPPoE连接正常连接上,“R”标记未已连接。使用Winbox的朋友请按命令行的目录(包括后续涉及的命令)找到相应的设置项。

3、 升级ROS并安装组播组件
原生ROS默认是没有安装组播代理组件的,需要手工安装,建议在安装前先按下图升级ROS到最新版本
以组播流方式替换运营商IPTV直播频道_第3张图片
完成下载后请重启升级,升级完成后请到https://mikrotik.com/download下载相应硬件对应的“Extra packages”软件包,这个是一个压缩文档,解压后找到“multicast-6*****.npk”,把文件通过winbox或者ftp拖到ROS根目录后重启ROS完成安装。
完成组播组件安装后你应该可以在命令行或者Winbox下进入如下目录:
以组播流方式替换运营商IPTV直播频道_第4张图片
4、 设置组播代理
组播代理设置菜单主要需要确定两个参数,组播上行和下行端口
在这里插入图片描述
“tv”作为上行口(upstream=yes),负责转发来自下行口“bridge”所连接用户发送的组播请求数据到电信侧网络。

5、 修改机顶盒接入网络方式
把机顶盒的网络接入方式修改为DHCP,接入到ROS“bridge”网桥所属端口,如果ROS相关参数设置正常,机顶盒应该能顺利登录到IPTV系统。

6、 验证组播代理工作状态并获取替换频道组播地址
机顶盒转到任意频道,此时观察ROS组播代理状态目录
在这里插入图片描述
如果能看到类似项目upstream-interface=tv active-downstream-interfce=bridge 那证明组播代理正在工作,而souce大概是125.x.x.x开始的组播源是电信的直播频道源地址,所以对应239.x.x.x这个地址就是正在观看频道的组播地址,当然这里没有显示端口,端口实际上据我抓包观察得出的结果都是udp5146,所以当前频道完整的组播地址是rtp://239.x.x.x:5146,此时如果把电脑接到ROS bridge所属任意成员端口应该可以打开组播地址观看直播频道。
到这一步你可以开始选择替换频道,转到一些你认为没有价值的频道,记下该频道的组播地址以作后面替换使用。(如果你发现你转台的时候,代理状态能迅速刷新出新的组播源地址,那么恭喜你,如果要等10多秒才能看到组播源地址,那后面完成替换后转台的时候仍需要等10秒以上才能切换)
比方我选择了原生频道的90、91、93分别对应组播地址239.77.0.180、239.77.0.22、239.77.0.16
选好替换目标频道后建议在没完成后面步骤前关掉机顶盒或者转到其他频道,(别问我为什么,为了避免后续出现问题)

7、 搭建组播源
在产生组播流的PC上新建一个bat文件并输入以下内容:
以组播流方式替换运营商IPTV直播频道_第5张图片
第一行是切换到VLC安装目录,目录位置根据实际修改
第二行开始实际上一行内容,记事本自动换行了,其中http这串是TVH出来的串流地址,“kkk:kkk”是TVH的用户名密码,这样的HTTP地址可以每次使用一样的串流地址,“rtp”后面的dst=X.X.X.X 这个是输出的组播地址,填写第六步记下来的没价值频道的组播地址。根据需要替换的频道数量编写多个bat文件并运行。至于VLC的命令含义请自行百度,我这个命令参数是不对原来串流作任何编码压缩,所以出来都是原版编码,简单说就是无损。
运行BAT后可以通过VLC播放器打开rtp://239.x.x.x:5146测试

8、 控制bridge内组播流转发
如果你不考虑效率和合理性可以跳过此步骤;
此时第七步负责发送组播流的PC会不断向内网发送组播数据,因为默认情况下ROS的bridge没有启用IGMP Snooping,所以会把组播数据当广播处理,也就是发送到bridge其他的所有活动端口,包括机顶盒所连接的端口,但这不是我们想要的结果,我们要的结果是在机顶盒需要的时候才发送到机顶盒,所以我们需要打开Bridge的IGMP Snooping功能设置Bridge成员端口不转发未知组播数据。
以组播流方式替换运营商IPTV直播频道_第6张图片以组播流方式替换运营商IPTV直播频道_第7张图片
我这个Bridge里面只有两个端口,如果按一般的ROS默认设置,Bridge默认包含ehter2/3/4/5 多个端口,也就是需要把所有成员端口均设置为“unknown-multicast-flood=no”,以此控制机顶盒有请求时才把VLC发送的组播数据转发到机顶盒。

9、 避免组播流冲突
设置过滤器禁止原生频道组播流通过“tv”口代理转发到bridge的成员端口,在ROS防火强中添加如下规则:
以组播流方式替换运营商IPTV直播频道_第8张图片

10、测试
此时打开机顶盒转到用作替换用户的频道,机顶盒请求组播数据,即可获取到由VLC产生的组播流,同时组播请求也会被ROS代理转发到tv口,tv口会返回原生组播流,但立刻会被第九步的防火墙拦截,防止机顶盒收到原生组播流。

已知问题:
1、 华为EC6108V9C盒子会先使用单播源,再检测组播,导致换台的时候先显示原生频道,至少10秒以后才会切换到替换频道。
2、 如果在观看替换频道时替换组播源数据中断或者卡顿超过数秒会导致盒子以单播方式跳回原生频道,且一旦盒子切换到单播方式后则不会切换回组播,导致替换频道失效,必须重启机顶盒,有些型号如EC6108V9C需要断电重启。
3、 机顶盒没办法设置音轨和字幕,希望有网友能解决这个问题。虽然可以在VLC进行转码并把字幕压进视频,但有损画质且资源耗费巨大。
4、 ROS的组播代理即使在Bridge开启了IGMP Snooping 后仍会把电信上游的组播数据泛洪到bridge内所有成员端口,这个问题有空的时候我打算反应给官方,希望能修复问题。

你可能感兴趣的:(IPTV)