在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

什么是 RTC?

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

背景

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

設計思路

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

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

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

圖片

image.png

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

方案設計

前言:

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

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

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

1、Player 的封裝

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

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

    fun stop()

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

    ......
}

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

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

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

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

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

圖片

image.png

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

    關(guān)注

    2

    文章

    616

    瀏覽量

    68495
  • 騰訊云
    +關(guān)注

    關(guān)注

    0

    文章

    221

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

    2010年迪拜五大行業(yè)展|迪拜建材展|緊固件|腳手架|建筑五金|衛(wèi)浴|陶瓷|大理石

    ;建筑安全設備;混凝土-預制、建筑系統(tǒng);建筑立面、盤座面及包覆;加熱裝置;模板/百葉窗;工具-空氣、手動及電動;砌體-磚、預制、水泥、灰漿;螺帽、錨桿、螺絲、鉸鏈等;建筑拆除;木材-框架及結(jié)構(gòu);腳手架
    發(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)理控制要點

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

    腳手架的避雷方法

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

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

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

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

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

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

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

    關(guān)于針對腳手架掛牌的歸納分析

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

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

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

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

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

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

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

    關(guān)于腳手架掛牌的有關(guān)定義表述

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

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

    RTC即 Real-Time Communication 的簡稱是一種給行業(yè)提供高并發(fā)、低延時、高清流暢、安全可靠的全場景、全互動、全實時的音視頻服務的終端服務。上面是比較官方的解釋,通俗的來講就是
    的頭像 發(fā)表于 05-26 16:48 ?808次閱讀
    <b class='flag-5'>RTC</b><b class='flag-5'>腳手架</b>的設計與<b class='flag-5'>實現(xiàn)</b>(下)
    主站蜘蛛池模板: 狠狠色婷婷丁香综合久久韩国 | 熟妇毛片 | 欧美猛交xxx呻吟 | 亚洲最大成人综合网 | 六月丁香激情综合成人 | 天堂在线看 | 在线视频一二三区 | 又黄又爽又猛午夜性色播在线播放 | 华人黄网站大全 | 亚洲一一在线 | 亚洲第一区二区快射影院 | 国模于子涵啪啪大胆 | 色综合久久久久久久久久久 | 日本高清一区二区三区不卡免费 | 色噜噜狠狠色综合久 | 乱码一区二区三区完整视频 | 中文字幕有码在线视频 | 午夜在线观看免费视频 | 性色aⅴ闺蜜一区二区三区 性色成人网 | 五月婷婷俺也去开心 | 久久午夜神器 | 午夜黄大色黄大片美女图片 | 久久国产美女免费观看精品 | 99久久精品国产自免费 | 四月婷婷七月婷婷综合 | 黄色拍拍拍| 亚洲国产色婷婷精品综合在线观看 | 成 人 黄 色视频免费播放 | 毛片毛片毛片毛片毛片毛片 | 午夜禁片| 欧美一区二区视频三区 | 六月丁香色婷婷 | 丁香激情综合 | 欧美人成绝费网站色www吃脚 | 色婷婷电影 | 夜夜操天天爽 | 午夜视频在线观看完整高清在线 | 亚洲色图狠狠干 | 在线片视频网站 | 九色综合九色综合色鬼 | 日韩a视频 |