序言
推拉流這里暫不涉及了,這里主要說一下直播的一些邏輯流程的難點。
直播架構(gòu)-層級劃分
為了更方便的實現(xiàn)和管理代碼,個人把直播劃分為3個層級
1、直播層:用于實現(xiàn)推流和拉流以及回調(diào)的監(jiān)聽;
2、交互層:用于彈幕發(fā)送和功能按鈕的點擊;
3、禮物展示層:用于禮物動畫的展示,且在最上層。
直播層
開啟直播
1、一進(jìn)入直播模塊就獲取用戶直播信息,在點擊開啟直播時進(jìn)行判斷:如果還不是認(rèn)證主播,就進(jìn)行實名認(rèn)證;如果是認(rèn)證主播,再獲取主播相關(guān)信息。
2、調(diào)開啟直播接口,通知服務(wù)器開啟直播,并調(diào)用開啟和進(jìn)入直播間接口,通知服務(wù)器進(jìn)入直播間,查看是否用相機(jī)、麥克風(fēng)權(quán)限,然后開始推流。
3、推流過程中要監(jiān)聽幾種推流狀態(tài):
? ?1)打開攝像頭失??;
? ?2)打開麥克風(fēng)失敗;
? ?3)網(wǎng)絡(luò)波動狀態(tài);
? ?4)斷網(wǎng)狀態(tài)(重連服務(wù)器);
? ?5)斷網(wǎng)后多次重連服務(wù)器失敗狀態(tài)(主播退出直播界面至列表界面);
? ?6)推流成功狀態(tài)(加載動畫結(jié)束,客戶端設(shè)置用戶為開播狀態(tài))。
關(guān)閉直播
1、調(diào)關(guān)閉直播接口,通知服務(wù)器關(guān)閉直播,并調(diào)用關(guān)閉和退出直播間接口,通知服務(wù)器退出直播間。然后停止推流。
2、進(jìn)入結(jié)算界面。
觀看直播
1、觀眾通過后臺獲取拉流地址播放直播畫面;
2、監(jiān)聽播放事件回調(diào),做相應(yīng)UI操作。
交互層(即時通訊)
交互層負(fù)責(zé)所有的用戶交互,是整個直播模塊的難點,也是客戶端要實現(xiàn)的最復(fù)雜的部分,交互有很多(看產(chǎn)品 ̄_, ̄ ),比較典型或復(fù)雜的有:
1、聊天彈幕的發(fā)送,禮物的發(fā)送;
2、守護(hù)席的爭奪;
3、觀眾與主播連麥;
4、主播與主播的PK。
為什么要括弧個即時通訊呢,因為交互層這個層級就是和即時通訊緊密聯(lián)系在一起的,無時無刻都在即時通訊!先舉個守護(hù)席的例子吧。
注:使用即時通訊時的字段兩端要統(tǒng)一。
守護(hù)席
守護(hù)席的狀態(tài)要分兩個視角:搶占視角與觀看視角。
搶占視角:搶占細(xì)節(jié)就不詳述了,主要說流程。搶占觀眾在點擊搶占后發(fā)送請求給服務(wù)器,成功后改變自身UI,然后發(fā)送即時通訊(注明搶占字段的即使消息)給聊天室里的其他人。其他人通過即時通訊回調(diào)解析搶占消息刷新?lián)屨糢I。
觀看視角:其他觀眾收到通知,解析為有人獲得守護(hù)席通知,改變守護(hù)席UI。
彈幕聊天
字段需求:個人產(chǎn)品的需求是需要展示人物等級,用戶名根據(jù)等級改變顏色且可點擊。所以這里即時通訊就要傳遞用戶名、等級、發(fā)言內(nèi)容等字段。
發(fā)送者視角:發(fā)送者發(fā)送一條即時通訊消息,消息發(fā)送給聊天室里的所有用戶。消息發(fā)送成功后在自己聊天列表添加一條消息。
接收者視角:接收者在接收到消息后,解析為聊天消息,在聊天列表添加一條消息。
觀眾與主播連麥
需求是最多支持三個連麥。那么這里就要記錄主播連麥觀眾信息數(shù)組,這樣可以更方便的管理主播的連麥觀眾。因為連麥也有即時性的特性,所以也用即時通訊實現(xiàn)。
先理清身份,連麥有三個身份:主播方、連麥觀眾方與普通觀眾方。
連麥觀眾方:發(fā)起連麥,等待主播同意;同意并獲取主播拉流后跳轉(zhuǎn)推流界面進(jìn)行推流并小窗口展示播放主播畫面。(注:這里推流和拉流的監(jiān)聽依舊要做好)。這里發(fā)起連麥會有幾種拒絕狀態(tài):1.主播手動拒絕;2.請求超時;3.主播占線中;4.主播連麥人數(shù)已滿;5.主播在PK中;6.主播連麥功能關(guān)閉。
主播方:收到連麥請求,同意后發(fā)送帶有自己底鏈路拉流地址給連麥觀眾,并展示播放器,但沒有畫面;待收到連麥觀眾低鏈路拉流地址后播放,并做混流處理。同樣要做好播放監(jiān)聽。
普通觀眾方:普通觀眾基本不要做什么,播放的是混流地址。
主播與主播的PK
個人認(rèn)為主播與主播之間的PK相對于連麥要簡單些。
這里也是三個角色:發(fā)起PK主播方、接收PK主播方與雙方普通觀眾方。
發(fā)起PK主播方:發(fā)起PK,并發(fā)送自己低鏈路拉流地址;等待接收PK主播方同意,同意后,改變自己推流畫面UI,并播放接收PK主播拉流地址,并做混流處理。也有幾種拒絕狀態(tài):1.主播手動拒絕;2.請求超時;3.直播占線中;4.直播在PK中;5.主播在連麥中;6.主播PK功能關(guān)閉。
接收PK主播方:接收PK請求,同意后發(fā)送自己低鏈路拉流地址給發(fā)起PK主播,并改變自己推流UI和播放發(fā)起PK主播低鏈路拉流地址的小窗口,并要做好混流處理。
雙方普通觀眾方:普通觀眾基本不要做什么,播放的是混流地址。
禮物展會層
禮物展示層主要展示禮物特效。這一塊涉及到即時通訊、禮物編碼設(shè)計和支付功能(內(nèi)購)。在容我三思而后作。
拓展
重復(fù)登錄
被踢方:收到重復(fù)登錄回調(diào),要么殺死app,要么通知直播模塊底層控制器。獲取導(dǎo)航欄控制器數(shù)組最后一個控制器(當(dāng)前控制器),回退至根控制器。
登陸方:一進(jìn)入直播模塊就獲取主播信息,如果是正在直播狀態(tài),就彈出是否繼續(xù)直播提示框。是就直接跳轉(zhuǎn)直播推流畫面。
結(jié)語
· 直播還有很多知識點,這只是冰山中的一角。