Android視頻通話應用設計

背景

以下內容基于Android N code。

本文會從應用框架、進程交互、流程幾個方面,講解Android手機中視頻通話的應用層設計。

應用框架設計

Android電話模塊是一個典型的分層結構設計,視頻電話在語音通話結構的基礎上增加了一些類,但仍遵循原本的分層結構,如下:

分層結構

可以看到,相較于語音通話,視頻通話主要增加了以下內容:

在Application層的Telecom應用增加了VideoProviderProxy類,InCallUI增加了一個控制顯示視頻電話界面的MVP結構。

Framework層的telecom模塊增加了VideoCall及VideoProvider,分別為視頻電話call的信息存儲者和控制者。同時Framework層的telephony模塊增加了視頻電話相應的Phone、Call、Connection和CallTracker。另外增加了net模塊,該模塊負責和telephony進行撥號、來電、通話狀態變更等通話相關操作的交互,和telecom進行camera、surface等media相關方面的交互。

原本Framework的telephony和RIL層進行交互,改成了Framework的telephony和net進行交互,net模塊再和vendor里面的ims模塊交互,ims再負責和modem、media進行交互。這一部分的代碼雖然都按照google提供的接口實現,但各個芯片廠家的具體實現方式都不一樣。

由于要顯示視頻界面,增加了media層負責設置視頻通話的Camera、Surface等操作和信息反饋。視頻通話和modem、media層的交互過程都封裝在vendor/ims層。

應用間進程交互

進程交互方式

相較于語音通話,主要增加了phone進程和ims進程的交互,之前phone進程和RIL、modem的交互,也改成了ims和modem的交互。

如圖:

進程交互

Binder交互過程

其交互過程具體如下:

binder 交互

及InCallUI<->phone<->telecom<->ims,如果用戶在界面操作了掛斷電話或切換相機的操作要通話telecom、phone進程的兩層中轉到ims進程,ims再具體下發到modem或者media,反之有消息要傳到通話界面也是從ims通話phone和telecom兩進程的中轉到InCallUI。

具體交互細節如下:

進程交互結節

Phone進程通過ServiceManager.getService(“ims”)拿到溝通ims進程的橋梁。

值得注意的是phone進程和telecom進程分別創建了一個VideoProvider,phone進程的VideoProvider負責phone進程和telecom進程的溝通,telecom進程的VideoProvider負責telecom進程和incallui進程的溝通。

通話流程

因為是分層結構,和語音通話一樣來電、掛斷是從上到下,而來電和電話狀態的變化則是從下到上。

撥號流程

撥號是從上往下,即從APP到FW到ims再到Modem和media。

如下圖:

撥號流程

撥號盤通過TelecomManager的接口撥號,并帶有VideoState為RX或TX或RX&TX的intent參數,telecom一邊向phone進程請求撥號,一邊通知incallui顯示撥號界面。和語音通話不通的是語音通話是通過GsmCdmaPhone向RIL再向modem發送撥號請求,而視頻電話是通話ImsPhone向ims再向modem發送撥號請求。另外視頻通話增了向media設置camera、本機預覽surface和對端畫面surface的過程。

電話狀態更新流程

電話狀態更新和語音通話一樣,從結構上看是從下往上,通過一層層的監聽和通知通過觀察者模式從Modem通知到RIL到FW到APP。

如下圖:

ImsPhoneCallTracker在撥號或者來電創建新的ImsCall時同時會通話ImsCall向ims的IImsCallSession的實現者注冊listener,當有狀態變更時modem傳到ims,ims再通過ImsPhoneCallTracker向其注冊的listener通話到ImsPhoneCallTracker,之后狀態的傳替和語音通話一樣。

來電流程

和語音通話不同的是,來電信息由modem通過socket傳到RIL再通過binder傳到phone,變成了modem通過socket傳到ims,ims再發廣播通知位于phone進程的ImsPhoneCallTracker。

開機后phone進程起來會根據手機的待機模式構建GsmCdmaPhone,每個phone都會監聽ims

service的狀態變更,一旦ims可用該GsmCdmaPhone就會創建一個屬于自己的ImsPhone,而這個ImsPhone同樣會創建為自己管理通話的ImsPhoneCallTracker,用其來撥號和接收來電廣播。


原創內容歡迎轉載,但請注明出處,謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容

  • 目錄 Android通話應用設計 1 一、 背景 1 二、 應用框架設計 1 三、 常駐進程開機喚醒 2 1. P...
    朱蘭婷閱讀 7,615評論 4 25
  • 1. 應用進程 從點擊撥號按鈕流程說起packages/apps/Dialer/src/com/android/d...
    小的橘子閱讀 4,205評論 3 1
  • 撥號流程 概述:撥號的過程,如果按照進程來分,可以分成3個模塊。 com.android.dialer進程,即電話...
    SevChen閱讀 2,725評論 4 2
  • 一、telecom進程和bluetooth進程的交互方方式 1. telecom進程主動控制藍牙的操作是通過跨進程...
    朱蘭婷閱讀 8,366評論 1 12
  • 這篇文章介紹一下機器學習算法的分類和算法的特點,我們一般把機器學習算法分為監督學習、非監督學習、半監督學習、強化學...
    呂不韋閱讀 847評論 0 3