chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何為應(yīng)用程序提供一個(gè)更小更快的視頻通話庫(kù)?

LiveVideoStack ? 來(lái)源:LiveVideoStack ? 作者:Ishan Khot ? 2021-01-13 14:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在研究如何使視頻通話在未來(lái)更高效,更易于擴(kuò)展時(shí),F(xiàn)acebook意識(shí)到,最好的方法是從頭開(kāi)始重新設(shè)計(jì)庫(kù)并重寫整個(gè)庫(kù),也就是Rsys。

我們將在我們的應(yīng)用程序和服務(wù)的所有相關(guān)產(chǎn)品上推出一個(gè)新的視頻通話庫(kù),包括Instagram、Messenger、Portal、Workplace chat等。

通過(guò)創(chuàng)建一個(gè)通用類庫(kù)足以支持所有這些不同的用例,但我們需要從頭重寫現(xiàn)有庫(kù)使用最新版本的開(kāi)源的WebRTC庫(kù)。這是一個(gè)非常令人難以置信的任務(wù),以至于我們整個(gè)公司的工程師都參與到了其中。

與前面的庫(kù)相比,Rsys能夠支持多個(gè)平臺(tái),包括Android, iOS, MacOS, Windows和Linux。它的大小大約小了20%,這使得它很容易集成到大小受限的平臺(tái)中,比如Messenger Lite。Rsys擁有大約90%的單元測(cè)試覆蓋率和一個(gè)完整的集成測(cè)試框架,它涵蓋了我們所有的主要調(diào)用場(chǎng)景。

為此,我們通過(guò)將庫(kù)和體系結(jié)構(gòu)的大小優(yōu)化為二進(jìn)制大小來(lái)實(shí)現(xiàn)這一目標(biāo),方法是將調(diào)用所需的部分分成獨(dú)立的獨(dú)立模塊,并利用不依賴于操作系統(tǒng)和環(huán)境的跨平臺(tái)解決方案。

Facebook的視頻通話初始版本是在一個(gè)已有7年歷史的WebRTC分支上編寫的,專門用于在Messenger中啟用本機(jī)音頻通話。當(dāng)時(shí),我們的目標(biāo)是為我們的用戶提供功能最豐富的體驗(yàn)。從那時(shí)起,我們添加了視頻通話,群組通話,視頻聊天引擎和交互式AR效果。每月有數(shù)百萬(wàn)人使用視頻通話,這個(gè)功能齊全的庫(kù)表面上看起來(lái)簡(jiǎn)單,但在幕后卻變得復(fù)雜得多。我們有大量特定于Messenger的代碼,這使得我們很難支持像Portal和Instagram這樣的應(yīng)用程序。對(duì)于組調(diào)用和對(duì)等調(diào)用,我們有單獨(dú)的信令協(xié)議,這要求我們編寫兩次特征,并在代碼庫(kù)中造成很大的不一致。我們還花費(fèi)了更多的時(shí)間來(lái)更新WebRTC的分支,并使用開(kāi)源的最新改進(jìn)功能。但最后,我們發(fā)現(xiàn)我們?cè)跒榈凸脑O(shè)備和低帶寬場(chǎng)景提供可靠服務(wù)方面落后了。

在研究如何使視頻通話在未來(lái)更高效,更易于擴(kuò)展時(shí),我們意識(shí)到,最好的方法是從頭開(kāi)始重新設(shè)計(jì)庫(kù)并重寫整個(gè)庫(kù)。結(jié)果就是Rsys,這是一個(gè)視頻通話庫(kù),它讓我們能夠利用自2014年編寫原始庫(kù)以來(lái)在視頻通話領(lǐng)域取得的一些重大進(jìn)步。與以前的版本相比,Rsys縮小了約20%,并且可在所有開(kāi)發(fā)中使用平臺(tái)。通過(guò)這一新的迭代,我們將重新構(gòu)想我們對(duì)視頻通話平臺(tái)的看法,并從頭開(kāi)始使用新的客戶端核心和可擴(kuò)展性框架。這有助于我們提升自己的最先進(jìn)技術(shù),新的代碼庫(kù)旨在在未來(lái)十年保持可持續(xù)性和可擴(kuò)展性,為跨應(yīng)用程序的遠(yuǎn)程存在和互操作性奠定基礎(chǔ)。

更快更小

