最近把用了 10 年的电信换为了移动,光猫改为了桥接,OpenWrt 拨号。有无大佬知道如何实现 单线复用 & 双线 IPTV。
尝试过以下配置,但仍无法播放:
组播地址来源:四川移动组播地址
config interface 'wan'
option proto 'pppoe'
option device 'eth2.101'
option username 'xxxxxx'
option password 'xxxxxx'
option ipv6 'auto'
config interface 'IPTV'
option proto 'dhcp'
option device 'eth2.102'
config device
option type '8021q'
option ifname 'eth2'
option vid '102'
option name 'eth2.102'
config device
option type '8021q'
option ifname 'eth2'
option vid '101'
option name 'eth2.101'
config rule
option src 'iptv'
option name 'Allow-IGMP-IPTV'
list proto 'icmp'
option target 'ACCEPT'
config rule
option src 'iptv'
option dest 'lan'
option name 'Allow-Multicast-IPTV'
list proto 'udp'
list dest_ip '239.0.0.0/8'
option target 'ACCEPT'
config zone
option name 'iptv'
option input 'ACCEPT'
option forward 'ACCEPT'
option output 'ACCEPT'
option masq '1'
LAN1 101/102
1
sayoll OP 补充一下,机顶盒上有个像 U 盘一样的设备不知道是不是 鉴权设备
|
2
wtks1 9 小时 46 分钟前
一般来说除了上海之外的 iptv 都挺好搞单线复用 iptv 的,如果自己搞不定,可以直接买现成的交换机,HTK-SG1008D-ITV
|
3
xqzr 9 小时 1 分钟前
VLAN 模式:透传
应该是,电口入 Tag 不改变直接出光口?如果是,那可以试试... |
4
ruoyutx 7 小时 33 分钟前 via iPhone
0838 裝寬帶默認就是 v4 動態。無需申請
|
5
Ipsum 2 小时 55 分钟前
那个 usb 设备是遥控器的语音接收器。
|
7
Qazxcv123 2 小时 7 分钟前
网上教程挺多的,给你个参考: https://github.com/luckyyyyy/blog/issues/75
还有 iptv 代理的,可以用这个 OP 的插件: https://www.v2ex.com/t/971817 |
8
glaucus 1 小时 23 分钟前
已经退掉 IPTV 用移动内网源了,虽然清晰度差点,省事多了
|
9
bfdh 1 小时 2 分钟前
同 028 移动。
1 、你前面链接中给出的地址已经转成 http 了,如果你直接用的话,肯定是播不了的。 2 、如果你使用了正确的组播地址仍不能播放,有可能是组播代理的问题,可以尝试不经过路由器直接有线接 PC ,用 VLC 播放试试。 3 、以下是我之前自己折腾的记录,你可以参考下。 # 基本背景 - 成都移动 IPTV 使用组播进行播放,使用 IPoE 认证( dhcp option 60 )。 - 抓取直播源的目的是希望可以抛弃机顶盒,直接使用电视、手机、电脑等设备直接观看电视节目。 - 抓取直播源之后可以多台设备同时观看 IPTV (设备间互不干扰),且无需向运营商申请额外的机顶盒。 - 可以使得网络部署更加灵活,不必专门为所有的设备准备单独的 IPTV 网线。 # 抓包 抓取机顶盒正常连接 IPTV 时的所有报文,从机顶盒开机到播放任意频道时止。抓到的报文将用于后续分析。具体抓包过程此处不做赘述。 # 解决 IPoE 认证问题 ## 提取认证信息(不确定是否一定需要,后来好像没有这些也能用) 认证信息包含以下三项内容,均可从 dhcp discover 报文中提取 > Vendor class identifier 每次 dhcp 请求都会变,但通过测试发现提取任意一次的数据进行重放也可以通过认证。 - mac - Host Name: android-xxxxxxxxxxxxxxxx - Vendor class identifier:(长度为 61 字节,转化为 16 进制文本则长度为 122 ) 00001545acd5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8a9342eac ## 路由器配置 在 openwrt 路由器( MT7621+7530 方案)`/etc/config/network`中添加如下配置 > port 3 原本是在其他 switch_vlan 的配置中,需要将其从中删除。 > > 在配置之前,需要修改`/lib/netifd/proto/dhcp.sh`, 找到`${vendorid:+-V "$vendorid"} \`,修改为`${vendorid:+-V '' "-x 0x3c:$vendorid"} \`使得 dhcp vendorid 可以支持 16 进制数据. ``` config switch_vlan option device 'switch0' option vlan '3' option vid '102' option ports '3 5t' config interface 'iptv' option proto 'dhcp' option hostname 'android-xxxxxxxxxxxxxxxx' option vendorid '00001545acd5xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8a9342eac' option macaddr 'xx:xx:xx:xx:xx:xx' option ifname 'eth1.102' option delegate '0' option defaultroute '0' option peerdns '0' ``` 完成以上配置之后,执行`/etc/init.d/network reload`,然后将光猫 iptv 口用网线连接到路由器 port 3 ,此时路由器的 iptv interface 已经可以获取到 IP 。 # 提取直播源 继续分析抓包数据不难发现直播源是通过如下 http 请求明文传输的 ``` GET /taipan-search/getChannelIndexs.json?channelIndexUrl=............ HTTP/1.1 Host: vipersearch.t.taipan.sca.bcs.ottcn.com:8080 Connection: Keep-Alive Accept-Encoding: gzip User-Agent: okhttp/3.12.0 ``` 提取该 http 请求的响应报文,得到如下 json ,livePlayUrl 即为每个频道的直播地址。 ```json [{ "index": "1", "uuid": "ysten-cctv-1", "channelName": "CCTV-1", "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV1.png", "livePlayUrl": "rtp://239.11.0.65:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65", "isShowBack": 1, "channel_code_bd": null, "channelType": "OpenChannel", "aiChannelUuid": null }, { "index": "2", "uuid": "cctv-2", "channelName": "CCTV-2", "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV2.png", "livePlayUrl": "rtp://239.11.0.108:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65", "isShowBack": 1, "channel_code_bd": "cctv2&CCTV2&cctv-2&CCTV-2", "channelType": "OpenChannel", "aiChannelUuid": null }, { "index": "3", "uuid": "cctv-3", "channelName": "CCTV-3", "channelIcon": "http://zbtvlookbackepg.sc.ysten.com:8080/logo/CCTV3.png", "livePlayUrl": "rtp://239.11.0.101:5140?channelFECPort=5142&ChannelFCCPort=8027&ChannelFCCIP=183.223.164.65", "isShowBack": 1, "channel_code_bd": "cctv3", "channelType": "OpenChannel", "aiChannelUuid": null }, ...... ] ``` > 如果将前面提取到的 mac 地址以及通过 dhcp 获取的 IP/mask 均设置在一台 PC 上,并将 IPTV 网线也接入 PC ,此时 PC 可以通过 VLC 播放器直接播放每个 livePlayUrl 。 # 配置 udpxy > 使用 udprxy 的目的是将组播流转换为 http 流,使得局域网内的设备可以更方便地播放直播源。理论上,配置好组播代理、igmpsnooping 局域网中的设备也可以直接播放组播源。不过 wifi 对组播支持不好,某些路由器可能无法通过 wifi 播放。 在路由器安装好 udprxy ,并配置如下,然后执行`/etc/init.d/udpxy reload` ```sh root@Openwrt:~# cat /etc/config/udpxy config udpxy option respawn '1' option verbose '0' option status '1' option port '4022' option disabled '0' option bind 'br-lan' option source 'eth1.102' ``` 至此,局域网的设备便可以通过`http://<router-ip>:4022/<proto>/<multicast-addr>`播放每个直播源。比如 CCTV1 的播放地址为:`http://192.168.0.1:4022/rtp/239.11.0.65:5140`。 # 生成 m3u8 将前面提取到的 json 保存为文件,通过下面这个脚本(`gen_m3u8.sh`)可生成 m3u8 文件。 命令格式为:`./gen_m3u8.sh <json file> <target file>` ```sh #!/bin/bash set -e function clean(){ [ -n "$msg" ] && rm -f $TMPF [ -n "$msg" ] && { echo $msg return } echo "Failed" } JSON=$1 TARGET=$2 [ -z "$JSON" -o -z "$TARGET" ] && { echo "$0 <json file> <target file>" exit } [ -r "$JSON" ] || { echo "Can't open $JSON" exit } trap clean EXIT TMPF=$(mktemp) cat $1 | jq . | grep -E "channelName|livePlayUrl" > $TMPF echo "#EXTM3U" > "$TARGET" cat $TMPF | while true; do read name || break read url name=$(echo $name | cut -d'"' -f4) proto=$(echo $url | cut -d'"' -f4 | cut -d':' -f1) url=$(echo $url | cut -d'"' -f4 | cut -d'/' -f3) echo "#EXTINF:-1,$name" >> "$TARGET" echo "http://192.168.0.1:4022/$proto/$url" >> "$TARGET" done msg=Success ``` > 将生成的 m3u8 文件上传至[http://epg.51zmt.top:8000/]( http://epg.51zmt.top:8000/%E5%8F%AF%E8%87%AA%E5%8A%A8%E5%8C%B9%E9%85%8D%E5%8F%B0%E6%A0%87)可自动匹配台标 |