【技術(shù)分享】淺談RTC及Agora RTC SDK集成介紹

最近有幸看到Agora發(fā)布的RTC演講通知链瓦,參加了幾次云上講座租冠,由于本人之前一直從事通訊行業(yè),而且做過電信運營商的通訊設(shè)備的研發(fā)刁愿,對于RTC技術(shù)一直比較感興趣,在此分享一下我的理解到逊。

RTC-Real TimeCommunication铣口,實時通訊技術(shù)。提到實時通訊觉壶,大家最熟悉的就是大家打電話脑题,電信網(wǎng)當(dāng)然也經(jīng)歷了2G,3G铜靶,4G叔遂,5G,到了4G争剿,5G主要無線側(cè)和流量發(fā)展已艰,實時通訊其實并沒有特別大的變化,還是語音和視頻秒梅,這里就不再贅述了旗芬。

后來只是實時通訊滿足不了廣大人民群眾日益豐富的生活需求了,所以O(shè)TT蓬勃發(fā)展起來了捆蜀,像大家熟悉的微博、微信,因為大家很多事情并不需要實時的高速某個人辆它,比如只是曬一下自己當(dāng)下的心情/美食/有趣的段子誊薄,并不需要對方秒回或者立馬給出響應(yīng)的表達(dá)。

當(dāng)然實時通訊還是有眾多需要使用的場景锰茉,像疫情期間因遠(yuǎn)程辦公暴增的語音/視頻會議呢蔫,這兩年火到不行的直播帶貨,實時通訊再一次進(jìn)入了人們關(guān)注的視線飒筑;但是如果這些都基于運營商現(xiàn)有的實時通訊機(jī)制片吊,很難滿足日益豐富/變化的廣大人民群眾的需求,并且資費也會是很大的問題协屡,畢竟電話通訊比流量還是要貴很多的俏脊,因此基于非運營商通訊網(wǎng)的實時通訊技術(shù)得到了很大的發(fā)展。

很多公司看到了這類需求肤晓,其中最著名的就是Google推出的WebRTC技術(shù)爷贫,以及國內(nèi)做的最好的Agora聲網(wǎng)。WebRTC其實擴(kuò)展了RTC的發(fā)展領(lǐng)域补憾,本身是一個由Google發(fā)起的實時通訊解決方案漫萄,基于系統(tǒng)原生自帶的瀏覽器,開發(fā)者就可以快速地構(gòu)建出一個音視頻通訊應(yīng)用盈匾,并且該項目是完全開源的腾务。

在Google推出了WebRTC之后,W3C標(biāo)準(zhǔn)組織和IEFT組織迅速建立了標(biāo)準(zhǔn)組削饵,完善整個的技術(shù)標(biāo)準(zhǔn)體系岩瘦,這也使得WebRTC的通用化提供了比較好的基礎(chǔ),WebRTC事實上也成為了一種通訊標(biāo)準(zhǔn)葵孤。

WebRTC的整體架構(gòu)思路和流程如下圖担钮,WebRTC對于媒體處理做了很好的封裝


但是在最初的WebRTC里是沒有定義信令(Signaling)協(xié)議的,開發(fā)者可以自由發(fā)揮尤仍,事實上也確實很多不同協(xié)議的信令處理誕生箫津,HTTP Restful,Json over websocket, sip over http或者sip plugin都可以宰啦。一般來說需要有一個雙方都能訪問的中心端服務(wù)器來存儲通訊雙方(Caller和Callee)的信息苏遥,同時中心端服務(wù)器來幫助他們交換連接所需要的信息信令協(xié)議的目的是為了媒體通訊的雙方能夠獲取的通訊對端的存在(包括媒體通訊的IP地址,端口赡模,音視頻編解碼格式協(xié)商等),這樣主叫Caller和被叫Callee就可以相互發(fā)送媒體數(shù)據(jù)了田炭。


(圖里的例子是Browser之間P2P直接媒體互通的,這種情況在沒有對稱NAT情況下是可以漓柑,有NAT情況就需要用到STUN/TURN技術(shù)教硫,這里不再詳細(xì)描述了)

當(dāng)然還有一種媒體互通的方式叨吮,就是信令和媒體都走中心端,中心端都具備公網(wǎng)IP瞬矩,這樣就可以避免穿NAT的問題(Agora聲網(wǎng)的處理就是使用的這種方式)茶鉴。


當(dāng)然通過講座了解到,發(fā)展到當(dāng)前景用,Agora已經(jīng)超越了瀏覽器以及WebRTC的范疇涵叮,擴(kuò)展到了移動端Android以及IOS,Windows APP伞插,以及嵌入端Linux APP割粮;(當(dāng)然支持不同的瀏覽器本身也就實現(xiàn)了安卓和IOS端,但是畢竟移動端和嵌入式端使用網(wǎng)頁還是比較少媚污,使用APP比較多)舀瓢。

好了,言歸正傳杠步,上面說了這么多氢伟,其實是想講一下真正打通一個點對點通話,流程是如何的幽歼,這樣對于下面做SDK集成開發(fā)個人覺得會比較有幫助朵锣,不然只是打通,并不知道其中有哪些技術(shù)路徑需要理解和掌握甸私。

我這次用的是IOT的SDK-RTSA-lite诚些;首先到Github上下載RTSA的源碼,因為只是做驗證皇型,所以我用了Ubuntu的虛擬機(jī)來進(jìn)行編譯和運行诬烹。編譯的設(shè)備不管是虛擬機(jī)還是物理設(shè)備,最好都是可以連接互聯(lián)網(wǎng)的弃鸦,編譯里有很多依賴的音視頻代碼或者庫需要下載绞吁,不然就需要自己手工下載上傳去部署。