無(wú)論設(shè)備類型或網(wǎng)絡(luò)條件如何,使用較小的代碼庫(kù)可以為其用戶實(shí)現(xiàn)更快地加載、更新和啟動(dòng)。相比之下,小型庫(kù)也更易于管理、更新、測(cè)試和優(yōu)化。當(dāng)我們開(kāi)始考慮準(zhǔn)備新的版本時(shí),我們的峰值二進(jìn)制大小已高達(dá)20 MB。盡管我們可以通過(guò)編輯一些代碼段來(lái)減少一些內(nèi)容,但是要達(dá)到我們想要的效果,我們意識(shí)到我們需要從頭開(kāi)始重寫整個(gè)代碼庫(kù)。

想要獲得較小的庫(kù),最簡(jiǎn)單方法是去掉多年來(lái)我們添加的許多功能特征,但是對(duì)我們來(lái)說(shuō),保留所有最常用的功能(如AR效果)很重要。因此,我們退后一步,研究了如何應(yīng)用過(guò)去十年中所學(xué)到的知識(shí)以及我們對(duì)如今使用我們產(chǎn)品的用戶的需求了解。探索完我們的這些選擇之后,我們決定需要越過(guò)接口,并深入研究庫(kù)本身的基礎(chǔ)結(jié)構(gòu)。

我們做了幾個(gè)架構(gòu)選擇來(lái)優(yōu)化大小,引入了一個(gè)即插即用的框架,使用selects有選擇地將特征編譯到需要它們的應(yīng)用程序中,并引入了一個(gè)通用框架來(lái)編寫基于Flux架構(gòu)的新特性。我們也從Folly這樣的模板化通用庫(kù)轉(zhuǎn)向了像Boost這樣規(guī)模更優(yōu)的庫(kù)。SML在所有應(yīng)用程序中實(shí)現(xiàn)大小增益。

最后,我們將核心二進(jìn)制文件的大小減少了大約20%,從大約9MB減少到大約7MB。我們通過(guò)重新構(gòu)建我們的特征以適應(yīng)簡(jiǎn)化的體系結(jié)構(gòu)和設(shè)計(jì)來(lái)實(shí)現(xiàn)這一點(diǎn)。雖然我們保留了大部分特性,但隨著時(shí)間的推移,我們將繼續(xù)引入更多可插入特性。更少的代碼行數(shù)使代碼庫(kù)更輕、更快、更可靠,而精簡(jiǎn)的代碼庫(kù)意味著工程師可以更快地進(jìn)行創(chuàng)新。

這項(xiàng)工作的主要目標(biāo)之一是最小化代碼復(fù)雜性和消除冗余。我們知道,一個(gè)統(tǒng)一的體系結(jié)構(gòu)將允許全局優(yōu)化(而不是讓每個(gè)特性都集中在局部?jī)?yōu)化上),并允許代碼重用。為了構(gòu)建這個(gè)統(tǒng)一的體系結(jié)構(gòu),我們做了一些主要的更改:

信令:我們?yōu)樾帕顥L岢隽艘环N狀態(tài)機(jī)架構(gòu),它可以統(tǒng)一對(duì)等調(diào)用和組調(diào)用協(xié)議語(yǔ)義。我們能夠從庫(kù)的其余部分抽象出任何特定于協(xié)議的細(xì)節(jié),并提供一個(gè)信令組件,該組件將全權(quán)負(fù)責(zé)在調(diào)用參與者之間協(xié)商共享狀態(tài)。通過(guò)減少重復(fù)代碼,我們可以一次編寫特性,并允許輕松更改協(xié)議,并為對(duì)等調(diào)用和組調(diào)用提供統(tǒng)一的用戶體驗(yàn)。

媒體:我們決定重用我們的狀態(tài)機(jī)架構(gòu),并將其應(yīng)用到媒體堆棧中,但這次我們捕獲了開(kāi)源WebRTC API的語(yǔ)義。同時(shí),我們還致力于用最新版本替換我們的分支版本W(wǎng)ebRTC,同時(shí)保留所有針對(duì)產(chǎn)品的特定優(yōu)化。這使我們能夠在狀態(tài)機(jī)下更改WebRTC版本,只要API本身的語(yǔ)義沒(méi)有明顯變化,我們就可以從開(kāi)放源碼代碼庫(kù)中設(shè)置定期常規(guī)拉取。這使我們能夠輕松地更新到最新的功能,而不會(huì)出現(xiàn)任何停機(jī)或延遲。

