摘要:除了一些線程調度和線程模型的調整,我們還需要進行業務邏輯上的優化,比如縮減高消耗,低反饋的業務模塊,降低消耗,限制業務邏輯隊列內存分配增長空間,避免某些業務場景中內存持續增長導致系統奔潰。
HaaS RTC是阿里云IoT聯合視頻云開發的IoT設備端上的實時通訊服務,主要面向直播,音視頻通話等各種場景。HaaS700是我們HaaS家族新推出的多媒體開發板,它運行AliOS Things操作系統(RTOS),集成了Camera,音視頻等多媒體能力,目前HaaS700中集成了HaaS RTC音視頻對講方案。
在RTC技術方案中,目前最具代表性的就是WebRTC,WebRTC是 Google 的一個專門針對網頁實時通信的標準及開源項目,只提供了基礎的前端功能實現,包括編碼解碼和抖動緩沖等,開發者若要基于 WebRTC 開發商用項目,那么需要自行做服務端實現和部署,信令前后端選型實現部署,以及手機適配等一系列具體工作;在此之外還要在可用性和高質量方面,進行大量的改進和打磨,對自身開發能力的門檻要求非常高。一個專業的 RTC 技術服務系統,需要除了涵蓋上述的通信環節外,實際上還需要有解決互聯網不穩定性的專用通信網絡,以及針對互聯網信道的高容忍度的音視頻信號處理算法。
從技術角度出發,兩個設備之間的通信可以是設備對設備(P2P),也可以是設備-服務端-設備,設備對設備方案看起來是一個很直觀的想法,并且還可以節約流量(不需要通過服務器轉一道),但是這種模式是有一定局限性的,它更多的是服務一對一的音視頻對講,并且這種設備還不能太低端,在沒有服務端介入的情況下,特別是IOT領域,低端設備要做到適應各種場景(抗網絡丟包,NetEQ,音頻3A等各種算法)的能力是不現實的。而設備-服務端-設備這種模式,可以把一些耗CPU,耗內存的工作放到服務端,能夠做到滿足各種不同能力的IoT設備用戶體驗,同時整體技術方案也可以平滑適配當前新興的直播等領域。在HaaS RTC中,我們采用的是設備-服務端-設備的整體解決方案。
?
HaaS RTC技術方案是在視頻云基礎上搭建的,它主要關注的是如何在低端的IoT設備上打造跨設備,跨系統的音視頻方案,在高可靠,低成本的基礎上,為千萬級別的IoT多媒體設備帶來實時通訊能力。目前在HaaS700的開發板上,支持設備和設備對講,設備和手機對講以及設備和PC對講。
HaaS實現 音視頻實時通話
這里設備的概念指的是除了手機,平板以及PC類的其他IoT設備, 在現實生活中,我們常見的音視頻通話設備有可穿戴手表(兒童手表),公網對講機以及智能門禁對講等,音視頻通話能力在這些設備中是具備主導屬性的,不同的設備場景在產品化過程中的技術要求有很大的不同。比如在兒童手表中,我們需要考慮功耗問題,通過對音視頻的編碼格式,幀率,軟硬件的編解碼還有參數的調整,盡可能的降低設備功耗,確保通話時長,同時,還需要保證視頻通話的高清晰度和高保真,在視頻通話的場景中,由于孩子始終處于移動的狀態,4G信號極其容易不穩定,但是家長和小孩需要能夠在視頻通話的過程中流暢且清晰的進行溝通,這是尤為重要的;而在門禁對講中,由于設備本身是得到持續供電的,所以功耗問題不需要特別關注,同時國內的可視對講系統通常應用于大型的住宅小區,很多是上千戶,甚至上萬戶的小區,對聯網戶數容量及穩定性要求更高,可視對講系統的主流仍然是采用RS-485總線信號傳輸,有向數字化發展的趨勢,國內采用TCP/IP的戶數容量更大的可視對講系統正在逐漸走向成熟,所以在門禁對講領域,我們更需要關注高容量,穩定性等問題。HaaS700考慮到了這些場景的需求,在功耗以及穩定性方面都做了大量的優化,可以應用在各種音視頻對講或直播等場景中。
隨著互聯網以及設備智能化進程加速,設備和手機之間的通信已經越來越常見。比如手表和手機視頻通話,直播設備和手機之間的視頻直播,智能音箱和手機之間的視頻通話等。在這些場景中,設備和手機之間存在比較大的差異,包括屏幕分辨率差異,視頻編解碼能力差異,CPU運算能力差異,網絡帶寬差異等等,這些差異決定了在音視頻通話整體方案中,需要從技術角度做到各種差異性的屏蔽,比如常見的音視頻編解碼格式適配,屏幕分辨率適配,網絡擁塞控制算法調整發送碼率解決網絡帶寬變化帶來的數據傳輸問題,NetEQ算法解決網絡抖動導致的音頻播放不平滑問題等等。同時,在不同的場景中,對音視頻延遲的要求也不盡相同,比如音視頻通話場景延遲要求要高于直播場景,在音視頻通話場景中,需要盡可能確保音視頻發送端到接收端的時延在1S以內,這對用戶體驗尤為重要。
在移動互聯網時代,用戶的通信方式更多的轉向移動設備,設備和PC之間的通信越來越偏向行業化的趨勢發展,特別是近兩年直播的興起以及疫情的影響,加速了各種電商直播,線上教學以及線上會議的普及化,不同于設備對設備以及設備對手機之間的一對一音視頻通話場景,電商直播主要是一對N,而線上教學,線上會議更是N對N的關系,這意味這要滿足線上會議等場景,我們需要實現N路推流,N路拉流,從技術角度來說,目前已經有比較成熟的技術方案,但對于設備端,主要的挑戰是設備性能(CPU,內存帶寬等),特別是一些低端的設備,在這種情況下,我們可以把一些性能和內存要求比較高的操作放在服務端,比如N路推流在服務端建立映射,設備端只推一路,N路拉流在服務端進行,合成一路后,再下發到設備端。把這些性能要求比較高的操作轉嫁到服務端后,設備端實際上還是一路拉流和一路推流,性能要求和一對一的音視頻通話并無區別。在HaaS RTC中,我們打通了設備和PC之間的音視頻通話,進一步推進了HaaS設備通信跨系統跨硬件平臺的能力,實現真正的三端互通。
HaaS RTC支持在RTOS級別的系統上搭建音視頻通話能力,為此,我們做了整體的架構調整和性能優化。區別于Android和Linux系統,RTOS操作系統一般CPU能力弱,內存小,比如HaaS700的CPU是ARM A7單核800Hz, 剩余可用內存24MB左右,這要求我們需要盡可能的減少內存消耗,重構線程模型,比如一些串行或者不是很耗時操作的線程合并,降低簡單線程的線程棧空間等,同時,由于RTOS系統是單進程,它的線程調度和Android和Linux有很大的區別,對于需要及時響應的收發數據線程,我們需要顯式的提高線程調度優先級,避免出現需要及時響應的線程長時間沒有被調度到。除了一些線程調度和線程模型的調整,我們還需要進行業務邏輯上的優化,比如縮減高CPU消耗,低反饋的業務模塊,降低CPU消耗,限制業務邏輯隊列內存分配增長空間,避免某些業務場景中內存持續增長導致系統奔潰。
在架構層面,為了快速適配不同的系統平臺,HaaS RTC打造了系統和驅動統一適配層,包括Camera,Display,渲染,編解碼以及系統線程,時鐘等,這樣的好處是在不同的系統平臺上,HaaS RTC核心代碼不需要做修改,只需要在適配層做一些簡單的底層適配。在適配層之上,包括音視頻推流,音視頻拉流,視頻云SDK以及信令系統模塊,其中音視頻推流模塊主要負責推流通道建立,編碼后的音視頻數據推送,音視頻拉流模塊負責拉流通道建立,接收服務端發送的音視頻碼流,視頻云SDK主要負責音視頻數據傳輸,以及適應傳輸過程中的網絡抖動算法實現,包括帶寬估計,NetEQ等等,信令系統負責信令的呼叫控制,包括呼叫響應,呼叫接聽,呼叫掛斷等流程中涉及到的各種信息控制管理,在音視頻對講場景下,它需要和服務端配合,比如雙方建立會話過程中,服務端需要查詢驗證呼叫方和被呼叫方賬號信息和設備信息,經過驗證后,通知被呼叫方,被呼叫方可以接聽或者掛斷呼叫,服務端根據被呼叫方的反饋建立會話通道或中止會話流程。RTC Manager是基于音視頻推流,音視頻拉流以及信令和系統能力之上的RTC管理模塊,在推流場景中,它負責音頻和視頻數據采集,并進行音視頻編碼,編碼器輸出的碼流傳到推流模塊并上傳到服務端,在拉流場景中,它負責接收音視頻推流模塊下發的音視頻數據,并通過音視頻解碼器進行解碼操作,最終通過播控模塊播放音頻和視頻畫面。除此之外,RTC Manager負責向應用層暴露RTC場景的所有能力,應用層通過RTC Manager暴露的接口實現視頻通話能力。
HaaS RTC設備端技術方案只是滿足了RTOS和Linux設備端上的技術能力支撐,對于一套完整的RTC解決方案,還需要移動端以及強大的服務端能力支撐,移動端需要解決各種手機平臺的能力適配,讓用戶獲得一致的用戶體驗,服務端需要提供大規模實時的音視頻推流,拉流能力,能夠配合設備端應對網絡波動影響帶來的丟包,延遲等各種問題。
我們常見的RTC場景大部分是基于成熟的系統上,比如IOS,Android以及Windows等等,這些系統一般都具備性能比較高的處理器以及比較大的內存容量,而RTC場景本身對CPU和內存要求也是比較高的(曾經微信視頻通話一段時間后,手機燙成暖寶寶的體驗還記憶猶新)。對于低端設備,如果要集成RTC能力,需要我們針對RTC場景做大量的性能,內存調優工作。相比于動輒4核CPU,內存2G的Android設備,HaaS700CPU是arm A7單核,頻率只有800MHz,并且剩余可用內存不到24MB。
性能指標 | 數據值 |
CPU占用率 | 100% |
內存 | 24MB |
幀率 | 10fps |
分辨率 | 320x240 |
碼率 | 100K |
視頻延遲 | >6S |
音頻延遲 | >3S |
音頻3A | Enable |
HaaS700 RTC性能(優化前)
在HaaS700上剛bring up RTC時,CPU占用率100%,音視頻延遲大于6S,系統正常運行時間不超過1分鐘,因為內存快速增加很快就超過24MB,導致系統crash。特別是在弱網情況下,由于數據包發送速率降低,帶寬估計模塊需要持續運轉,這不僅提高了CPU占用率,同時還導致發送隊列碼流大量堆積,使得內存申請持續增長,整體系統基本處于不可用的狀態。所以單純把Android或Linux這種面向偏高端的設備端系統運行經驗照搬到RTOS級別的低端系統上,是不可行的,我們需要線程級別的代碼重構,功能模塊裁減以及整體的性能和內存優化。
性能指標 | 數據值 |
CPU占用率 | 85% |
內存 | 12.5MB |
幀率 | 20fps |
分辨率 | 640x360 |
碼率 | 400K |
視頻延遲 | <500 MS |
音頻延遲 | <250 MS |
音頻3A | Enable |
HaaS700 RTC性能(優化后)
為此,在HaaS700上,我們針對視頻通話場景做了線程級別的代碼重構,并做了大量的性能和內存優化,整體性能和內存要求達到了可產品化水平,同時,在用戶體驗上,我們對音視頻延遲做了進一步的優化,在設備對設備,設備對手機上都可以達到音視頻通話場景的產品化水準。
自從智能手機出現以來,音視頻通話在現實生活中已經隨處可見,目前運用最廣泛的莫過于微信,而近兩年來新興業務的蓬勃發展,讓RTC技術方案得以滲透到各個領域,比如直播,遠程教育,線上會議等等。我們可以預見在不久的將來,RTC技術會有更多的業務形態,特別是需要一些線上線下相結合的領域,值得我們不斷挖掘和探索。比如現在很多餐廳提倡透明衛生廚房,顧客可以通過透明玻璃看到廚師炒菜,讓顧客更放心。這種方式是否可以有更好的表達?如果我們在餐廳廚房按照一個直播攝像頭,顧客在座位上直接掃碼就可以觀看廚房情況,是否可以達到更好的效果?同時,這種模式是不是可以降低餐廳打造安心廚房的改造成本,更容易復制和推廣。
如需更多技術支持,可加入釘釘開發者群,或者關注微信公眾號。
更多技術與解決方案介紹,請訪問HaaS官方網站https://haas.iot.aliyun.com
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/122291.html
摘要:宋體同時支持多平臺的接入,能滿足不同客戶端的接入需求。宋體宋體支持萬人直播推送宋體宋體利用實時集群直播集群,實現音視頻連麥互動可以同時推送萬人直播,具體原理如下。有人說:2G 看文字,3G 看圖片,4G 看視頻,那么對于已經開啟序幕的 5G 時代呢?隨著短視頻、在線課堂、互動直播等音視頻應用的崛起,如何適配差異化的網絡環境,為用戶提供更流暢高清的實時音視頻服務成為關注重點。而當前的音視頻技術...
摘要:隨著通信的發展,實時音視頻服務將進一步覆蓋更多的生活場景。什么是實時通訊,我們很容易把和混淆。另外的延遲是毫秒級,在正常的網絡情況下,延遲在之間,可以多方通話實時互動。這篇文章主要是圍繞告訴大家什么是,能解決什么問題的普及貼。2020年初爆發的疫情,催生了在線教育、視頻會議、遠程醫療等實時音視頻應用的大規模增長,也使得服務于這些場景背后的底層框架RTC技術站上了風口。早在 2010 年,Go...
摘要:擁塞控制算法包含三種擁塞控制算法,和。在早期的實現當中,這兩個擁塞控制算法分別是在發送端和接收端實現的。音頻算法音頻算法指的是在發送端對發送信號依次進行回聲消除降噪以及音量均衡操作,它包含三個算法回聲消除,噪聲抑制和自動增益控制。 1、背景 RTC(Real-time Communica...
閱讀 4417·2021-11-19 09:59
閱讀 3335·2021-10-12 10:12
閱讀 2646·2021-09-22 15:25
閱讀 3349·2019-08-30 15:55
閱讀 1193·2019-08-29 11:27
閱讀 1473·2019-08-28 18:06
閱讀 2747·2019-08-26 13:41
閱讀 2564·2019-08-26 13:41