一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

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

jf_78858299 ? 來源:網易云音樂技術團隊 ? 作者:AirLand ? 2023-05-26 16:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是 RTC?

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

背景

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

設計思路

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

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

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

圖片

image.png

接下來我就來講講具體的實現(xiàn)過程。

方案設計

前言:

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

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

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

1、Player 的封裝

在與 RTC 相關聯(lián)的業(yè)務中會涉及到不同類型的 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 所需要的數(shù)據(jù)源和回調,后面的文章中也會多次提到,特別是 IDataSource 它是 Player 啟動的源頭就好比打電話時的電話號碼。

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

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

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

  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) {
        ....具體實現(xiàn)
    }
}
  1. 一一映射關系建立:

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

圖片

image.png

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

    關注

    2

    文章

    622

    瀏覽量

    68889
  • 騰訊云
    +關注

    關注

    0

    文章

    221

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    利用愛星物聯(lián)服務腳手架實現(xiàn)定制服務

    和相關工具,可能理解起來還是云里霧里,還是沒法下手定制開發(fā)吧? 別急,理論指導實踐來了。 本文介紹基于API腳手架和微服務腳手架構建自定義的對應服務,以及自定義服務怎么與愛星物聯(lián)IoT平臺服務進行交互 (內容屬于下圖紅色線框部
    的頭像 發(fā)表于 06-07 09:38 ?2285次閱讀
    利用愛星物聯(lián)服務<b class='flag-5'>腳手架</b><b class='flag-5'>實現(xiàn)</b>定制服務

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

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

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

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

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

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

    懸挑式腳手架監(jiān)理控制要點

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

    腳手架的避雷方法

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

    物聯(lián)網腳手架系統(tǒng)能帶來什么益處

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

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

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

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

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

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

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

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

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

    腳手架掛牌的具體流程是怎樣的

    第一步:提前準備工作? 提前準備關閉能源。(腳手架掛牌)普遍的能源種類有(電磁能,機械動能,空氣能熱水器等......)和它的潛在性風險。放好防護維護裝置(安全鎖具),并提前準備關閉能源 第二步
    發(fā)表于 03-08 10:35 ?1688次閱讀

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

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

    關于腳手架掛牌的有關定義表述

    對一個斷開電源或是能源斷開設備鎖上,(腳手架掛牌)以防別人接入電源或能源(如開啟閘閥) 的一種安全防范措施,或稱鎖上。 標識tagout 在一個斷開電源或能源的斷開設備掛上相對的警告或警示牌(如
    發(fā)表于 03-26 16:08 ?999次閱讀

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

    RTC即 Real-Time Communication 的簡稱是一種給行業(yè)提供高并發(fā)、低延時、高清流暢、安全可靠的全場景、全互動、全實時的音視頻服務的終端服務。上面是比較官方的解釋,通俗的來講就是
    的頭像 發(fā)表于 05-26 16:48 ?831次閱讀
    <b class='flag-5'>RTC</b><b class='flag-5'>腳手架</b>的設計與<b class='flag-5'>實現(xiàn)</b>(下)