直播技術原理:CDN 與直播

不少直播都是基於 CDN 來實現的。而經過聲網的服務,或基於聲網SDK與 CDN 結合,還能夠實如今直播中的連麥互動、白板同步等強調實時性的場景。本文源自社區投稿,介紹了該場景下的一些基礎知識。如你們存有疑問,能夠與做者交流html

對於直播業務場景,你們遇到問題時候得到的第一現場大多數都是從CDN觀衆端感覺到,好比拉流發現主播卡了,有雜音,模糊,不出圖等一類現象。在排查這類問題時候,其實從範圍上講,咱們須要從兩部分去排查。咱們實時音視頻雲結合CDN直播構建的場景以下圖所示:web

左邊是聲網實時音視頻雲部分,右邊是轉推到CDN部分。問題上報點觀察到的現象是在右邊觀衆端。那很明顯問題可能發生在聲網A區也可能發生在B區。瀏覽器

因此爲了確認範圍,能夠先了解排查下B區。緩存

那對於實時音視頻開發的同窗可能對CDN不是很瞭解。這篇短文主要目的是介紹下CDN,CDN直播有關的一些基礎知識和概念,已經簡單的問題排查方式。服務器

你們使用CDN雲廠商的一個基礎就是雲存儲,雲存儲是對象存儲。首先,一個文件包含了了屬性(術語叫metadata,元數據,例如該文件的大小、修改時間、存儲路徑等)以及內容(如下簡稱數據)。對象存儲區別於塊存儲(DAS,SAN)和文件存儲(NAS系統,NFS,CIFS),核心是將數據通路(數據讀或寫)和控制通路(元數據)分離,構成鍵值對,訪問時候經過key訪問。因此雲存儲訪問時候能夠經過HTTP協議post,get請求經過key值去下載數據訪問。網絡

雲錄製服務就是經過和CDN 結合,錄製下的內容存放在雲端,雲存儲。負載均衡

CDN加速

存儲只是存放在一臺或多臺服務器上可是地點是單一的,若是對於用戶分佈分散業務來講,訪問確定是低效緩慢一個是I/O壓力,一個是地區偏遠的來講訪問速度慢。ide

這種狀況結合使用CDN服務能夠有效解決。post

CDN的基本原理是普遍採用各類緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工做正常的緩存服務器上,由緩存服務器直接響應用戶請求。測試

訪問流程舉個例子:

1. 用戶向瀏覽器輸入 www.web.com 這個域名,瀏覽器第一次發現本地沒有dns緩存,則向網站的DNS服務器請求; 2.網站的DNS域名解析器設置了CNAME,指向了www.web.51cdn.com,請求指向了CDN網絡中的智能DNS負載均衡系統; 3.智能DNS負載均衡系統解析域名,把對用戶響應速度最快的IP節點返回給用戶; 4.用戶向該IP節點(CDN服務器)發出請求; 5.因爲是第一次訪問,CDN服務器會向原web站點請求,並緩存內容; 6.請求結果發給用戶。 CDN加速能夠作網頁加速,下載文件加速,動態加速,那和咱們音視頻相關的主要是點播加速以及CDN直播,以下圖:

訪問連接如: abc.com/abc.mp3 形式。對於對象存儲而言是沒有任何格式的概念的。因此任何形式均可以去下載。可是有時候但願有些音視頻文件可以瀏覽器支持直接打開播放,那是對格式有要求的,多數瀏覽器支持的是mp3的音頻文件,h264+aac的mp4封裝的視頻文件,能夠直接瀏覽器打開播放。Safari的話有個特例能夠支持m3u8文件。

CDN相關基本概念以下:

加速域名: 由用戶提供的須要被CDN加速的域名 源站地址: IP或域名,CDN節點從這裏獲取原始資源 邊緣節點:CDN分發的載體,能夠理解成離用戶最近的緩存節點 回源: CDN邊緣節點未命中時會從源站拉取資源 平臺類型: 被加速資源的類型,如WEB頁面、大文件下載、視頻點播等等 緩存策略: CDN服務器保存的一套針對用戶文件的緩存策略,根據緩存策略判斷文件是否超時須要回源 防盜鏈: 終端用戶訪問加速域名下的資源時,CDN服務器根據此配置判斷是否應該提供資源 刷新: 清除CDN緩存節點指定的文件或目錄資源 預取: 將文件資源預加載到CDN緩存節點 運營商:電信,聯通,移動,長城寬帶等區域:上海,廣東,江蘇,浙江......等 區域覆蓋:本運營商本地覆蓋,跨運營商本地覆蓋,本運營商跨區覆蓋,跨運 營商跨區覆蓋。

CDN直播

CDN直播是和咱們直播業務場景最緊密的部分了。借用一下阿里官網的直播圖以下,各廠商CDN直播服務都是如此。

  1. 採集視頻流
  2. 推流到CDN節點(其實對於雲存儲來講就是個文件上傳的過程)
  3. CDN節點轉到直播中,直播中心相似於強大的具備計算能力的中間源,能夠提供額外服務諸如落存(錄製,錄製到雲存儲,能夠進行點播經過CDN外鏈訪問),轉碼,審覈等。
  4. 直播中間分發到CDN節點
  5. 播放
    結合我司實時音視頻的推流解決方案: 第一步和第二步,其實對客戶而言只要提供一個 rtmp 推流地址給咱們就能夠了。與咱們對接只要在接口addstreampublisURL 裏面填寫這個推流地址就能夠往 CDN 推流了。rtmp地址須要客戶本身去申請一個備案過的域名未備案的只能走海外了,而後在CDN廠商去生成一對基於這個域名的推拉流地址。