(https://github.com/AgoraIO/Basic-RTSA)

下載后唬格,進(jìn)入RTSA-lite目錄下家破,可以看到目錄分布,cross_compile.zh.md是做交叉編譯的說明购岗,后續(xù)如果移植到樹莓派編譯的話汰聋,再參考這個;agora_sdk放置的是so動態(tài)庫喊积,提供對開發(fā)者的API接口烹困;third_party中是http,json,media的解析庫,應(yīng)該是信令協(xié)商用到的庫乾吻;


最后是example髓梅,進(jìn)到目錄下進(jìn)行編譯拟蜻,編譯很快,秒完


在執(zhí)行example之前女淑,需要激活license瞭郑,這個需要在agora官網(wǎng)創(chuàng)建賬號和project辜御,大家直接去官網(wǎng)操作即可鸭你,唯一的是大家當(dāng)前申請License的時候最好加一下Agora的研發(fā)交流群,遇到的問題可以在里面快速得到解答擒权,這里絕不是廣告袱巨,因為我在申請License的時候就遇到了綁定project的問題。按照README.md的步驟修改license.cfg碳抄,激活愉老,就可以運行了。不過例子程序只有發(fā)送視頻和音頻剖效,當(dāng)然API提供了接收操作的API嫉入,大家在agora_rtc_api.h里就可以找到了(如下圖),仿照例子寫一個就可以璧尸,這里就不貼代碼了咒林。


在講座中,我也問到了爷光,SDK也提供了數(shù)據(jù)通道(datachannel)垫竞,這個在嵌入式端是非常有用的,除了實時通訊外蛀序,可能需要相互傳遞一些指令或者文件或者圖片等欢瞪,都可以通過數(shù)據(jù)通道傳輸盯腌,我曾經(jīng)在巴展上看過愛立信的使用案例割岛,使用WebRTC的DataChannel遠(yuǎn)程控制挖掘機(jī)進(jìn)行挖掘作業(yè),后續(xù)會嘗試使用數(shù)據(jù)通道完成一些應(yīng)用骨田,完成后再分享重贺。

寫在最后骑祟,Agora的SDK還是比較簡單易集成的,隨著需求和技術(shù)的發(fā)展檬姥,實時通訊我個人認(rèn)為會作為一種基本能力出現(xiàn)在各個應(yīng)用場景曾我,比如網(wǎng)絡(luò)游戲,語音客服健民,機(jī)器人控制抒巢,視頻監(jiān)控,辦公會議等等更不必說秉犹,況且今年Google的WebRTC開放了很多API能力蛉谜,以便可以和AR稚晚,聲音模擬等場景進(jìn)行結(jié)合和創(chuàng)新,感謝在這塊的技術(shù)發(fā)展還是大有可為的型诚。其實關(guān)于實時通訊客燕,除了端側(cè)簡單易集成之外,通訊質(zhì)量也是需要保證的狰贯,這里了解到聲網(wǎng)已經(jīng)部署了想躲規(guī)模的服務(wù)器也搓,使用了SD-RTN技術(shù)(之前有幸也做過短時間的技術(shù)分析和研究)進(jìn)行傳輸路徑優(yōu)化,確保通訊質(zhì)量涵紊。后續(xù)大家如果只是打個電話傍妒,可能使用免費微信的通話就可以了,但是如果需要在自己的應(yīng)用中添加實時通訊能力摸柄,大家還是需要對RTC技術(shù)的原理和發(fā)展進(jìn)行了解的颤练。

本文為個人原創(chuàng),首發(fā)于 聲網(wǎng)開發(fā)者社區(qū)https://rtcdeveloper.com/t/topic/20051

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驱负,一起剝皮案震驚了整個濱河市嗦玖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌跃脊,老刑警劉巖宇挫,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異匾乓,居然都是意外死亡捞稿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門拼缝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娱局,“玉大人,你說我怎么就攤上這事咧七∷テ耄” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵继阻,是天一觀的道長耻涛。 經(jīng)常有香客問我,道長瘟檩,這世上最難降的妖魔是什么抹缕? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮墨辛,結(jié)果婚禮上卓研,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好奏赘,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布寥闪。 她就那樣靜靜地躺著,像睡著了一般磨淌。 火紅的嫁衣襯著肌膚如雪疲憋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天梁只,我揣著相機(jī)與錄音缚柳,去河邊找鬼。 笑死敛纲,一個胖子當(dāng)著我的面吹牛喂击,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淤翔,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼佩谷!你這毒婦竟也來了旁壮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谐檀,失蹤者是張志新(化名)和其女友劉穎抡谐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐猬,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡麦撵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了溃肪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片免胃。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惫撰,靈堂內(nèi)的尸體忽然破棺而出羔沙,到底是詐尸還是另有隱情,我是刑警寧澤厨钻,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布扼雏,位于F島的核電站,受9級特大地震影響夯膀,放射性物質(zhì)發(fā)生泄漏诗充。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一诱建、第九天 我趴在偏房一處隱蔽的房頂上張望蝴蜓。 院中可真熱鬧,春花似錦涂佃、人聲如沸励翼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汽抚。三九已至抓狭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間造烁,已是汗流浹背否过。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留惭蟋,地道東北人苗桂。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像告组,于是被迫代替她去往敵國和親煤伟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容