簡(jiǎn)述:傳統(tǒng)直播一般是基于CDN網(wǎng)絡(luò)進(jìn)行分發(fā),可支持大規(guī)模并發(fā)(并發(fā)數(shù)取決于CDN網(wǎng)絡(luò)容量)。與傳統(tǒng)CDN的大文件,小文件分發(fā)不同,由于主播分布區(qū)域分散,一般除了提供播放端的下行分發(fā)網(wǎng)絡(luò)外,還提供上行主播推流匯聚網(wǎng)絡(luò)。只有一些直播內(nèi)容資源集中的業(yè)務(wù)
傳統(tǒng)直播一般是基于CDN網(wǎng)絡(luò)分發(fā)可以支持大規(guī)模并發(fā)(并發(fā)數(shù)取決于CDN網(wǎng)絡(luò)容量)CDN的大文件,小文件分發(fā)不同,由于主播分布區(qū)域分散,一般除了提供播放端的下行分發(fā)網(wǎng)絡(luò)外,還提供上行主播推流匯聚網(wǎng)絡(luò)。只有一些直播內(nèi)容資源集中的業(yè)務(wù)方,會(huì)要求直播CDN直接回到自己的源站。
詳情請(qǐng)戳:
上行匯聚
傳統(tǒng)傳統(tǒng)直播CDN上行一般使用RTMP當(dāng)然也有協(xié)議⼀些使用UDP(UDP需要方法SDK合作,業(yè)內(nèi)有人在做,但需要綁定SDK)。此外,它還在國(guó)外使用http-ts推流的方式可以參見nginx-rtmp項(xiàng)目大神開源nginx-ts-module。目前,關(guān)鍵問題在于終端支持,而開源項(xiàng)目只支持HLS和Dash的播放。
除了主播推流,還有一種從聚集點(diǎn)到業(yè)務(wù)方源站拉流的方式。
下行分發(fā)
目前下行分發(fā)一般使用的協(xié)議,rtmp,http-flv,hls三種協(xié)議。網(wǎng)上有很多關(guān)于這三種協(xié)議優(yōu)缺點(diǎn)的文章,一般從終端兼容性、延遲、第一個(gè)屏幕維度考慮,這里不再比較。
rtmp和http-flv
由于rtmp協(xié)議在發(fā)送數(shù)據(jù)之前交互次數(shù)較多,追求第一屏的直播平臺(tái)一般會(huì)選擇http-flv作為下行分發(fā)協(xié)議,在線環(huán)境測(cè)試的平均效果將增加100-200ms網(wǎng)絡(luò)越差,值越大。rtmp和http-flv延遲可達(dá)3s但由于網(wǎng)絡(luò)環(huán)境復(fù)雜,延遲過低會(huì)導(dǎo)致卡頓率提高,所以一般CDN用戶接入時(shí),會(huì)多發(fā)幾秒鐘的數(shù)據(jù)(⼀般是5-8s),填充播放端緩沖區(qū),抵抗網(wǎng)絡(luò)端抖動(dòng)。細(xì)節(jié)技術(shù)會(huì)在后⾯面的⽂;文章介紹。
hls
hls對(duì)Android端和IOS端支持好,對(duì)P2P該協(xié)議也得到了很好的支持。該協(xié)議通常用于對(duì)延遲要求較低的直播平臺(tái)(如體育賽事)。hls延遲一般與切片尺寸有關(guān),一般為6-8s一部電影,這個(gè)大小是普通主播推廣的GOP適配好。過高會(huì)導(dǎo)致延遲加⼤;大,太低,切片中可能沒有關(guān)鍵幀。一般m3u會(huì)有三個(gè)文件ts文件,播放器;下兩片后開始播放,同時(shí)下第三片。因此一般hls的時(shí)延在15s左右。
當(dāng)然,如果用戶減少GOP(1s),CDN根據(jù)切片方式配置切片方式GOP切片的方式,HLS實(shí)際上也可以做到5s內(nèi)部延遲。當(dāng)然,缺點(diǎn)是卡頓率會(huì)增加。
其它協(xié)議
dash和hds
類似hls的還有dash和hds。dash在國(guó)外使用較多,實(shí)際上是原生的nginx-rtmp就支持dash,但國(guó)內(nèi)使用較少。hds是adobe自己的切片協(xié)議,一般很少有開源項(xiàng)目支持(SRS支持,但是應(yīng)該沒有商用CDN使用)。
http-fmp4
由于Adobe宣布退出Flash,研究中也有平臺(tái)⼀;B站開源等替代技術(shù)flv.js,在頁面上使用js將flv轉(zhuǎn)封裝為fmp然后就可以用了H5進(jìn)行觀看。
個(gè)人也在研究CDN端加入http-fmp支持4,其實(shí)問題還是挺多的。fmp雖然4可以支持流式播放,但與flv和ts這種自然的流式傳輸協(xié)議是不同的,fmp其實(shí)問題還是比較多的。
fmp放置4個(gè)視頻頭moov中的(stsdbox下),在直播中會(huì)遇到變碼率,重新發(fā)送視頻頭,這對(duì)于fmp4實(shí)際上是不支持的。
一個(gè)moof因?yàn)榉艓讕瑪?shù)據(jù)的問題,mp4的box是按照box長(zhǎng)度 box標(biāo)簽 box因此,在打包之前,必須知道所有數(shù)據(jù)幀的長(zhǎng)度moof。這必然需要收到很多幀才能個(gè)moof包,這種方式其實(shí)對(duì)直播不好(dash沒有這個(gè)問題)。當(dāng)然也可以⼀;一個(gè)數(shù)據(jù)幀moof但這取決于是否接受每幀前添加一個(gè)moof的開銷。
補(bǔ)充:nginx-rtmp中的dash包裝也包裝fmp四種方式。一般是一個(gè)GOP或者10M數(shù)據(jù)打成一個(gè)moof。
UDP
UDP方法,上述上述上行使用UDP分發(fā)⼀;樣品,向下使用UDP標(biāo)準(zhǔn)化問題也存在,也存在SDK配合問題。當(dāng)然,對(duì)于直播來說,追求卡頓率和極端延遲,UDP后續(xù)必然是一種趨勢(shì)。⾯;我們將在互動(dòng)直播中詳細(xì)討論。
轉(zhuǎn)碼
CDN一般提供轉(zhuǎn)碼服務(wù),按分類可分為在線轉(zhuǎn)碼和離線轉(zhuǎn)碼兩部分。
在線轉(zhuǎn)碼
一般來說,我們將截圖、水印、直播轉(zhuǎn)碼分為在線轉(zhuǎn)碼,直播轉(zhuǎn)碼分為主動(dòng)轉(zhuǎn)碼和被動(dòng)轉(zhuǎn)碼。
直播截圖一般用于一些審核業(yè)務(wù),如直播鑒黃。還有直播平臺(tái)上主播封面的貼圖(這種貼圖一般會(huì)定期更新)。
水印是在主播的視頻中添加直播平臺(tái)的標(biāo)簽,類似于電視臺(tái)的標(biāo)簽。這種方法可能是按需的。例如,一些主播可以在推出前使用直播平臺(tái)提供的直播工具打印水印,但一些主播使用水印OBS需要推流CDN加水印。你可以通過添加參數(shù)告訴我CDN是否需要加水印。
主動(dòng)轉(zhuǎn)碼,即用戶流向CDN后就按照客戶需求將源流轉(zhuǎn)為幾路子碼流,播放端可以根據(jù)網(wǎng)絡(luò)情況選擇播放碼率(如標(biāo)清,高清,超清等)。這樣,由于子流已轉(zhuǎn)出,可以保證首路播放的首屏?xí)r間。然而,并非所有的主播都被觀看。在實(shí)際的大型直播平臺(tái)上,很大一部分主播沒有觀眾,轉(zhuǎn)碼也是⼀;資源消耗量大的業(yè)務(wù),主動(dòng)轉(zhuǎn)碼CDN計(jì)算資源消耗量很大。
被動(dòng)轉(zhuǎn)碼,即觀看子碼流再轉(zhuǎn)碼,將大大降低計(jì)算資源的消耗。一般來說,大型直播平臺(tái)會(huì)選擇被動(dòng)轉(zhuǎn)碼,因?yàn)閷?duì)于大型主播來說,第一人的第一屏影響可以忽略不計(jì)。
對(duì)于直播轉(zhuǎn)碼,一般會(huì)有階梯轉(zhuǎn)碼,比如根據(jù)主播的代碼率決定轉(zhuǎn)幾檔。對(duì)于被動(dòng)轉(zhuǎn)碼,可以選擇只轉(zhuǎn)出幾個(gè)常用的代碼率,根據(jù)需要選擇不常用的代碼率。這些都是CDN優(yōu)化直播資源。
離線轉(zhuǎn)碼
直播中離線轉(zhuǎn)碼主要處理直播錄制文件。
與直播不同,點(diǎn)播通常更常用的協(xié)議是mp4和hls,直播一般用于錄制flv和hls。因此,錄制后需要將錄制文件轉(zhuǎn)包mp4或hls。
輪播類似于電視臺(tái)體育賽事的錄播功能。剪輯直播內(nèi)容后,在一定時(shí)間內(nèi)(通常是主播的下播時(shí)間)循環(huán)播放,錄制文件一般用來推直播流。
對(duì)于一些直播內(nèi)容,業(yè)務(wù)方需要審核,審核完成后再直播。如有問題,及時(shí)切斷,有問題的內(nèi)容不再播放。這個(gè)時(shí)間一般在10分鐘以上。一般直播引擎使用內(nèi)存進(jìn)行數(shù)據(jù)cache,因此,對(duì)于這種長(zhǎng)期的延遲,錄制文件通常被定期轉(zhuǎn)換為直播流。
FLV H.265(HEVC)
官方標(biāo)準(zhǔn)FLV實(shí)際上是不支持的H.但目前很多直播平臺(tái)都是為了降低帶寬成本,CDN還應(yīng)推出業(yè)務(wù)需求FLV H.支持265,一般定義CodecID是12,轉(zhuǎn)碼需要正確ffmpeg修改,參考實(shí)測(cè)效果,H.265的轉(zhuǎn)碼比H.264大很多,對(duì)終端的要求也比較高,目前應(yīng)用不是很廣泛,還處于技術(shù)孕育階段。
錄制
直播錄制一般可以使用flv和hls兩種,nginx-rtmp的record模塊支持flv的錄制,hls模塊支持hls錄制(配置不清除分片)。
為什么不用mp主要看mp4.包裝結(jié)構(gòu)與直播特點(diǎn)的兼容性:一般支持mp4的fast-open,會(huì)把moov頭放在文件前面,mdat放在后面。由于mp4對(duì)各平臺(tái)H由于5的支持,視頻平臺(tái)通常會(huì)支持它mp4作為點(diǎn)播源的封裝格式。只需下載播放器moov頭,可以根據(jù)moov中stco標(biāo)記的每⼀;幀的位置拖動(dòng)視頻。但在直播中,數(shù)據(jù)幀實(shí)時(shí)增加,導(dǎo)致數(shù)據(jù)幀實(shí)時(shí)增加moov頭部會(huì)一直變化,后面數(shù)據(jù)幀的偏移位置無法確認(rèn),因此無法確認(rèn)moov頭到底有多大,moov的mdat在整個(gè)mp4中的偏移量無法確定,如何確認(rèn)?moov中stco的偏移量。因此CDN一般來說,對(duì)流傳輸更為親和flv和hls。
當(dāng)然,mp4也可以像HLS⼀;樣分片存儲(chǔ),但我們更傾向于后兩種方式。直播轉(zhuǎn)點(diǎn)播mp4.通常在完成直播后轉(zhuǎn)包裝mp四、或播放超過⼀mp4文件,如1小時(shí)。
時(shí)移
目前時(shí)移多用HLS也有人用flv是的,但需要對(duì)flv大文件分片。在直播中,時(shí)移通常需要配合錄制⼀;開始使用。
鑒權(quán)
鑒權(quán)分為上行鑒權(quán)和下行鑒權(quán)。
直播鑒權(quán)一般有以下幾種:
referer鑒權(quán)主要是下行http用,根據(jù)referer白名單或黑名單。更容易破解。
上下都可以使用簽名算法。一般來說,直播平臺(tái)是基于用戶的key和timestamp加上用戶的參數(shù)secret算出⼀個(gè)signature,帶給用戶signature進(jìn)行比較。timestamp保證signature在⼀;定時(shí)間(一般為分鐘級(jí))范圍內(nèi)有效。當(dāng)然,直播平臺(tái)不可能key在客戶端代碼中,一般直播平臺(tái)都會(huì)有⼀signature的方法。
回源鑒權(quán),可上下使用。當(dāng)請(qǐng)求到達(dá)時(shí)CDN后,CDN向業(yè)務(wù)平臺(tái)API服務(wù)器;請(qǐng)求由業(yè)務(wù)平臺(tái)判斷是否放行。下行為保證了第一個(gè)屏幕,一般采用異步的方式,即向業(yè)務(wù)平臺(tái)API服務(wù)器;發(fā)送鑒權(quán)請(qǐng)同時(shí)放行播放端。獲得鑒權(quán)結(jié)果后,如果是禁播,觀眾將被禁播接口切斷。
一般CDN可以支持以上一種或多種鑒權(quán)進(jìn)行使用。
其它業(yè)務(wù)
其他業(yè)務(wù)還包括斷流、禁播、開停播通知、觀看⼈;人數(shù)統(tǒng)計(jì)等。
騰佑科技視頻直播服務(wù)器解決方案,高效解決直播技術(shù)問題;全球cdn節(jié)點(diǎn)等諸多優(yōu)勢(shì)功能選擇,打造高效直播流媒體解決方案!
騰佑科技(mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個(gè)國(guó)家版權(quán)局認(rèn)證。公司自成立以來,一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計(jì)算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產(chǎn)品推薦