北京移动IPTV组播转单播

2

在任何设备都可以看 IPTV,包括手机和电脑。

1. 前置工作

1.1 测试 IPTV 信号

1.2 单线复用

端口绑定
  • 单线复用教程:https://www.right.com.cn/forum/thread-8342082-1-1.html
    • 绑定上网业务(含有 INTERNET 的名称)和 IPTV 业务(含有 Other 的名称)到网口 1,这一步是实现单线复用,也就是光猫的网口 1 到路由器 WAN 口一根网线同时传输上网 +IPTV 两种信号。
  • 测试单线复用
    • 北京联通的 rtp://239.3.1.241:8000 或者北京移动的rtp://228.1.1.115:8000
    • 如果可以播放出画面,那接下来再看看能不能上网,如果还可以上网,那光猫这个接口就属于可以单线复用

1.3 IPTV 组播和单播

  • 单播 (Unicast) 就像是网上购物后收快递:你想买一件特定商品,下单后,商家会把这个包裹专门打包,通过快递员,一对一地送到你家。你的邻居就算也买了同样的东西,商家也需要为他另外打包一个包裹,再派一个快递员送过去。你收你的,他收他的,互不干扰。
    • 主要用于视频点播 (VOD)、时移电视 (Time-shifting) 和回看 (Playback)。
    • 当你打开电视盒子,选择一部电影《流浪地球》开始观看时,你的电视盒子就向 IPTV 服务器发出了一个 “ 单播 “ 请求。服务器随即为你创建一个专属的数据流,从头开始播放,并只发送给你。你可以随意快进、暂停、后退,因为这条数据流是为你量身定制的。
  • 组播 (Multicast) 就像是看电视直播:电视台在晚上 7 点播放新闻联播。它只发射一个信号,所有把电视频道调到这个台的观众,都能接收到完全相同的内容。电视台不需要为每一个观众都单独发射一次信号,大大节省了资源。想看的人就 “ 加入 “(调台),不想看的人就 “ 离开 “(换台)。
    • 组播是一种 “ 一对多 “(one-to-many) 的通信模式。服务器只发送一份数据包到一个特定的 “ 组播地址 “,网络中所有对这个 “ 组 “ 感兴趣的客户端都可以加入该组,并接收这份数据。数据包在网络传输路径的分叉点上才会被复制和分发。
    • 主要用于电视频道直播 (Live TV)。

2. 配置

光猫桥接模式,路由器宽带拨号,刷了 ImmortalWrt 系统,目前电脑连接光猫的 iptv 口可以看组播,怎么设置电脑连接路由器的 lan 口也可以看组播。光猫 ip 地址 192.168.1.1,路由器地址 192.168.6.1

  • 你的路由器(OpenWrt)目前只处理了上网的流量,对于 IPTV 的组播流量,它默认会当成普通的外网流量给 “ 挡 “ 在门外,不会主动转发到你的局域网(LAN)里。
  • 要解决这个问题,我们需要让路由器 “ 认识 “IPTV 流量,并 “ 代理 “ 你局域网里电脑的请求,去向光猫获取组播视频流,然后再转发给你的电脑。
  • 获取 IPTV 的 VLAN ID。
  • 新增网络接口 eth1.1010
  • 网桥设备 lan 开启 IGMP 嗅探
IGMP嗅探

2.1 新增网络接口

1
2
3
4
5
6
7
cat /etc/config/network

config interface 'IPTV'
option proto 'static'
option device 'eth1.1010'
option ipaddr '169.254.101.1'
option netmask '255.255.255.0'
iptv接口

2.2 配置防火墙

我们需要告诉防火墙,允许 iptv 区域的流量和 lan 区域的流量进行通信。

iptv防火墙
  1. 进入 网络 -> 防火墙
  2. 你会看到刚才新建的 iptv 区域。点击它旁边的 编辑
  3. 常规设置:
    • 入站数据出站数据转发 都设置为 接受 (accept)
    • 勾选 IP动态伪装 (Masquerading)
    • 在 允许转发到目标区域 中,确保 WAN(或者你的 pppoe-wan 所在区域)被勾选。
    • 在 允许从源区域转发 中,确保 LAN 被勾选。
  4. 回到防火墙主页面,我们还需要添加两条重要的通信规则。
    • 规则一:允许 IGMP 流量
      • 在 通信规则 标签下,点击 添加
      • 名称:Allow-IGMP-From-IPTV
      • 源区域:选择 iptv
      • 目标区域:选择 设备(输入)
      • 协议:选择 IGMP
      • 动作:选择 接受 (accept)
      • 点击 保存
    • 规则二:允许 IPTV 组播流进入 LAN
      • 再次点击 添加
      • 名称:Allow-Multicast-To-LAN
      • 源区域:选择 iptv
      • 目标区域:选择 lan
      • 协议:选择 UDP (因为视频流通常是 UDP)。
      • 动作:选择 接受 (accept)
      • 点击 保存

防火墙通信规则

2.3 配置 Igmpproxy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@ImmortalWrt:~# cat /etc/config/igmpproxy
config igmpproxy
option quickleave 1
option verbose 3

config phyint
option network 'IPTV'
option direction upstream
list altnet '0.0.0.0/0'

config phyint
option network 'lan'
option direction downstream
list altnet '192.168.6.0/24'
1
2
3
4
5
6
7
8
9
10
# 查看 IPTV 网络
ubus call network.interface.IPTV status
/etc/init.d/network restart
/etc/init.d/network reload

# 命令
/etc/init.d/igmpproxy start
/etc/init.d/igmpproxy stop
/etc/init.d/igmpproxy status
logread -e igmpproxy

2.4 配置 Udpxy

udpxy配置
已启用✅ 勾选启用 udpxy 服务
刷新✅ 勾选网络变动时自动重启 udpxy
详细日志记录⬜ 可选开启会增加日志量,排错时才用
客户端统计信息✅ 勾选在 /status 页面显示连接统计
HTTP 监听接口br-lan(或 lan这是 udpxy 提供 HTTP 流的接口,供局域网客户端访问
端口4022默认即可,除非你有冲突
多播订阅源网络不填或默认一般留空
组播订阅源接口选你的 IPTV 上行接口,比如 eth1.1010 或 wan.iptv对应你 igmpproxy “ 上游 “ 那个接口(即光猫出来的 VLAN)
客户端数量上限20(根据路由器性能酌情)一般 10-30 比较合理
日志文件/var/log/udpxy系统默认即可
入口缓冲区大小4096(默认)不需要改
缓冲区消息数 / 时间限制默认值可保持 1 和 -1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# udpxy 启动命令
/etc/init.d/udpxy enable
/etc/init.d/udpxy start
/etc/init.d/udpxy stop


/etc/init.d/udpxy status


# 查看 udpxy 状态
http://192.168.6.1:4022/status

# 组播转单播
http://192.168.6.1:4022/udp/228.1.1.189:8000

# 修改单播地址
https://raw.githubusercontent.com/unix2dos/Beijing-IPTV/refs/heads/master/IPTV-Mobile.m3u

实测:udpxy 成功后可以关闭 igmpproxy

udpxystatus

2.5 新工具 rtp2httpd

配置后可以直接网页看,更方便。上游接口选择 eth1.1010

1
2
/etc/init.d/rtp2httpd status
/etc/init.d/rtp2httpd enable
rtp2httpd 1

3. 资源

3.1 IPTV

https://iptvindex.com/

3.2 播放软件

  • mac: vlc
  • window: vlc
  • ios: ntplayer
  • 电视: DIYP

4. 参考教程