聽程序員GG講直播那些事

0 評(píng)論 5940 瀏覽 28 收藏 6 分鐘

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來(lái)講,是源頭,故而稱之為源站。
  • 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)作叫推流。

那么問(wèn)題來(lái)了——直播間是如何確定把視頻流推送到哪臺(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ù)睦?,傳輸協(xié)議相當(dāng)于是翻譯媒介。一個(gè)日本人,和一個(gè)俄國(guó)人,如果日本人講日語(yǔ),俄國(guó)人講俄語(yǔ),那么他們是無(wú)法溝通的。但如果他們有一門共通的語(yǔ)言,比如英語(yǔ),在遵從英語(yǔ)的語(yǔ)言規(guī)范的前提下,他們是能夠進(jìn)行溝通的。傳輸協(xié)議就是直播間與源站之間的共通語(yǔ)言。

RTMP是Adobe公司的流媒體傳輸協(xié)議,普通網(wǎng)絡(luò)用戶均可使用,包括非IOS平臺(tái)用戶。

HLS是IOS平臺(tái)下的流媒體傳輸協(xié)議。

3、用戶與CDN

用戶在終端進(jìn)行觀看直播的操作,相當(dāng)于向CDN發(fā)送獲取視頻流的請(qǐng)求。

那么問(wèn)題來(lái)了,用戶終端發(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)作叫做“回流”。

那么問(wèn)題又來(lái)了,CDN如何知道向哪個(gè)服務(wù)器獲取視頻流?

用戶終端向CDN請(qǐng)求獲取視頻流的時(shí)候,在傳送請(qǐng)求的時(shí)候,會(huì)告訴CDN向哪臺(tái)源站服務(wù)器獲取視頻流,會(huì)在傳送的數(shù)據(jù)中含有所獲取源站服務(wù)器的IP信息。我們通常所說(shuō)的切換線路,指的就是用戶在向CDN發(fā)送獲取視頻的請(qǐng)求時(shí),更換了獲取源站服務(wù)器的IP信息。

5、補(bǔ)充——為什么需要CDN?

解決帶寬問(wèn)題。用戶對(duì)直播的播放流暢度、互動(dòng)實(shí)時(shí)性有較高的要求。對(duì)于這樣的性能要求,需要通過(guò)提高帶寬來(lái)解決。如果直播服務(wù)提供者的帶寬非常高,那么源站服務(wù)器的數(shù)據(jù)傳送效率就大大提高,流暢度和實(shí)時(shí)性是完全能夠滿足的。但考慮到成本的問(wèn)題,服務(wù)提供者一般會(huì)選擇使用CDN,將源站服務(wù)器的數(shù)據(jù)傳送到CDN,通過(guò)CDN進(jìn)行存儲(chǔ)轉(zhuǎn)發(fā)。我們可以想象,如果用戶直接向源站服務(wù)器請(qǐng)求獲取視頻流,會(huì)導(dǎo)致源站服務(wù)器壓力過(guò)大,畢竟在大多場(chǎng)景下,直播的觀看人數(shù)是比較多的,而通過(guò)CDN的存儲(chǔ)轉(zhuǎn)發(fā)可以降低源站服務(wù)器的壓力。

 

本文系人人都是產(chǎn)品經(jīng)理團(tuán)隊(duì)@張婷?原創(chuàng)發(fā)布,未經(jīng)許可,不得轉(zhuǎn)載。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒(méi)評(píng)論,等你發(fā)揮!