<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

RTC腳手架的設計與實現(上)

jf_78858299 ? 來源:網易云音樂技術團隊 ? 作者:AirLand ? 2023-05-26 16:48 ? 次閱讀

什么是 RTC?

RTC 即 Real-Time Communication 的簡稱是一種給行業提供高并發、低延時、高清流暢、安全可靠的全場景、全互動、全實時的音視頻服務的終端服務。上面是比較官方的解釋,通俗的來講就是一種能夠實現一對一、多對多音視頻通話等眾多功能的服務。目前提供該項服務的服務商有很多例如:聲網、云信、火山引擎、騰訊云等。

背景

目前云音樂旗下 APP 眾多,其中涉及到 RTC 業務的不在少數,例如:常見的音視頻連麥、PK、派對房,1v1 聊天等。由于業務線不同,功能不同,開發者也不同,大家各寫一套,不斷的重復造輪子,因此為了避免重復的開發工作提升開發效率,需要有一套通用的RTC框架。

設計思路

在講具體的方案設計之前,先講一下我的設計思路:

  1. 功能內聚 :需要將功能都封裝在一個容器里,對外通過接口提供方法調用
  2. 業務隔離 :不同的業務需要有不同的功能容器
  3. 統一調用 :所有功能容器需要有統一的調用入口
  4. 狀態維護 :需要對狀態進行精準維護
  5. 切換無感 :進行功能容器切換時候,無感知
  6. 核心可控 :對核心鏈路可監控,故障預警

基于以上 6 點,大致的架構設計如圖所示,這里先不用深究圖中的模塊表示什么,后面會講到,這里只是先了解一下大致的架構:

圖片

image.png

接下來我就來講講具體的實現過程。

方案設計

前言:

RTC 的業務場景雖然很多,但本質上卻相差無幾,都是用戶加入到一個共同的房間,然后在房間內進行實時的音視頻通訊。具體到實際項目中大致又可分為兩種:全場景 RTC 和部分場景 RTC。

  • 全場景 RTC :整個業務都是通過 RTC 技術實現例如:1v1 音視頻通話、派對房等。
  • 部分場景 RTC :即整個業務鏈路中只有一部分使用了 RTC 技術,往往這種業務會涉及到引擎的切換。

不管是哪一種場景,承載核心功能的引擎都是必不可少的,因此我們首先就從引擎開始著手,另外為了方便描述,后續便將引擎統一稱作 Player。

1、Player 的封裝

在與 RTC 相關聯的業務中會涉及到不同類型的 Player,例如:主播開播(推流 Player),觀眾觀看直播(拉流 Player)以及 RTC Player等。它們的功能雖然各不相同,但用法卻有相似之處,例如都有啟動 start,終止 stop 等。因此我們可以將不同的 Player 抽象出一個共同的接口 IPlayer 相關代碼如下:

interface IPlayer<DS : IDataSource, CB : ICallback> {
    fun start(ds: DS)

    fun stop()

    fun  setParam(key: String, value: T?)

    ......
}

其中 IDataSourceICallback 分別是啟動 Player 所需要的數據源和回調,后面的文章中也會多次提到,特別是 IDataSource 它是 Player 啟動的源頭就好比打電話時的電話號碼。

在這里遇到的一個問題點就是由于 Player 內聚了所有的功能除了有一些通用方法外,也有著屬于自己特有的方法,例如:靜音,音量調節等。這些方法眾多而且各不相同無法在 IPlayer 接口中全部列出,即使能全部列出,但隨著業務的迭代 Player 中的方法肯定會不斷變化,不可能每更改一個方法就改一下接口,這顯然不符合程序設計原則。那么如何將不同的方法抽象化,讓上層通過調用同一個方法來執行不同的操作呢?這里通過:

fun  setParam(key: String, value: T?)

來實現,其中 key 表示方法的唯一標記,value 表示方法的入參。這樣上層只需要通過調用 setParam 傳入相應的方法標記和方法入參即可調用到對應的方法了。那么如何做到呢?答案也很簡單通過一個中間層建立起一一映射關系。但是 Player 的類型眾多,要是每寫一個 Player 都要寫一個映射邏輯就太麻煩了。所以這里通過 APT 編譯時注解再結合 javapoet 自動生成這個中間層并給它命名為 xxxPlayerWrapper 其內部生成一個 convert 方法,在這個方法內部完成一一映射邏輯。接下來我們看看具體實現過程:

  1. 首先定義了兩個注解分別作用于具體的 Player 和對應的方法例如:
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE})
public @interface PlayerClass {
}

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.METHOD})
public @interface PlayerMethod {
    String name();
}

@PlayerClass
open class xxxPlayer : IPlayer<xxxDataSource, xxxCallback>() {

    @PlayerMethod(name = "key1")
    fun method1(v: String) {
        ....具體實現
    }
}
  1. 一一映射關系建立:

xxxPlayer 和 xxxPlayerWrapper 之間是一個相互依賴關系,互為彼此的成員變量。當調用 xxxPlayer 的接口方法 setParam(key: String, value: T?) 時,會直接調用到 xxxPlayerWrapper 的 convert 方法,convert 方法會根據 key 來找到其所對應的方法名,最后直接調用到 Player 的具體方法。

圖片

image.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RTC
    RTC
    +關注

    關注

    2

    文章

    491

    瀏覽量

    65524
  • 騰訊云
    +關注

    關注

    0

    文章

    196

    瀏覽量

    16640
