2016年,直播大火憎瘸。涌現(xiàn)出了一個(gè)個(gè)直播產(chǎn)品入篮,映客、花椒幌甘、斗魚......嗅到了風(fēng)口的氣息潮售,一些視頻網(wǎng)站在線教育平臺(tái)也開始引入直播。作為一名敬業(yè)的產(chǎn)品汪锅风,雖然不負(fù)責(zé)直播業(yè)務(wù)酥诽,但也對(duì)直播頗有興趣,幸得wuli程序員男票也從事直播相關(guān)的工作皱埠,便有幸一探直播的真相肮帐。
1、直播流示意圖
名詞解釋
直播間:視頻采集端边器,包含一些直播設(shè)備训枢。以在線教育直播為例,直播間是老師錄制課程的地方忘巧。
源站:接受直播間傳送的視頻流恒界,并進(jìn)行存儲(chǔ)和轉(zhuǎn)發(fā),由多臺(tái)服務(wù)器組成袋坑。源站相對(duì)于CDN來講仗处,是源頭,故而稱之為源站枣宫。
CDN:主動(dòng)向源站獲取視頻流婆誓,并進(jìn)行存儲(chǔ)和轉(zhuǎn)發(fā)。CDN在這個(gè)直播的整個(gè)環(huán)節(jié)中扮演的角色類似于計(jì)算機(jī)存儲(chǔ)系統(tǒng)中的緩存也颤。
用戶:接收CDN傳送的視頻流洋幻,觀看直播。
2翅娶、直播間-源站的關(guān)系
(1)直播間主動(dòng)向源站傳輸視頻流文留,這個(gè)動(dòng)作叫推流。
那么問題來了——直播間是如何確定把視頻流推送到哪臺(tái)服務(wù)器上竭沫?
直播間可以配置服務(wù)器對(duì)應(yīng)的ip地址燥翅。比如:直播間1配置了服務(wù)器A和服務(wù)器B的IP地址,那么當(dāng)直播間1產(chǎn)生視頻流的時(shí)候蜕提,會(huì)把視頻流同時(shí)傳輸?shù)椒?wù)器A和服務(wù)器B上森书。
(2)直播間與源站之間常用的傳輸協(xié)議:rtmp協(xié)議,hls協(xié)議。
傳輸協(xié)議是什么鬼凛膏?舉個(gè)不恰當(dāng)?shù)睦友蠲瑐鬏攨f(xié)議相當(dāng)于是翻譯媒介。一個(gè)日本人猖毫,和一個(gè)俄國(guó)人台谍,如果日本人講日語,俄國(guó)人講俄語吁断,那么他們是無法溝通的趁蕊。但如果他們有一門共通的語言,比如英語胯府,在遵從英語的語言規(guī)范的前提下介衔,他們是能夠進(jìn)行溝通的。傳輸協(xié)議就是直播間與源站之間的共通語言骂因。
RTMP是Adobe公司的流媒體傳輸協(xié)議炎咖,普通網(wǎng)絡(luò)用戶均可使用,包括非IOS平臺(tái)用戶寒波。
HLS是IOS平臺(tái)下的流媒體傳輸協(xié)議乘盼。
3、用戶與CDN
用戶在終端進(jìn)行觀看直播的操作俄烁,相當(dāng)于向CDN發(fā)送獲取視頻流的請(qǐng)求绸栅。
那么問題來了,用戶終端發(fā)起獲取視頻流請(qǐng)求的時(shí)候页屠,是如何確定向哪個(gè)CDN獲却饪琛?
在用戶發(fā)起獲取視頻流請(qǐng)求的時(shí)候辰企,出于傳輸效率的考慮风纠,用戶與CDN之間有一套路由算法(這個(gè)算法一般是由CDN設(shè)定的)。比如這樣一個(gè)場(chǎng)景牢贸,XX公司/XX產(chǎn)品的直播間在北京竹观,用戶在西安。當(dāng)這個(gè)西安用戶發(fā)起獲取直播流的請(qǐng)求時(shí)潜索,XX公司/XX產(chǎn)品在西安臭增、上海、南京竹习、廣州誊抛、太遠(yuǎn)都有CDN,那么路由算法會(huì)告訴用戶終端整陌,該獲取哪個(gè)CDN芍锚,比如獲取西安CDN能夠獲得較高的傳輸速率昔园,那么該用戶的終端就會(huì)向西安CDN獲取視頻流。
4并炮、CDN與源站
當(dāng)用戶向CDN發(fā)送獲取視頻流的請(qǐng)求之后,CDN會(huì)向?qū)?yīng)的源站服務(wù)器獲取視頻流甥郑,這個(gè)動(dòng)作叫做“回流”逃魄。
那么問題又來了,CDN如何知道向哪個(gè)服務(wù)器獲取視頻流澜搅?
用戶終端向CDN請(qǐng)求獲取視頻流的時(shí)候伍俘,在傳送請(qǐng)求的時(shí)候,會(huì)告訴CDN向哪臺(tái)源站服務(wù)器獲取視頻流勉躺,會(huì)在傳送的數(shù)據(jù)中含有所獲取源站服務(wù)器的IP信息癌瘾。我們通常所說的切換線路,指的就是用戶在向CDN發(fā)送獲取視頻的請(qǐng)求時(shí)饵溅,更換了獲取源站服務(wù)器的IP信息妨退。
5、補(bǔ)充——為什么需要CDN蜕企?
解決帶寬問題咬荷。用戶對(duì)直播的播放流暢度、互動(dòng)實(shí)時(shí)性有較高的要求轻掩。對(duì)于這樣的性能要求幸乒,需要通過提高帶寬來解決。如果直播服務(wù)提供者的帶寬非常高唇牧,那么源站服務(wù)器的數(shù)據(jù)傳送效率就大大提高罕扎,流暢度和實(shí)時(shí)性是完全能夠滿足的。但考慮到成本的問題丐重,服務(wù)提供者一般會(huì)選擇使用CDN腔召,將源站服務(wù)器的數(shù)據(jù)傳送到CDN,通過CDN進(jìn)行存儲(chǔ)轉(zhuǎn)發(fā)弥臼。我們可以想象宴咧,如果用戶直接向源站服務(wù)器請(qǐng)求獲取視頻流,會(huì)導(dǎo)致源站服務(wù)器壓力過大径缅,畢竟在大多場(chǎng)景下掺栅,直播的觀看人數(shù)是比較多的,而通過CDN的存儲(chǔ)轉(zhuǎn)發(fā)可以降低源站服務(wù)器的壓力纳猪。