1.1. 概述?

1.1.1. Open-AVD SDK業務概念?

SDK中有三層業務對象,分別為AVD引擎、房間和功能模塊;三層業務對象是向上依賴的,AVD引擎為唯一對象,房間對象依賴于AVD引擎,各功能模塊依賴于某一房間。

1.1.1.1. AVD引擎(AVDEngine)?

AVD引擎是SDK中進程級、全局性的一個運行上下文環境,SDK的所有功能都必須在此環境中才能正確工作;如在這個環境中可以運行多個Room(房間)或者多個用戶加入同一或不同房間。應用層可以給引擎設置一些默認參數,影響所有當前引擎環境的入會者房間。 客戶應用層在使用SDK的第一步就是進行引擎初始化,初始化時需要杭州叁體網絡提供的與客戶相關的唯一appkey和對應的secretkey做授權驗證;同時對SDK中的線程、設備等進行準備。引擎初始化成功后,即可使用AVD引擎接口中提供的接口進行安排、查詢、刪除房間等管理工作;可以同時加入多個Room(房間)或者多個用戶加入多個房間中,做各種音視頻和數據的房間內溝通;可以對房間中的音視頻和數據做錄制和直播等各種操作。

1.1.1.2. 房間(room)?

房間是AVD SDK實時溝通功能的一個管理單元,房間中會有多個溝通參與者即用戶,房間有各種溝通功能,如文字聊天、語音視頻等,溝通是基于房間的。不同房間溝通是隔離的。 房間中重要屬性如下:
  • 房間Id:SDK生成,唯一標示一個房間的字符串。

  • 房間名:應用層創建房間時設置,以可讀方式定義的一個字符串。

  • 房間應用層Id:應用層創建房間時設置的標識一個房間的字符串。

  • 房間模式

    MCU模式:房間中的數據通過服務器做路由轉發,適合大規模房間,服務器將消耗帶寬,需要保證帶寬足夠。

    P2P模式:房間中的數據不經過房間服務器,直接在房間若干客戶端間做轉發,適合小規模(如5人以下)房間。

  • 房間最大用戶數:一個房間中可以同時參與的最大用戶數,用于限制用戶加入。

  • 房間最大話筒路數:一個房間中可以同時打開的話筒數量,用于限制音頻輸入數量。

  • 房間最大視頻路數:一個房間中可以同時打開的視頻數量,用于限制房間中視頻數量。

  • 房間最大屏幕窗口共享路數:一個房間中可以同時打開的屏幕窗口共享數量。

1.1.1.3. 用戶(user)?

每個加入到房間的客戶端作為一個房間用戶,用戶將會根據權限和設備情況執行房間中各種溝通功能。
  • 用戶Id:唯一標示一個房間用戶的Id,由應用層來設置,應用層可以與其業務系統用戶相綁定。
  • 用戶狀態:用戶的設備擁有和開啟情況。

1.1.1.4. 設備(device)?

房間中設備指能開啟各種溝通能力的邏輯對象,主要有音頻設備話筒和揚聲器,視頻設備攝像頭和屏幕窗口。
  • 設備Id:唯一標識設備的編號,SDK內部生成。
  • 設備狀態:當前設備的所處狀態,主要有無設備、設備就緒、設備發布音頻或視頻、設備暫停等。
音頻設備有話筒和揚聲器,可以通過IAudioDevice接口對當前房間內的設備做管理。 視頻設備有攝像頭和屏幕窗口,屏幕窗口主要用于屏幕共享時使用。 視頻設備有一些特性,如下:
  • 設備Level:應用層對設備設置的數據,可用于表示視頻權重等, 應用層開發可用
  • 設備描述:應用層對設備的描述,應用層開發可用
  • 設備屬性特性:視頻設備質量類型集:攝像頭通知時包含攝像頭支持的視頻質量集合
  • 設備發布特性:視頻發布質量類型集:設備發布時包含的發布視頻的質量集合

攝像頭 攝像頭對應一個物理上的真實攝像頭設備。 攝像頭類型:前置攝像頭,后置攝像頭,未知類型(無法判斷出來是前置還是后置)。 視頻采集能力 * 分辨率:視頻質量的 * 幀率

屏幕窗口操作系統中屏幕或者窗口區域對象。 屏幕:整個系統窗口。 應用程序窗口:某一個應用程序的窗口,如資源管理器的窗口。

1.1.1.5. 房間內功能模塊(module)?

1.用戶管理模塊(musermanager) 房間內用戶及用戶群體的操作、狀態通知。

2.聊天模塊(mchat) 公聊:整個房間內的一個所有用戶參與的文字溝通渠道,每個用戶可以根據權限接收和發送消息。 私聊:房間內兩個用戶間的私有文字溝通渠道。 聊天歷史記錄

3.音頻模塊(maudio) 音頻模塊通過對麥克風和揚聲器的控制,實現房間內各用戶的高清語音溝通。 移動端特殊功能:自動路由音頻設備,自動在聽筒、外放、外置耳機和藍牙耳機等各種設備中播放和采集高清語音。 桌面端特殊功能:可以列出多個音頻設備進行選擇使用,支持設備的熱插拔。

4.視頻模塊(mvideo) 預覽(preview):視頻預覽是一個本地視頻操作,將本地的攝像頭視頻在窗口上展現出來。 發布(publish):視頻發布是將本地攝像頭的視頻發布到房間中,讓所有房間中的用戶可以訂閱和顯示當前發布的攝像頭視頻。 訂閱(subscribe):用戶如果要查看房間中已發布視頻,需要在房間中訂閱此視頻,讓服務器將此視頻的視頻數據路由到用戶客戶端來。 視頻切換攝像頭: 顯示對象(render) 顯示模式:原圖顯示,適應窗口(比例不變),鋪滿窗口 顯示角度:自動旋轉

5.屏幕應用共享模塊(mscreen) 共屏屏幕窗口(switch)

1.1.2. Open-AVD SDK語言概念?

AVD SDK中涉及一些編程開發的語言概念,說明如下:

1.1.2.1. 接口(I)?

SDK內部實現了的,提供給應用層調用的的功能函數。C++ SDK以I字母開始來命名。
  • 同步調用接口:接口調用完成后馬上就能知曉調用結果的接口。
  • 異步調用接口 接口調用后,部分操作結果不能即時知曉,需要等待一段時間才由回調函數返回的接口。一般都是涉及長時間操作或者網絡通訊類操作。

1.1.2.2. 遠程指令(remotecmdxxx)?

以remotecmd開始的接口函數為遠程指令操作,這種操作一般是操作遠端的用戶和設備,是否操作成功與失敗部分依賴于遠端。

1.1.2.3. 回調接口(IListener)?

SDK內部調用,應用層實現的一組功能操作,主要用于異步調用返回、事件通知、通訊回調等?;卣{接口我們以IListener開做命名。按類型我們將這些接口分為以下幾種:

1.1.2.4. 回調異步返回(onxxxResult)?

異步調用接口調用后通過回調異步返回來通知應用層調用的結果。

1.1.2.5. 回調指示(onxxxIndication)?

回調指示是服務器或者遠端用戶發送過來的一個操作命令,收到指示的用戶需要執行特定操作。

1.1.2.6. 回調通知(onxxxNotify)?

當執行某一操作時候,設備、用戶或者房間等對象的狀態信息將會更新,所有用戶將會收到回調通知,通知一般都是多人的。