收藏 人收藏

    評論

    相關推薦

    2010年沙特建材展/腳手架/照明器材/復合材料/石材/裝飾材料/鋁型材/防火材料

    2010第22屆沙特國際建筑及石材貿易博覽會 2010年沙特建材展/腳手架/照明器材/復合材料/石材/裝飾材料/鋁型材/防火材料英文名稱:The 22ST International
    發表于 01-25 13:14

    2010年迪拜五大行業展|迪拜建材展|緊固件|腳手架|建筑五金|衛?。沾桑罄硎?/a>

    ;建筑安全設備;混凝土-預制、建筑系統;建筑立面、盤座面及包覆;加熱裝置;模板/百葉窗;工具-空氣、手動及電動;砌體-磚、預制、水泥、灰漿;螺帽、錨桿、螺絲、鉸鏈等;建筑拆除;木材-框架及結構;腳手架
    發表于 09-06 15:51

    2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|

    |吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗
    發表于 09-06 15:55

    2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|

    ;nbsp;2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|2011年沙特建材展|吉達建材展|五大行業展|緊固件|腳手架|玻璃|門窗|2011年沙特建材展|吉達建材展|五大行業展
    發表于 09-06 16:05

    2021年建筑架子工(建筑特殊工種)考試題及建筑架子工(建筑特殊工種)考試試卷相關資料分享

    試卷祝您順利通過建筑架子工(建筑特殊工種)考試。1、【判斷題】木腳手架的單排架小橫桿的大頭應朝里設置。(√)2、【判斷題】竹、木腳手架上下相鄰兩步的大橫桿大頭朝向應當相反。(√)3、【判斷題】碗扣式鋼管
    發表于 07-09 07:39

    2021年安全員-C證(山東?。┛荚囶}及安全員-C證(山東?。┠M試題相關資料下載

    通過安全員-C證(山東?。┛荚?。1、【判斷題】扣件式鋼管腳手架應按照要求設置縱向剪刀撐和橫向斜撐,以使腳手架具有足夠的縱向和橫向整體剛度。(√)2、【判斷題】施工單位未能開展對作業人員的安全教育培訓、安全技術交底是無錫某文教中心工程腳手
    發表于 07-12 08:11

    懸挑式腳手架監理控制要點

    懸挑式腳手架一般有兩種:一種是每層一挑,將立桿底部頂在樓板、梁或墻體等建筑部位,向外傾斜固定后,在其上部搭設橫桿、鋪腳手板形成施工層,施工一個層高,待轉入上層
    發表于 12-15 14:29 ?15次下載

    腳手架的避雷方法

    搭設在曠野山坡上雷擊區的鋼腳手架在雷雨季節應設避雷裝置,避雷裝置包括接閃器、接地極、接地線。
    發表于 01-19 15:26 ?18次下載

    物聯網腳手架系統能帶來什么益處

    橫向移動不是腳手架上工人唯一需要擔心的事情。超重載荷對立柱施加的壓力過大可能會導致結構崩塌。平板下面的物聯網傳感器可以在壓力成為問題之前測量到它。
    發表于 03-20 10:16 ?514次閱讀

    科學家研發可溶解的植入骨折的腳手架材料——特殊繃帶

    植入骨折的腳手架材料,能夠促使身體自身的骨細胞長入其中并治愈骨折。而現在,科學家們開發了一種特殊的繃帶,也可以做到這一點。
    的頭像 發表于 09-25 11:30 ?1579次閱讀

    腳手架掛牌方案需要符合哪些層面的規定

    腳手架掛牌的過程中,當然就必須應用到方案,即然是方案,又和生產安全有關,也就必須讓它符合各個方面的規定,那麼必須讓這類方案符合哪些層面的規定呢? 最先就必須讓它符合機器設備構造上的規定,由于生產線
    發表于 02-11 10:52 ?1260次閱讀

    關于針對腳手架掛牌的歸納分析

    描述:用五金鎖具鎖定防護設備來防止很多人 隨便操作過程安全防護的能量源或者機器設備,(腳手架掛牌)直到維修結束,五金鎖具消除。 :運用衣服標簽來警告別人早就被安全防護的能量源或者機器設備不能隨便
    發表于 03-01 11:50 ?620次閱讀

    為何需要腳手架掛牌,它的作用是怎樣的

    腳手架掛牌是便于避免員工在進行維修、維修保養時,遇到來自設備的發生意外啟動、出現異常啟動、動力裝置釋放出所導致的風險性,以保證 員工的人身安全。進行腳手架掛牌操作程序的根本所在,斷掉設備與動力裝置
    發表于 03-05 11:39 ?1713次閱讀

    腳手架掛牌是什么,有什么作用

    上邊的案例,看了后耐人尋味。有誤實際操作腳手架掛牌,導致這么多可憐生命的身亡和資產的損害。由此可見恰當應用安全鎖具,是一件多么的關鍵的事兒。溫州市博士安全用品 解釋一下什么叫腳手架掛牌?
    發表于 03-22 10:27 ?1824次閱讀

    RTC腳手架的設計與實現(下)

    RTC即 Real-Time Communication 的簡稱是一種給行業提供高并發、低延時、高清流暢、安全可靠的全場景、全互動、全實時的音視頻服務的終端服務。上面是比較官方的解釋,通俗的來講就是
    的頭像 發表于 05-26 16:48 ?487次閱讀
    <b class='flag-5'>RTC</b><b class='flag-5'>腳手架</b>的設計與<b class='flag-5'>實現</b>(下)
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>