SDK:為了具有特定于功能的狀態(tài),我們使用Flux架構(gòu)來(lái)管理數(shù)據(jù),并為調(diào)用產(chǎn)品提供API,這些API的工作原理類似于web開(kāi)發(fā)人員熟悉的基于React js的應(yīng)用程序。每個(gè)API調(diào)用都會(huì)導(dǎo)致通過(guò)中央調(diào)度程序路由的特定操作。然后,這些動(dòng)作由特定的reducer類處理,并根據(jù)動(dòng)作的類型發(fā)出模型對(duì)象。這些模型對(duì)象被發(fā)送到包含所有特定于功能的業(yè)務(wù)邏輯的網(wǎng)橋,并導(dǎo)致更改模型的后續(xù)操作。最后,所有的模型更新都被發(fā)送到UI,在那里它們被轉(zhuǎn)換成特定于平臺(tái)的視圖對(duì)象進(jìn)行渲染。這使我們能夠清晰地定義一個(gè)包含減速器、橋接器、動(dòng)作和模型的特性,從而使我們能夠在運(yùn)行時(shí)為不同的應(yīng)用程序配置特性。

OS:為了使我們的平臺(tái)具有通用性和可擴(kuò)展性,我們決定抽象出直接依賴于OS的所有功能。我們知道,對(duì)于某些功能(例如創(chuàng)建硬件編碼器,解碼器,線程抽象等),必須具有針對(duì)Android,iOS等的特定于平臺(tái)的代碼,但是我們嘗試為這些功能創(chuàng)建通用接口,以便MacOS和Windows等平臺(tái)可以通過(guò)代理對(duì)象提供不同的實(shí)現(xiàn)來(lái)輕松插入。我們還大量使用Buck中的cxx_library來(lái)以簡(jiǎn)便的方式配置特定于平臺(tái)的庫(kù),以用于編譯器標(biāo)志,鏈接器參數(shù)等。

2dc6f8b8-521b-11eb-8b86-12bb97331649.png

用于調(diào)用的Rsys架構(gòu)

下一步的計(jì)劃

如今,我們的調(diào)用平臺(tái)明顯要小得多,并且能夠在許多不同的用例和平臺(tái)上擴(kuò)展。我們支持每天都有數(shù)百萬(wàn)人使用的電話。我們的庫(kù)是我們所有主要通話應(yīng)用程序的一部分,包括Messenger,Instagram,Portal和Workplacechat。構(gòu)建Rsys需要一個(gè)很長(zhǎng)的過(guò)程,但是,對(duì)于使用這些應(yīng)用程序的人們來(lái)說(shuō),它的感覺(jué)并沒(méi)有太大不同。它將繼續(xù)為人們提供出色的通話體驗(yàn)。但這僅僅是開(kāi)始。

我們?cè)赗sys中所做的工作將使我們?cè)谶~向未來(lái)的過(guò)程中能夠繼續(xù)創(chuàng)新和擴(kuò)展我們的通話體驗(yàn)。除了構(gòu)建可在未來(lái)十年或更長(zhǎng)時(shí)間保持可持續(xù)發(fā)展的庫(kù)之外,這項(xiàng)工作還為我們所有應(yīng)用的跨應(yīng)用調(diào)用奠定了基礎(chǔ)。它也為我們建立以遠(yuǎn)程存在為中心的環(huán)境奠定了基礎(chǔ)。

這項(xiàng)工作得益于與客戶平臺(tái)團(tuán)隊(duì)合作。我們感謝所有為Rsys做出貢獻(xiàn)的人,特別是Ed Munoz,Hani Atassi,Alice Meng,Shelly Willard,Val Kozina,Adam Hill,Matt Hammerly,Ondrej Lehecka,Eugene Agafonov,Michael Stella,Cameron Pickett,Ian Petersen和Mudit Goel在實(shí)施方面提供了幫助,并繼續(xù)提供指導(dǎo)和支持。

原文標(biāo)題:如何為我們的應(yīng)用程序提供一個(gè)更小、更快的視頻通話庫(kù)

文章出處:【微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    8233

    瀏覽量

    94515
  • 視頻通話
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    12374

原文標(biāo)題:如何為我們的應(yīng)用程序提供一個(gè)更小、更快的視頻通話庫(kù)

