海运的博客

openwrt单线复用iptv并将组播转为http单播流任意设备观看

发布时间:November 29, 2023 // 分类: // No Comments

光猫内将iptv连接设置为桥接模式:
2023-11-29_083506.jpg

将上网和iptv绑定到对应的vlan,路由通过vlan区分iptv和上网。
2023-11-29_083535.jpg
如果光猫不能修改vlan,或不正常,我这个别猫直播黑屏,使用交换机中转并关闭igmp:
2023-12-04_070845.jpg
2023-12-04_070903.jpg
2023-12-04_070916.jpg
openwrt交换机配置vlan:
2023-11-29_083618.jpg

监听iptv流量获取dhcp认证信息,电视盒mac,主机名和Option60 Vendor class identifier:
2023-11-29_082520.jpg
2023-11-29_082624.jpg
2023-11-29_082739.jpg

openwrt配置iptv dhcp,0x3c即Option60用以发送16进制加密信息,dhcp有选项vendorid但是发送的是字符信息。
这样默认会发送两个Option60,修改文件/lib/netifd/proto/dhcp.sh内${vendorid:+-V "$vendorid"} \为-V '' \即可。
也可以将16进制option60设置vendorid参数并修改为${vendorid:+-V '' "-x 0x3c:$vendorid"}

config interface 'IPTV'
        option proto 'dhcp'
        option device 'eth1.23'
        option hostname 'xxxxxxx'
        option sendopts '0x3c:xxxxxxx'
        option peerdns '0'
        option delegate '0'
        option macaddr 'xxxxx'
        option defaultroute '0'

config interface 'MODEM'
        option proto 'static'
        option device 'eth1.22'
        list ipaddr '192.168.1.2/24'
        list ipaddr '192.168.0.2/24'
        option delegate '0'
        option defaultroute '0'

使用udpxy或msd_lite将组播转为http单播:

cat /etc/config/msd_lite
config instance
        option 'enabled' '1'

        # Bind address
        list 'address' '0.0.0.0:9999'
        #list 'address' '[::]:9999'
        # For multicast receive
        option 'network' 'IPTV'

        # 0 = auto detect
        option 'threads' '1'
        # Bind threads to CPUs
        option 'bind_to_cpu' '0'

        # Disconnect slow clients
        option 'drop_slow_clients' '0'
        # Pre cache size
        option 'precache_size' '4096'
        # Stream receive ring buffer size
        option 'ring_buffer_size' '1024'
        # Multicast receive socket buffer size
        option 'multicast_recv_buffer_size' '512'
        # Multicast receive timeout
        option 'multicast_recv_timeout' '2'
        # Do IGMP/MLD leave+join every X seconds
        option 'rejoin_time' '0'
cat /etc/config/udpxy 
config udpxy
        option disabled '1'
        option respawn '1'
        option verbose '0'
        option status '1'
        #option bind '0.0.0.0'
        option port '9999'
        option source 'eth1.23'
        option max_clients '100'
        # option log_file '/var/log/udpxy'
        # option buffer_size '4096'
        # option buffer_messages '-1'
        # option buffer_time '-1'
        # option nice_increment '0'
        # option mcsub_renew '0'

iptables:

iptables -A INPUT -i eth1.23 -p udp -d 224.0.0.0/4 -j ACCEPT
iptables -A INPUT -i eth1.23 -p igmp -d 224.0.0.0/4 -j ACCEPT
iptables -A INPUT -i eth1.23 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1.23 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

当iptv接口重启时重启msd_lite:

cat /etc/hotplug.d/iface/95-msd_lite 
#!/bin/bash
if [ $ACTION = "ifup" -a "$INTERFACE" = "IPTV" ]; then
  /etc/init.d/msd_lite restart
fi

#[ "$ACTION" = "ifdown" -a "$INTERFACE" = "IPTV" ] && {
#/etc/init.d/msd_lite stop
#}

#[ "$ACTION" = "ifup" -a "$INTERFACE" = "IPTV" ] && {
#/etc/init.d/msd_lite start
#} 

openwrt交换机端口镜像抓组播或单播源,相应的端口查看vlan network配置。

switch mirror monitor 1  #镜像到的端口
switch mirror target 2 3 #要镜像的端口,0:off, 1:rx, 2:tx, 3:all
switch mirror target 2 0 #关闭镜像

遇到的问题,同样的方法一台光猫可以,另一台能获取到IPTV IP,直播黑屏,光猫不绑定vlan加管理交换机配置vlan并关闭igmp正常了。
播放时电视连接无线用diyp连接udpxy刚启动时会频繁花屏,有线无问题,无线连msd_lite无问题,但是msd_lite切换频道时偶尔花屏,msd_lite可能有同时最大8个连接数的限制,超过切换频道很慢。
udpx添加-B -R -H会大幅降低cpu占用,具体哪个没详细分析。
参考:
https://www.imyjy.cn/article/10.html

标签:none

发表评论

分类
最新文章
最近回复
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...
  • 孤狼: 擦。。。。apcupsd会失联 nut在冲到到100的时候会ONBATT进入关机状态,我想想办...
  • 海运: 网络,找到相应的url编辑重发请求,firefox有此功能,其它未知。
  • knetxp: 用浏览器F12网络拦截或监听后编辑重发请求,修改url中的set为set_super,将POS...
  • Albert: 啊啊啊啊啊啊啊啊啊 我太激动了,终于好了英文区搜索了半天,翻遍了 pve 论坛没找到好方法,博...
  • jiangker: good, very helpful to me
  • fengfeng: N1 armbian 能有编译下内核吗。。我要开启can 不懂怎么操作
  • 1: 方法一ngtcp2要改下:./configure PKG_CONFIG_PATH=/usr/l...