Android IMS 語音通話 vs 視頻通話 vs 視頻彩鈴

背景

以下內(nèi)容基于Android P code。

主要差異

視頻通話比語音通話主要是多了判斷是否為視頻通話,及視頻的顯示和傳輸。如下:

video call 視頻界面顯示控制

界面通過IVideoProvider控制camera的顯示并設(shè)置TextureView等,Ims service通過IVideoCallback來通知一些media的更新。如下

視頻通話進程交互

判斷是否為視頻通話

視頻通話同ims語音通話邏輯幾乎相同,不一樣的地方在于他們的video state不同,因為應用通過video state來判斷是否為視頻通話。

設(shè)置video state及通過video state更新界面的流程如下:

video state

1. 撥號時,撥號盤調(diào)用TelecomManager#placeCall()的參數(shù)中帶有video state,Telecom將這個video state傳給Telephony,并放入Phone的參數(shù)中,CallTracker在撥號時會把這個video state轉(zhuǎn)換成ImsCallProfile中的call type,Ims service 撥號時從profile中拿出這個call type再判斷是否撥打視頻電話。

2. 來電時,IImsCallSession中有包含call type的ImsCallProfile,并從中拿到video state更新ImsPhoneConnection。之后通知Telephony應用來電,Telephony通話Telecom來電,在Telecom和Telephony建立連接后,從ImsPhoneConnection中拿出video state放入telecom/Connection中,并返回該Connection給Telecom/Call,Telecom/Call更新VideoState。

3. Telecom在和InCallUI建立連接后,會把Telecom/Call的信息更新到telecom/Call中,telecom/Call判斷為視頻電話后會建立VideoCall,并通知InCallUI/Call更新,以此觸發(fā)界面更新。

視頻顯示及傳輸

視頻顯示其實就是在通話界面加兩塊TextureView,一塊用來顯示本機camera拍下的視頻畫面即preview TextureView,一塊用來顯示對端camera拍下來并傳輸過來的視頻畫面即remote TextureView。其具體顯示流程如下:

視頻顯示及傳輸流程


視頻與語音通話互切

語音通話切視頻通話

如圖:

發(fā)起方
被動方

視頻彩鈴

視頻彩鈴和視頻通話的不同點在于:

1. 視頻彩鈴僅在alerting狀態(tài)顯示,而視頻通話各個狀態(tài)都可以。

2. 視頻彩鈴顯示網(wǎng)絡(luò)端在本端投放的視頻,而視頻通話顯示本端和對端相機拍攝的畫面。

因此,判斷視頻彩鈴的依據(jù)為:

1. call state為alerting。

2. video state僅有RX,沒有TX。


原創(chuàng)內(nèi)容歡迎轉(zhuǎn)載,但請注明出處,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容