文章出處:【微信號(hào):livevideostack,微信公眾號(hào):LiveVideoStack】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    何為 Vision Five 2 編譯自定義 Linux 內(nèi)核?

    些參考、幫助和鏈接,說(shuō)明如何為 Vision Five 2 編譯自定義內(nèi)核以及 StarFive 開(kāi)發(fā)團(tuán)隊(duì)必須提供哪些驅(qū)動(dòng)程序,那就太好了。
    發(fā)表于 02-24 07:44

    文詳解SystemC仿真庫(kù)的編譯

    AMD Vivado 設(shè)計(jì)套件以文件和庫(kù)的形式提供仿真模型。仿真庫(kù)包含器件和 IP 的行為和時(shí)序模型。編譯后的庫(kù)可供多個(gè)設(shè)計(jì)項(xiàng)目使用。用戶必須在設(shè)計(jì)仿真之前通過(guò)名為 compile_s
    的頭像 發(fā)表于 12-12 15:08 ?4788次閱讀
    <b class='flag-5'>一</b>文詳解SystemC仿真<b class='flag-5'>庫(kù)</b>的編譯

    庫(kù)與標(biāo)準(zhǔn)C庫(kù)的區(qū)別

    主要的差異: 1.代碼(數(shù)據(jù))量更小(對(duì)比上圖)。 2.缺少些不常用標(biāo)準(zhǔn)庫(kù)函數(shù),比如:文件 I/O 的庫(kù)函數(shù)。 3.微庫(kù)最大程度優(yōu)化代碼量,可能會(huì)導(dǎo)致有些庫(kù)代碼運(yùn)行速度更慢。 4.可
    發(fā)表于 12-09 07:49

    PYQT 應(yīng)用程序框架及開(kāi)發(fā)工具

    特點(diǎn),已成為嵌入式領(lǐng)域的重要開(kāi)發(fā)工具 PyQt 是個(gè)創(chuàng)建 GUI 應(yīng)用程序的工具包。它是 Python 編程語(yǔ)言和 Qt 庫(kù)的成功融合。因?yàn)榭捎玫念愑泻芏啵麄儽环殖蓭讉€(gè)模塊。Qt
    發(fā)表于 10-29 07:15

    如何在應(yīng)用程序調(diào)試期間分析棧和堆使用情況

    隨著 AMD Vitis 統(tǒng)軟件平臺(tái) 2021.2 的發(fā)布,Vitis 引入了個(gè) Tcl 腳本,用于在應(yīng)用程序運(yùn)行的特定時(shí)間點(diǎn)協(xié)助查找棧和堆的內(nèi)存使用情況。該腳本已延續(xù)到后續(xù)的 V
    的頭像 發(fā)表于 10-24 16:54 ?873次閱讀
    如何在<b class='flag-5'>應(yīng)用程序</b>調(diào)試期間分析棧和堆使用情況

    學(xué)生適合使用的SOLIDWORKS 云應(yīng)用程序

    隨著科技的不斷發(fā)展,計(jì)算機(jī)輔助設(shè)計(jì)(CAD)技術(shù)已經(jīng)成為現(xiàn)代工程教育的重要組成部分。SOLIDWORKS作為款CAD軟件,其教育版云應(yīng)用程序為學(xué)生提供了強(qiáng)大而靈活的設(shè)計(jì)平臺(tái)。本文將探討
    的頭像 發(fā)表于 09-15 10:39 ?763次閱讀
    學(xué)生適合使用的SOLIDWORKS 云<b class='flag-5'>應(yīng)用程序</b>

    Aisler 發(fā)布 Lovely Library:個(gè)為 KiCad 打造的高質(zhì)量歐洲元器件庫(kù)

    興地宣布推出我們的 Lovely Library,這是個(gè)精心打造的符號(hào)與封裝庫(kù),其中的元器件均由我們的合作伙伴 Würth Elektronik Group ?和 Diotec
    的頭像 發(fā)表于 08-04 11:13 ?869次閱讀
    Aisler 發(fā)布 Lovely Library:<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>為 KiCad 打造的高質(zhì)量歐洲元器件<b class='flag-5'>庫(kù)</b>

    FX3 UVC 無(wú)法與 Ubuntu 24.04 Cheese 或 Snapshot 相機(jī)應(yīng)用程序配合使用,怎么處理?

    添加了來(lái)自 VLC 的日志以供比較。根據(jù)日志,似乎 PipeWire 或 UVC 驅(qū)動(dòng)程序存在些問(wèn)題。 我直在做些調(diào)試,發(fā)現(xiàn)對(duì)于 Ubuntu
    發(fā)表于 07-16 06:37

    使用 USB CDC 下載應(yīng)用程序固件,用時(shí)過(guò)長(zhǎng)是為什么?

    我已經(jīng)在PSoC? 6 WIFI-BT Pioneer Kit 上嘗試了 DFU 示例代碼,發(fā)現(xiàn)了件奇怪的事情。 如果我使用 UART-over-USB 下載應(yīng)用程序固件,則只需 20 秒。但是
    發(fā)表于 07-14 07:10

    華秋DFM軟件升級(jí)時(shí),提示“應(yīng)用程序無(wú)法正常啟動(dòng)”怎么辦?

    ;關(guān)閉應(yīng)用程序?!保缦聢D所示: 出現(xiàn)該問(wèn)題的原因: 系統(tǒng)缺少對(duì)應(yīng)的運(yùn)行時(shí)庫(kù),DFM安裝包提供的運(yùn)行庫(kù)版本又和系統(tǒng)不兼容 對(duì)應(yīng)解決方案: 安裝微軟提供的運(yùn)行時(shí)
    發(fā)表于 06-12 18:32

    如何在 Raspberry Pi AI Camera 上構(gòu)建為開(kāi)發(fā)人員提供實(shí)時(shí)的智能應(yīng)用程序!

    。最近推出的RaspberryPiAICamera是款功能強(qiáng)大的硬件,可讓您在RaspberryPi上構(gòu)建功能強(qiáng)大的AI應(yīng)用程序。通過(guò)將人工智能推理卸載到IMX
    的頭像 發(fā)表于 03-25 09:37 ?809次閱讀
    如何在 Raspberry Pi AI Camera 上構(gòu)建為開(kāi)發(fā)人員<b class='flag-5'>提供</b>實(shí)時(shí)的智能<b class='flag-5'>應(yīng)用程序</b>!

    MCP:連接AI與應(yīng)用程序的開(kāi)放標(biāo)準(zhǔn)!

    作者:算力魔方創(chuàng)始人/英特爾創(chuàng)新大使劉力 擴(kuò)展AI大模型的方式有兩種,第種是通過(guò)訓(xùn)練增強(qiáng)AI大模型自身的能力;第二種是讓AI大模型與其它現(xiàn)有的應(yīng)用程序(例如:數(shù)據(jù)庫(kù)、瀏覽器、Gmail等)相互協(xié)作
    的頭像 發(fā)表于 03-21 18:21 ?2187次閱讀
    MCP:連接AI與<b class='flag-5'>應(yīng)用程序</b>的開(kāi)放標(biāo)準(zhǔn)!

    何為micropython添加自己的C代碼庫(kù)?

    部分代碼需要更高效的效率 如何為micropython添加自己的C代碼庫(kù)? 是否有教程? 如果可以的話是否可以提供個(gè)實(shí)現(xiàn)實(shí)例?
    發(fā)表于 03-11 07:03

    stm32語(yǔ)音通話

    目前再做一個(gè)stm32語(yǔ)音通話,通過(guò)麥克風(fēng)采集adc信號(hào),在通過(guò)4G模塊傳輸?shù)皆?,然后?b class='flag-5'>一個(gè)4G模塊接受云的數(shù)據(jù)使用DAC輸出,目前就是說(shuō)話會(huì)斷斷續(xù)續(xù)的,可能是網(wǎng)絡(luò)傳輸問(wèn)題,請(qǐng)問(wèn)各位老哥有沒(méi)有什么解決的辦法?只需要做到半雙工即可
    發(fā)表于 03-10 10:52

    AWTK-WEB 快速入門(6) - JS WebSocket 應(yīng)用程序

    WebSocket可以實(shí)現(xiàn)雙向通信,適合實(shí)時(shí)通信場(chǎng)景。本文介紹下使用Javacript語(yǔ)言開(kāi)發(fā)AWTK-WEB應(yīng)用程序,并用WebSocket與服務(wù)器通訊。用AWTKDesigner新建個(gè)
    的頭像 發(fā)表于 02-26 11:42 ?829次閱讀
    AWTK-WEB 快速入門(6) - JS WebSocket <b class='flag-5'>應(yīng)用程序</b>