欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

LiveVideoStack ? 來源:LiveVideoStack ? 作者:Ishan Khot ? 2021-01-13 14:11 ? 次閱讀

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

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

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

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

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

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

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

更快更小

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

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

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

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

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

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

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

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

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

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

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

下一步的計劃

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

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

這項工作得益于與客戶平臺團隊合作。我們感謝所有為Rsys做出貢獻的人,特別是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在實施方面提供了幫助,并繼續(xù)提供指導和支持。

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

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

責任編輯:haq

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

    關(guān)注

    14

    文章

    7600

    瀏覽量

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

    關(guān)注

    0

    文章

    49

    瀏覽量

    11825

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

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

收藏 人收藏

    評論

    相關(guān)推薦

    從Delphi、C++ Builder和Lazarus連接到MySQL數(shù)據(jù)

    ? 從 Delphi、C++ Builder 和 Lazarus 連接到 MySQL 數(shù)據(jù) MySQL 數(shù)據(jù)訪問組件(MyDAC)是組件,
    的頭像 發(fā)表于 01-20 13:47 ?148次閱讀
    從Delphi、C++ Builder和Lazarus連接到MySQL數(shù)據(jù)<b class='flag-5'>庫</b>

    從Delphi、C++ Builder和Lazarus連接到Oracle數(shù)據(jù)

    幫助程序員開發(fā)更快、更原生的 Oracle 數(shù)據(jù)應(yīng)用程序。 ODAC 是種高性能且功能豐富的 Oracle 連接解決方案,是 Borla
    的頭像 發(fā)表于 01-15 10:01 ?167次閱讀

    TAS2521應(yīng)用程序參考指南

    電子發(fā)燒友網(wǎng)站提供《TAS2521應(yīng)用程序參考指南.pdf》資料免費下載
    發(fā)表于 12-10 13:49 ?0次下載
    TAS2521<b class='flag-5'>應(yīng)用程序</b>參考指南

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

    導讀AWTK可以使用相同的技術(shù)棧開發(fā)各種平臺的應(yīng)用程序。有時我們需要使用Web界面與設(shè)備進行交互,本文介紹下如何使用JS語言開發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建
    的頭像 發(fā)表于 12-05 01:04 ?160次閱讀
    AWTK-WEB 快速入門(2) - JS <b class='flag-5'>應(yīng)用程序</b>

    AWTK-WEB 快速入門(1) - C 語言應(yīng)用程序

    導讀AWTK可以使用相同的技術(shù)棧開發(fā)各種平臺的應(yīng)用程序。有時我們需要使用Web界面與設(shè)備進行交互,本文介紹下如何使用C語言開發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建
    的頭像 發(fā)表于 11-27 11:46 ?304次閱讀
    AWTK-WEB 快速入門(1) - C 語言<b class='flag-5'>應(yīng)用程序</b>

    使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開發(fā)的,而將生成式AI(GenAI)功能集成到這些應(yīng)用程序中可能會很具有挑戰(zhàn)性,尤其是因為使用像 Hugging Face 這樣的 Python 的復(fù)雜性。C++
    的頭像 發(fā)表于 10-12 09:36 ?486次閱讀
    使用OpenVINO GenAI API在C++中構(gòu)建AI<b class='flag-5'>應(yīng)用程序</b>

    Adobe將推出全新免費應(yīng)用程序

    Adobe近日宣布了項令人振奮的新舉措——從明年起,將推出款免費的基于網(wǎng)絡(luò)的應(yīng)用程序。這款應(yīng)用的主要功能是為圖像、視頻和音頻創(chuàng)作者提供便
    的頭像 發(fā)表于 10-10 16:54 ?462次閱讀

    可以在單個esp8266上安裝兩NON OS SDK應(yīng)用程序嗎?

    簡單的問題。我可以在單個 esp8266 上安裝兩 NON OS SDK 應(yīng)用程序嗎?我的自定義引導加載程序(包括 os libs)和
    發(fā)表于 07-19 07:28

    何為ESP8266構(gòu)建自定義盾牌?

    我正在尋找某種如何為ESP8266構(gòu)建自定義盾牌的指南。 到目前為止,我已經(jīng)使用 NODEMCU 構(gòu)建了功能原型,但我現(xiàn)在想簡化事情并使其更小。 1. 是否有些書面的、開放的硬件指南 (很好
    發(fā)表于 07-08 07:17

    何為SPI OLED顯示屏添加另一個設(shè)備?

    SPI 數(shù)據(jù)接口將圖像傳送到 OLED 顯示屏。使用 UVC 應(yīng)用說明中的說明操作 UVC 部件。如何為 SPI OLED 顯示屏添加另一個設(shè)備? 謝謝。
    發(fā)表于 05-31 06:18

    使用FX3實現(xiàn)UVC MJPEG應(yīng)用程序,MJPEG幀損壞的原因?

    我正在使用 FX3 實現(xiàn) UVC MJPEG 應(yīng)用程序,該程序從 FPGA 發(fā)送 MJPEG 視頻幀數(shù)據(jù),我們看到了以下幀損壞現(xiàn)象。 我
    發(fā)表于 05-28 06:39

    請問FW OTA二進制文件是否包含應(yīng)用程序和BT棧/程序庫?

    你好,先生: 因為英飛凌仍在不斷更新 BT 棧和。 那么 如果客戶在第一個版本中有 OTA 功能。 FW OTA 二進制文件是否包含應(yīng)用程序和 BT 棧/程序庫?
    發(fā)表于 05-20 07:28

    使用Redis和Spring?Ai構(gòu)建rag應(yīng)用程序

    整合如何通過簡化的開發(fā)流程,讓開發(fā)者能夠更專注于創(chuàng)新而非底層實現(xiàn)。、SpringAI簡介由大型語言模型(LLM)驅(qū)動的應(yīng)用程序中,向量數(shù)據(jù)常作為人工智能應(yīng)用程
    的頭像 發(fā)表于 04-29 08:04 ?1150次閱讀
    使用Redis和Spring?Ai構(gòu)建rag<b class='flag-5'>應(yīng)用程序</b>

    使用Docker部署Go Web應(yīng)用程序步驟

    大多數(shù)情況下Go應(yīng)用程序被編譯成單個二進制文件,web應(yīng)用程序則會包括模版和配置文件。而當項目中有很多文件的時候,由于很多文件沒有同步就會導致錯誤的發(fā)生并且產(chǎn)生很多的問題。
    發(fā)表于 04-20 09:33 ?555次閱讀
    使用Docker部署Go Web<b class='flag-5'>應(yīng)用程序</b>步驟

    LTE MQTT通信應(yīng)用程序說明

    電子發(fā)燒友網(wǎng)站提供《LTE MQTT通信應(yīng)用程序說明.pdf》資料免費下載
    發(fā)表于 02-21 10:47 ?0次下載
    LTE MQTT通信<b class='flag-5'>應(yīng)用程序</b>說明