本文為這段時間我在論壇上的一些討論的總結(jié),不一定對,但大概流程是清楚了,看完后希望對你有幫助。文中所用到的軟件有:
Wireshark(2.4),winscp,putty,potplayer,mxplayer(android),Notepad++。
路由器(lede)所需的軟件有:
- opkg update
- opkg install kmod-macvlan kmod-8021q kmod-bridge igmpproxy udpxy tcpdump luci-app-udpxy
本文大體分兩部分
一.直播地址獲取
二.直播環(huán)境搭建
下面開始第一部分,直播源地址的獲取。一般我們是通過抓包,不過抓包之前建議先搜索一下,或許有先行的前輩幫你抓好了,有現(xiàn)成的可以直接看第二部站。如果沒有,我們就得自己抓包了。只要有lede路由器就可以抓包,在路由器上安裝tcpdump可以讓路由器成為一個抓包神器。想抓到IPTV的包,需要讓IPTV的包能通過路由器。最簡單的方法就是讓路由的WAN口和接IPTV的lan口橋接,具體的做法為接接IPTV的lan口設(shè)為不關(guān)聯(lián),不關(guān)聯(lián)就是橋接,如圖:
這時開啟你的機(jī)頂盒,應(yīng)該可以正常的直播點播。好,先關(guān)掉機(jī)頂盒,然后用putty連上路由器,輸入以下命令:
tcpdump -i any -w /tmp/xxx.cap
這條命令的意思是說,抓所有的包并存到/tmp文件夾下,以XXX(替換成你喜歡的)命名。好了,機(jī)頂盒開機(jī),等出現(xiàn)選擇頻道界面時在putty下按Ctrl+C。用winscp登陸到路由器,在/tmp文件夾下找到剛才的抓包文件。這時要請出另一個軟件wireshark來了,用wireshark打開抓包文件,按Ctrl+F,選擇字串符,分組字節(jié)流。輸入get channellist回車。協(xié)議那里選http過濾一下,一般第一個post get channellist的應(yīng)答就是了。
這時在應(yīng)答這一條的line-based text data里點右鍵,選擇顯潔凈分組字節(jié)。顯示為那里選utf8
這是一個樣本。
取得頻道列表后就要整理了,這時要請出牛B工具notepad++了,它支持正規(guī)則表達(dá)式。正規(guī)則表達(dá)式是wolong_gl教我入門的,謝謝了。
如果你的頻道列表是和這個一樣的,可以試試這個表達(dá)式:
查找內(nèi)容那里為:
替換為:
#EXTINF:-1, \1\n rtp://\2\n
勾選匹配新行,全部替換吧。
好了,到此抓直播地址部分就結(jié)束了。如果你土豪或者路由器里支持端口鏡像,抓包可以更容易些,可以不用tcpdump,可以直接用wireshark抓包。拓樸如下:
第二部分,直播環(huán)境搭建。
其實一開始已將直播所需要的軟件裝好了,現(xiàn)在只要配置好它就行了。這時我們需要將一開始的vlan設(shè)置還原回原來的,不要將IPTV和WAN橋接在一起了。這時需要創(chuàng)建一個虛擬WAN口用來IPTV網(wǎng)絡(luò)的拔號,然后通過MWAN指定IPTV走這個端口出去。創(chuàng)建虛擬接口最好用syncdial,自動創(chuàng)建,如果通過手動創(chuàng)建的話,需要注意在etc/config/network里加上
- config device 'macvlandev_macvlan1'
- optionname 'macvlan1'
- optionifname 'eth0.2' \調(diào)整成自己的wan口
- optiontype 'macvlan'
- config interface 'vwan1'
- optionproto 'pppoe'
- optionmetric '41'
- optionipv6 'auto'
- optionifname 'macvlan1'
- optionbridge 'false'
- optionusername **********999@itv'
- optionpassword '******'
這時建好的虛擬wan口應(yīng)該拔通取得IP了,下面我們要配置好igmpproxy,讓連接在路由器后面的機(jī)頂盒能夠直播和點播,打開/etc/config/igmpproxy。里面的配置示例:
- config igmpproxy
- option quickleave 1
- config phyint
- option network vwan1 \這個為虛擬wan口,取得IPTV網(wǎng)絡(luò)地址的接口,在這里指定組播從這個接口出去
- option direction upstream
- list altnet 115.153.239.0/24 \這個為組播服務(wù)器地址,不是組播地址,用0.0.0.0/0也行
- config phyint
- option network lan
- option direction downstream
然后在/etc/config/network的lan下面增加
接下來配置防火墻/etc/config/firewall
在后面添加
- config rule
- option src wan
- option proto igmp
- option target ACCEPT
- config rule
- option src wan
- option proto udp
- option dest lan
- option dest_ip 224.0.0.0/4
- option target ACCEPT
- config rule
- option src wan
- option proto udp
- option dest_ip 224.0.0.0/4
- option target ACCEPT
保存好后重啟igmpproxy,這時用有線連接路由器。用potplayer打開組播地址應(yīng)該能正常收看電視了,機(jī)頂盒應(yīng)該也能正常收看了。
好了,下面配置udpxy為wifi收看電視節(jié)目作準(zhǔn)備,基實udpxy沒啥好設(shè)置的,最多指定一個端口,其它不填也能看。
啟動udpxy后要將地址轉(zhuǎn)換一下,比如原來的組播地址為:rtp://239.252.219.46:5140
只是我自己的在電腦上用potplayer放HD節(jié)目會卡頓,在手機(jī)上用mxplayer播放HD節(jié)目則非常流暢,這個怎么指定流量從IPTV的那個虛擬接口出去沒搞定,誰研究出來了麻煩回個貼告訴一下我。