本期大咖:李承均
LiveMe FE
先後在 TIBCO 、慧聰網、創新工場擔任工程師,自 2016 年起為 LiveMe 工作,對 WebRTC、Wed 動效、Electron 的開發實踐有深入研究。
疫情之後,各種在線項目迎來一個發展高峰,其中在線教育、在線診療、在線辦公、在線直播四大行業,都需要 RTC(實時音視頻)技術」,有消息稱「 RTC 技術將迎來高速普及的拐點」。
本期【藍湖大咖訪談】有幸邀請到 LiveMe 的工程師李承均老師,為大家分享 WebRTC 的實踐經驗。
RTC 技術的普及
作為一個前端工程師來談論 RTC 技術,我並不算專業,但身處實時音視頻(即直播)行業,為大家分享一些親身體會。
RTC(Real-time Communications)直譯為實時通信,狹義的一般稱為實時音視頻。
一個完整的實時音視頻系統都包括七個部分:
1 音視頻採集
2 音視頻數據處理
3 音視頻編碼
4 音視頻數據的傳輸和分發
5 音視頻解碼
6 音視頻數據處理
7 音視頻的播發和渲染
在這七個部分中,音視頻的採集在高端智能機普及前,都是專業音視頻製作團隊的工作
隨著高端智能機的普及,UGC 時代隨之而來,短視頻應用、直播應用也相繼出現。終端的硬編解碼能力的提升對音視頻編解碼系統提供了推動作用。最重要的實時網絡傳輸技術(RTP/RTCP)和內容分發技術(CDN)的進一步提升,給多人實時音視頻應用提供了較完善的技術支持。
因為疫情的關係,在線教育,在線診療,在線辦公,在線直播等相關行業在今年都有質和量的提升,隨著 5G 時代的到來與進一步普及,實時音視頻數據的傳輸和分發將進一步提升。
聲網的上市,我個人認為,就是 RTC 技術普及的一個標誌事件。
RTC 技術的入門
WebRTC 也就是網頁及時通訊,WebRTC 是 RTC 的一部分,它是 Google 的一個專門針對網頁實時通信的一個標準及開源項目。
我最初開始研究這個技術方向是因為工作需要。自身在直播行業,在 web 端,普通直播主流的媒體協議是 HLS 和 HTTP-FLV,前者是 Apple 系列,後者是 Adobe 系列,兩者都是基於 TCP 協議傳輸,使用 CDN 進行內容分發,會有幾秒甚至更長的延遲,主播與觀眾只能通過文字消息或者禮物來互動。
普通直播的延遲對觀眾端的影響大部分時候可以接受,但對於一些特殊場景,比如 PK、連麥,要求延遲低至幾百毫秒,這個時候幾秒的延遲就是致命的問題。
針對這個問題,目前常規的解決方案就是在流媒體服務中心將 PK的兩路流做合流操作,然後提供給 Web 使用。
當時就是為了解決高延遲問題以及一些特定的應用場景,開始關注 WebRTC 相關內容。
在剛入門的時候,最大的困難是 WebRTC 的各種技術名稱讓人迷惑,無法清晰定位到前端所能夠控制的部分。為了解決這個難題,我整理了即時通訊系統的各部分,對前端所能夠涉及的部分就清楚了,比如音視頻的採集和信令交互等。
RTC 技術的實踐
前端工程師在 WebRTC 的應用中能夠做的事情並不多,主要精力是在獲取 MediaStream 和服務端做信令交互的部分以及瀏覽器的兼容處理相關的工作。
這部分內容主要由以下三個 Web api 接口來實現:MediaSteam,RTCPeerConnection ,RTCDataChannel。
實時音視頻技術的自研工作並不是所有實時音視頻應用公司都會做的,更多的是採用第三方實時音視頻技術,這種情況下接入的成本相對較低,有比較成熟的接入流程,詳情見第三方網站,比如聲網,即構等。
如果是自研 WebRTC 項目,主要工程就在於封裝 SDK 和流媒體服務中心的建設,包括音視頻系統的七個部分,傳輸與分發部署會使用第三方基建。
我們在自研 WebRTC 服務的過程中會產出 Web 端接入的 SDK,其中封裝了MediaStream 的採集和與流媒體中心信令交互的部分。
信令的部分內容難在解析與調試過程,中間涉及大量的溝通環節,當然,如果只是使用第三方服務,基本都不會涉及這部分內容。
從擅長中找到熱愛
工程師中流行一句話「非熱愛不編程」,表達編程是一件枯燥的事,只有真正熱愛的人,才能從中發現樂趣並取得成就。
我認為,做事的最佳選項是做自己熱愛的,其次是做自己擅長的。
國內就業壓力大,少有人能從一開始就做自己熱愛的事,就連專業對口都無法完全滿足,在這種情況下,人們往往選擇做自己擅長的事情。在自己擅長的領域中發現自己的專長,你就有可能會愛上它。
我大學選擇了計算機專業,主要方向是 Java,在實習期間才接觸到前端。2009 年的時候還沒有前端工程師這個崗位,或者說叫美工。後來,是因為 JSP 的編寫和維護成本較高,使用了和 Java 應用很搭配的 GWT 前端框架,才搭上前端這列快速奔跑的火車。
前端工作能及時把代碼內容呈現在眼前,因此帶來的成就感而使我開始深入了解,慢慢發現,前端所覆蓋的範圍比想像中大得多,凡所可眼見的各種終端設備呈現的內容都可以納入前端範疇。
從專攻技術的工程師成為需要帶領技術團隊的管理者,我認為,最大的區別是隊員與教練的區別。
隊員主要精力在於提升個人技能,進而是團隊配合,只對具體的需求或者區域負責。
教練需要考慮每一個人的情況,合理分配不同的位置及對應負責的事,激發每個隊員的潛力,打造一個出成績的團隊,需要為整個團隊負責。
多提問,多扛責任,多橫向溝通這三點的提升可以幫助一個工程師向管理者邁進。
團隊管理過程中,協作產品是必不可少的。藍湖幫助設計師與前端工程師高效溝通、協作,在我接觸的前端與設計師協同工具中,是目前最好用的一個,解決了切圖,尺表,屬性,樣式等內容的獲取問題。
又到了畢業季、招聘季, 為正在找工作的或即將換工作的同學們,分享我在網際網路圈裡這 10 年的三點心得體會:
1 主動學習
網際網路技術日新月異,前端技術發展緊跟其後,學會如何學習是這些年最大的感悟。學生時代沒有做好的事情,工作後補上一課。作為一名網際網路工程師,學習不能停,停下就代表落後,落後就會被淘汰。
2 激情與責任心
要做就做最好,即使還存在差距,也要時刻激勵自己不斷優化,需要有追求極致的激情。
關於責任心這一點,是工程師往管理者改變道路上的一個重要指標。換言之,你要有背鍋的心態與能力。
3 換位思考
全局最優解是在遇見自己不能解決的問題的時候再思考的解決方案,不要局限自己的思路,換位思考能解決大問題。
WebRTC 技術作為瀏覽器及時通訊的解決方案,會隨著瀏覽器廠商進一步的支持,以及 5G 網絡的普及而越來越好。目前,在線會議、在線教育等領域已經出現優秀的商用應用,未來將會越來越好,感興趣的同學可以考慮加入我們的行列。
本期【藍湖大咖訪談】就到這裡,通過李承均老師的分享,湖湖對 RTC 技術有了新的認知,你學到了嗎?有什麼問題想請教大咖,歡迎在評論區留言。