SRT協(xié)議在多路徑推流,聚合路由器方案(轉(zhuǎn)載)

        2022-07-21 18:00:22 yangquan3 311

        winlinvip commented on Sep 27, 2021 ? 

        先說(shuō)最重要的:目前SRS還沒(méi)有支持聚合路由器,還在搗騰中,敬請(qǐng)期待。。。

        現(xiàn)在每周會(huì)做一場(chǎng)直播,主要是SRS的答疑,推RTMP流到視頻號(hào),發(fā)現(xiàn)有時(shí)候網(wǎng)絡(luò)抖動(dòng)會(huì)卡頓。

        上行推流如果網(wǎng)絡(luò)不好,會(huì)導(dǎo)致所有人都卡,因此基本上直播都需要保障上行推流,除非是一個(gè)網(wǎng)絡(luò)攝像頭24小時(shí)推流直播沒(méi)人看的那種場(chǎng)景。

        Solution

        目前市面上的方案是聚合路由器,一般是在路由器上插多張網(wǎng)卡,部署一個(gè)專用的服務(wù)器來(lái)聚合這些網(wǎng)卡的流,然后推到直播源站。這里有幾個(gè)問(wèn)題:

        1. 這是路由器廠商的方案,完全物理層的多路徑傳輸,其實(shí)如果做直播專用的多路徑,做應(yīng)用層的多路徑推流,會(huì)更簡(jiǎn)單也可以有更多的業(yè)務(wù)處理。參考MPTCP

        2. 多路徑并沒(méi)有冗余,如果遇到某個(gè)鏈路質(zhì)量不好或抖動(dòng),需要比較復(fù)雜的算法來(lái)處理。比如一條鏈路的RTT從10ms變成100ms,這個(gè)鏈路質(zhì)量怎么計(jì)算,比較復(fù)雜,因?yàn)閺哪承┌床坏阶罱K的結(jié)果,如果采用冗余推流,就可以只看最終這些流的FPS是否正常,選擇FPS比較穩(wěn)定的一路流轉(zhuǎn)推就行。

        3. 一般服務(wù)器是路由器廠商部署,自己部署比較麻煩,而且是鏈路層的服務(wù)器。不如部署專用的視頻服務(wù)器比較直觀,比如會(huì)有很多視頻的指標(biāo)。

        所以我覺(jué)得應(yīng)用層的聚合路由器方案,會(huì)更好一些,具體方案參考:架構(gòu)圖

        Goal

        這是一個(gè)開源的聚合路由器方案,主要的目標(biāo)是:

        • 提供一種開源的聚合路由器方案,實(shí)現(xiàn)高可靠的直播推流。

        • 在OpenWRT上使用SRS的一個(gè)范例,可以拓展到其他場(chǎng)景,比如企業(yè)SRS網(wǎng)關(guān)。

        • SRS支持OpenWRT(MIPS)平臺(tái),適配ST支持MIPS。

        這不是一個(gè)商業(yè)產(chǎn)品,目標(biāo)也不是為了產(chǎn)出能直接商業(yè)化可售賣的產(chǎn)品,因?yàn)檎嬲龀缮虡I(yè)產(chǎn)品,有很多東西要,要考慮很多因素,這也不是開源項(xiàng)目要做的事情。

        開源要做的,就是跑通鏈路,展現(xiàn)出各種可能性。主要任務(wù):

        •  SRS支持OpenWRT,修改ST適配MIPS系統(tǒng),參考 #2637

        •  SRS支持MPTCP多路徑傳輸。

        •  SRS支持MP- QUIC多路徑傳輸。

        HiWifi Y1 + EC20

        HiWifi配置不高但到處都是,有一個(gè)USB口可以插一個(gè)EC20的4G網(wǎng)卡,實(shí)現(xiàn)WiFi+4G雙通道傳輸。

        首先,將HiWifi Y1刷成OpenWRT系統(tǒng),參考下面的OpenWRT Install。

        然后,需要安裝USB的4G網(wǎng)卡驅(qū)動(dòng),Windows是RNDIS,Linux是CDC-ECM,區(qū)別參考這里。在OpenWRT中,安裝這個(gè)就可以:

        opkg update
        opkg install kmod-usb-net-rndis

        接著,重啟路由器。將EC20插到USB口,就可以看到識(shí)別出來(lái)了,有了一個(gè)新的網(wǎng)卡叫usb0

        root@OpenWrt:~# dmesg[   99.149068] usb 1-1: new high-speed USB device number 2 using ehci-platform
        [   99.229163] rndis_host 1-1:1.0 usb0: register 'rndis_host' at usb-101c0000.ehci-1, RNDIS device, fa:50:57:e0:1e:d6

        root@OpenWrt:~# ifconfig usb0usb0      Link encap:Ethernet  HWaddr 86:41:4A:15:66:2A  
                  BROADCAST MULTICAST  MTU:1500  Metric:1

        最后,新增一個(gè)網(wǎng)絡(luò)接口就可以了。

        OpenWRT Install

        如果官方下載比較慢,可以從國(guó)內(nèi)騰訊清華鏡像站點(diǎn),下載刷機(jī)鏡像和kmod。

        Note: kmod不能使用自己編譯的,會(huì)報(bào)錯(cuò)Cannot satisfy dependencies / kernel is not compatible,必須使用和內(nèi)核對(duì)應(yīng)的版本和hash號(hào),也就是只能安裝不能自己?jiǎn)为?dú)編譯kmod。注意使用--force-depends --force-checksum也不可以。

        刷機(jī)鏡像,從下載頁(yè)面選擇版本和自己路由器的型號(hào),可以從Targets找到,比如HiWifi Y1是ramips/mt7620,然后在下載頁(yè)面找到對(duì)應(yīng)品牌比如hiwifi_hc5661的鏡像:

        可以刷完路由器后,先連上其他WiFi訪問(wèn)網(wǎng)絡(luò),就可以用opkg安裝了。

        首先,備份下官方opkg源,設(shè)置為騰訊云鏡像:

        cp /etc/opkg/distfeeds.conf /etc/opkg/distfeeds.conf.bk-`date +%s`sed -i 's|downloads.openwrt.org|mirrors.cloud.tencent.com/openwrt|g' /etc/opkg/distfeeds.conf

        最后,更新和安裝就可以:

        opkg update
        opkg install kmod-usb-net-rndis

        說(shuō)明下其他可能用到的包:

        • kmod-usb-net-cdc-ether:就是USB網(wǎng)卡驅(qū)動(dòng),CDC ECM模式。安裝kmod-usb-net-rndis時(shí)默認(rèn)會(huì)安裝這個(gè)包,具體請(qǐng)查看CDC-ECM 和 RNDIS。

        • kmod-usb-serial-option:若需要操作EC20模塊,比如AT串口命令操作/dev/ttyUSB2,設(shè)置EC20的模式,需要安裝這個(gè)模塊。一般都不需要這個(gè)模塊的。

        • libstdcpp:這是C++的動(dòng)態(tài)庫(kù),如果程序用到了C++就需要安裝這個(gè)庫(kù)。

        • libopenssl:這是openssl動(dòng)態(tài)庫(kù),加解密需要用到這個(gè)庫(kù)。

        • gdb:可以在OpenWRT上調(diào)試程序。

        OpenWRT Build

        路由器肯定是基于OpenWRT做的,基本上目前路由器都會(huì)基于這個(gè)開源項(xiàng)目開發(fā)。

        由于OpenWRT比較龐大,國(guó)內(nèi)下載不是慢就是會(huì)失敗,我找了一些鏡像源加速下載,請(qǐng)參考openwrt-docker。

        這個(gè)Docker是Ubuntu 20的環(huán)境,Dockerfile會(huì)把OpenWRT的代碼以及依賴的feeds的代碼下載下來(lái),打出來(lái)鏡像后,就可以直接配置和編譯。后續(xù)就可以直接git pull來(lái)更新代碼,就快很多了。

        下載到docker是因?yàn)?,編譯OpenWRT是要在Linux文件系統(tǒng)里面,mac和windows的文件系統(tǒng)不是大小寫敏感的。

        OpenWRT: srs-server

        SRS可以在OpenWRT中運(yùn)行,參考Build package srs-server。

        ST(state-threads)支持MIPS,參考#21。

        啟動(dòng)SRS服務(wù)器:

        /usr/bin/srs-server -c /etc/srs/conf/openwrt.conf

        推流到SRS:

        ffmpeg -re -i doc/source.flv -c copy -f flv rtmp://192.168.1.1/live/livestream

        觀看HTTP-FLV:http://192.168.1.1:8080/live/livestream.flv

        image

        MPTCP

        目前直播聚合路由器,使用的是傳輸層多路徑傳輸?shù)姆桨?,相關(guān)項(xiàng)目如下:

        MPTCP是基于TCP的協(xié)議,參考下圖:

        image

        下面是架構(gòu)圖:

        image

        多路徑傳輸主要是提升了傳輸帶寬,順便提升了抗抖動(dòng)能力。

        這里有個(gè)測(cè)試方案無(wú)線4G的視頻傳輸方案,用3張限速800Kbps的4G網(wǎng)卡,傳輸2Mbps直播流。注意插拔網(wǎng)卡時(shí),會(huì)有秒級(jí)別的卡頓和花屏(可能商業(yè)產(chǎn)品是能解的)。

        MP-QUIC

        志宏提到QUIC也有多路徑的版本,參考 multipath-quic.org,官方說(shuō) quic-go 這個(gè)QUIC庫(kù)就已經(jīng)支持了。

        MP-QUIC比MPTCP,關(guān)鍵的優(yōu)勢(shì)我認(rèn)為有幾點(diǎn):

        1. 應(yīng)用層協(xié)議,不用走非常長(zhǎng)的升級(jí)鏈路,App自己寫代碼就可以用,這樣普及速度快了太多太多了。不用動(dòng)內(nèi)核,不用動(dòng)路由器,不用動(dòng)底層庫(kù),在應(yīng)用層就可以搞定。

        2. UDP協(xié)議,天然就容易支持,QUIC本身也考慮過(guò)連接遷移,只是沒(méi)有考慮同時(shí)傳。從RFC可以看出MP-QUIC才28頁(yè),MPTCP有58頁(yè)。

        3. QUIC是未來(lái)互聯(lián)網(wǎng)的基礎(chǔ),多路徑可以應(yīng)用得遠(yuǎn)不止TCP這樣,所有應(yīng)用都可以用到。

        這個(gè)能帶來(lái)的影響是非常不一樣的。又快,又簡(jiǎn)單,還很廣泛。

        Commercial Products

        目前市場(chǎng)上有不少聚合路由器的產(chǎn)品,主要解決的也是提升傳輸帶寬,當(dāng)然傳輸容錯(cuò)也有支持。

        • LiveU Solo, Simultaneously bond up to 4 network links including support for 2x 4G LTE cellular or WiMAX modems, Wifi and Ethernet,支持4個(gè)網(wǎng)絡(luò)并行傳輸(2個(gè)4G、Wi-Fi、有線)。與目睹直播平臺(tái)、搜狐視頻、騰訊視頻、微博、微信、Bilibili、優(yōu)酷土豆等國(guó)內(nèi)主流在線媒體和其它海外主流內(nèi)容分發(fā)網(wǎng)絡(luò)和在線視頻平臺(tái)兼容。

        • TVU One,Reliably transmits high picture quality video even in congested or challenging environments,Uses patented IS+ transmission algorithm,Support for HDR and 1080P60 encoding at as little as 800kbps,Long internal battery life,HEVC/H.265 video compression,CNCed from high-density aluminum。可動(dòng)態(tài)聚合來(lái)自不同網(wǎng)路連接的頻寬,包括蜂巢式網(wǎng)路、光纖、衛(wèi)星、WiFi和以太網(wǎng)。

        • Teradek BondFamily,The Bond Backpack is an all in one professional HEVC/H.264 streaming solution for broadcasters seeking the best in signal reception and video quality. High Gain Antennas,Node Modems,Gold or V Mount Battery Plate,Integrated Locking Cables。

        @winlinvip winlinvip added the Discussion Discussion or questions.label on Sep 27, 2021
        @winlinvip winlinvip added this to the 5.0 milestone on Sep 27, 2021
        @winlinvip winlinvip self-assigned this on Sep 27, 2021
        @winlinvip winlinvip changed the title 多路徑推流,聚合路由器方案 多路徑推流,聚合路由器方案,OpenWRT+MIPS支持 on Sep 30, 2021
        @online2311

        srs直播聚合路由器那個(gè)多線路配置如何配置有一些看不太明白。

        @winlinvip winlinvip changed the title 多路徑推流,聚合路由器方案,OpenWRT+MIPS支持 開源復(fù)刻:多路徑推流,聚合路由器方案,OpenWRT+MIPS支持 on Oct 13, 2021
        @winlinvip winlinvip added the Solution It's a solution plan.label on Oct 14, 2021
        @MattUan

        看了你的架構(gòu)圖 大概達(dá)到的效果是SRS服務(wù)器分流推送然后接收端選擇鏈路最好的一路進(jìn)行轉(zhuǎn)推?這樣的話起到的是冗余的作用 而MPTCP起到的作用是疊加多鏈路的網(wǎng)速 比如有三條10M寬帶 疊加成30M提高可用帶寬 看了最新的openmptcprouter的文檔 貌似已經(jīng)添加了熱備冗余的功能 具體實(shí)現(xiàn)方式還沒(méi)研究過(guò) 總之和你說(shuō)的方案應(yīng)該是兩個(gè)不同的方向 不過(guò)把srs集成聚合應(yīng)該可以有效減少故障點(diǎn)同時(shí)降低延遲?

        @winlinvip
        MemberAuthor

        @MattUan 對(duì)的,和MPTCP是不同的,如果相同就沒(méi)有必要做了,直接用MPTCP就挺好的。

        我想做的,主要解決的是帶寬滿足要求時(shí)的冗余問(wèn)題,當(dāng)然也可以用多個(gè)機(jī)位實(shí)現(xiàn)冗余。

        另外,MPQUIC可能比MPTCP更合適,只是還不成熟。


        導(dǎo)航
        日韩一区二区三区免费在线看片_自偷自拍亚洲综合精品第一页_伊人精品无码一区二区三区电影_久久久久久精品免费无码无_久久无码av一区二区三区