作為直播傳輸的第一步,推流調度對於直播鏈路的影響非常大。本篇文章將針對這個話題,從傳輸的角度,講一講網易雲信直播是如何做好推流調度的。
推薦閱讀
《如何快速實現移動端短視頻功能?》
直播推流是什么
首先,直播推流,即主播將自己的本地客戶端采集編碼后的視頻數據“推”出去。推流會涉及到兩個問題:視頻推到哪里去了以及觀眾從哪里將流拉到播放端觀看。
主播推流是推到了直播接流服務器,由接流服務器負責分發到更高一層的傳輸層去將視頻流推往全球的觀眾處。直播接流服務器是視頻流從客戶端出發后的第一站,也是對傳輸質量影響最大的一站。直播上行調度處理的問題就是給推流客戶端選取一個合適的接流服務器。
直播接流服務器的調度和部署
直播接流服務器的調度和部署大有講究:
首先,國內由於網絡運營商的復雜性,存在眾多運營商,小運營商借大運營網絡等各種問題。對直播上行調度來說,第一步的挑戰就是需要識別出客戶具體的地域和網絡類型。這一步通常是通過一個網絡IP庫來處理。雖然網絡上存在着各種各樣的IP網絡庫,但准確性並無法保證。網易雲信基於20年的互聯網經驗,積累了大量的IP信息,擁有自己的IP庫,相對於網絡上通用的IP庫能更精准地識別出各地區及運營商問題。
其次,則是調度本身了,即按客戶的來源,分配給推流端對應的接流服務器。最常見的系統,是基於DNS的調度。網易雲信當然也支持這種調度方式。即給定一個域名,通過網易的DNS權威服務器解析,按照相應的規則,結合客戶的運營商和地域信息,分配對應運營商和相近地域的接流服務器給推流客戶端。比如,杭州的用戶使用域名xx.live.126.net推流,在不考慮DNS緩存的情況下,它會先走到DNS服務器進行域名解析,網易的DNS權威服務器會最終接到這個解析請求,並按IP庫查出的對應地區和運營商,給予一個合適的接流服務器的IP地址,返回給客戶端。客戶端的推流即可以推到這台接流服務器了。
DNS系統是個通用的解決方案,優點即不需要額外的環節介入,直接基於DNS即可實現調度。但它的缺點也相當突出:DNS系統為性能考慮,做了緩存。如果某台接流服務器由於各種原因宕機不可用了,而客戶端還會通過緩存取到這台機器作為接流服務器,這樣會導致客戶端推流不可用。客戶端就需要等到對應的DNS緩存失效后,才能使用業務,而這個緩存的失效時間也很復雜,國內的運營商可能會對DNS緩存做額外的延長,這時直播業務可用性就無法保證了。另一方面,DNS系統看到的“客戶IP”並不一定是客戶視頻流出口的IP,而是本地DNS出口的IP,這可能會導致一些DNS系統的誤判。
網易雲信如何做好推流調度
網易雲信擁有自己的直播調度系統。當用戶使用網易雲信直播SDK進行直播時,SDK會聯系網易雲信的調度系統直接獲取接流服務器地址。由於網易雲信調度系統部署選取了多線BGP,與眾多小運營商之間都拉了專線,因此小運營商用戶在聯系網易雲調度系統時,不會走第三方大運營商的出口,而是直接走專線出口,這樣可以最大程度上降低調度系統對於用戶網絡運營商的誤判。網易雲信調度系統在海外也會有對應的調度節點存在,即在海外,客戶端同樣可以取到合適的接流服務器地址。
另一方面,網易雲信的調度系統與全球各邊緣上行接流服務器之間有着緊密的聯絡,會實時監控各接流服務器的實時CPU、內存、網絡等資源使用狀況,從而最終給出一個最合理的調度結果。
網易雲信的用戶,可以通過使用網易視頻SDK而跳過上述DNS可能存在的問題,而進行更精確的調度,得到更佳的直播體驗。
直播系統的上行調度,很大程度上影響着整個直播的質量。如果上行接流服務器調度的不夠好,比如客戶端運營商識別錯誤導致客戶端將視頻流進行了跨運營商的傳輸,那么網絡就很容易不穩定而產生網頓等現象。網易雲信直播服務通過以上各種手段,最大程度保證了調度的准確性。
想要獲取更多產品干貨、技術干貨,記得關注網易雲信博客。