好比我申請了域名是 abc.com,那麼在CDN那邊廠商生成的一對推拉流地址格式以下:

推流地址: rtmp://xxpull.abc.com/(直播空間名或者有些叫APPNAME)/(流名/streamname) 拉流地址有三種: rtmp://xxpull.abc.com/(直播空間名或者有些叫APPNAME)/(流名/streamname)

xxpull.abc.com/(直播空間名或者有些叫…

xxpull.abc.com/(直播空間名或者有些叫…

上面流名能夠隨時建立,一個流名就表明一組流。 咱們能夠看到拉流有三種格式:rtmp,m3u8(HLS),flv(Http-flv) 你們可能比較關心這三種拉流的區別:

協議 HTTP-FLV RTMP HLS
全稱 RTMP over Http Real Time Message Protocol HTTP Living Streaming
傳輸層 HTTP長連接 TCP 長連接 HTTP短連接
視頻格式 flv flv TS文件(m3u8)
原理 同RTMP,協議端口80 每一個時刻數據收到當即轉發 集合一段時間數據,生成ts 切片更新m3u8索引
延時 3~5s 10~30s 3~5s
Web支持 H5須要插件 H5須要插件 支持
其餘 播放時須要屢次請求網絡要求高 須要flash,不便於seek 跨平臺支持差須要flash插件

注意: 網頁端若是播放rtmp 或者flv 形式 的直播流,須要flash插件支持,因爲手機web端基本沒法調用flash插件,因此手機web端通常使用hls(即m3u8)的形式進行直播

如何選擇拉流方式: PC/Phone+直播+實時性要求高:使用flash播放RTMP。 . PC/Phone+直播+沒有實時性要求:使用RTMP或者HLS都可。 . PC/Phone+點播:使用HTTP-FLV或者HLS。 . PC/Phone+WEB+直播:想啥呢,老老實實用HLS吧。 再來看下我們的推拉流的域名地址:

rtmp://xxpull.abc.com/(直播空間名或者有些叫APPNAME)/(流名/streamname)

客戶本身提供的一級域名是abc.com,而後再CDN廠商配置後生成二級域名xxpull.abc.com(推流)和xxpull.abc.com(拉流)。

而後客戶須要本身在域名管理處本身將域名作個C記錄(CNAME)到CDN提供的域名上面去。何爲C記錄?能夠理解爲就是我域名在CDN廠商的映射別名,這樣子DNS解析後先解析到CDN廠商的CNAME而後,CNAME解析到CDN節點IP服務器推拉流。

關於上面的地址,還有一點是咱們看到有時候地址後面問號?後還有一串內容,這是鑑權。直播推拉流鑑權基本都是時間戳鑑權,時間戳+token的格式。

理解了地址接下來咱們遇到CDN集成直播推不了問題能夠先作下簡單排查,排查是不是在CDN直播部分配置相關問題。

  1. 首先若是是帶鑑權的地址,那咱們就先看下時間是否過時了,拿出裏面的時間戳,而後date -r (時間戳)看看是否過時

接下來,拿出地址裏面的域名,dig/nslookup一下看下解析如何,

上圖結果是正常的,域名有C記錄對應到CDN廠商的域名,CDN廠商的域名能夠解析附近可用的CDN節點服務器IP,這個結果告訴咱們域名配置是OK的,可是配置OK不表明必定可用。接下來檢查本地訪問到的CDN節點是哪裏,以下圖

ping返回的IP 218.92.209.38, 檢查這個IP的地址以及運營商,www.ipip.net/ip.html

查下本地的出口IP地區是哪裏,比較是否CDN節點和本地出口差的距離很遠或者不是一個運營商,若是這樣子會發生延遲高,甚至沒法訪問的問題。

能夠訪問這個 [ping.huatuo.qq.com 查看本地出口IP] (ping.huatuo.qq.com查看本地出口ip/)

檢查下來結果還不錯~沒問題。

FAQ:

  1. 直播CDN端卡頓咋辦? 若是從咱們聲網轉推的CDN,問題發生點可能出如今咱們頻道內或者CDN部分。 這裏介紹一下CDN端的初步排查 A, 檢查是否協議形成的問題。三種推流格式rtmp,flv,hls 使用同種網頁播放器嘗試或者ffplay,VLC ,網頁播放器如 imgcache.qq.com/open/qcloud… www.cutv.com/demo/live_t… B.檢查是否和播放器適配有關,不一樣播放器嘗試一下 C.查看本地網絡帶寬,網絡很差的比對值是直播的碼率,假如推流是1M 的碼率,那麼觀看端至少是8M 以上的帶寬纔可以支持這個直播流 www.speedtest.net/ D. 經過ping域名檢查推流CDN節點是否正常 E.檢查推流源(若是聲網轉推看頻道內)
  2. 直播延時高咋辦? a. 使用rtmp和flv通常是5s左右,若是hls比較高大於10s b. 檢查CDN端GOP設置是否過大,通常狀況下1~2s c. 使用不一樣播放器是否延時一致,由於播放器可能緩存了數據,因爲緩存,致使播放的是幾秒前的 d. 檢查網絡,因爲 jitter 抖動或者網絡不穩定等因素,形成的直播累加 e. 檢查推流源,測試直接推CDN和通過好比咱們聲網轉推後的延時差多少
相關文章
相關標籤/搜索