- 最近開發(fā)了一個互動直播的項(xiàng)目。就其中的邏輯部分進(jìn)行一個梳理。項(xiàng)目地址和邏輯圖如下。

邏輯圖
非連麥
1.流程
- 進(jìn)入聊天室
NIMChatroom - 用拉流播放器加載
拉流Url進(jìn)行播放(這種方式的播放延遲較高)。 - 退出聊天室
NIMChatroom
2.行為
- 聊天/發(fā)送禮物等行為均通過
[NIMSDK sharedSDK].chatroomManager在在當(dāng)前NIMChatroom發(fā)送與監(jiān)聽系統(tǒng)/自定義消息。 - 直播的狀態(tài)變更(如直播結(jié)束)。直播間的狀態(tài)由主播進(jìn)行維護(hù)。非主播則通過
[NIMSDK sharedSDK].chatroomManager對直播間狀態(tài)進(jìn)行監(jiān)聽與更新。
連麥
- 流程
- 主播一開始直播需創(chuàng)建并加入
NIMNetCallMeeting - 連麥者在申請連麥并被允許后進(jìn)入
NIMNetCallMeeting - 在連麥情況下不需要
拉流Url進(jìn)行播放。僅需展示自己的本地攝像頭畫面與[NIMAVChatSDK sharedSDK].netCallManager的- (void)onRemoteYUVReady:(NSData *)yuvData width:(NSUInteger)width height:(NSUInteger)height from:(NSString *)user方法獲得的數(shù)據(jù)
- 主播一開始直播需創(chuàng)建并加入
- 行為
- 用戶的進(jìn)入與退出通過監(jiān)聽
[NIMAVChatSDK sharedSDK].netCallManager的onUserJoined和onUserLeft方法進(jìn)行
- 用戶的進(jìn)入與退出通過監(jiān)聽
總結(jié)
- 這里只講了大致的流程許多細(xì)節(jié)并未講清。整個邏輯梳理的難點(diǎn)在于對于
NIMNetCallMeeting和NIMChatroom兩者的理解。 - 其實(shí)只需記住直播間里面的所有角色都在
NIMChatroom中,而主播與連麥者同時在NIMNetCallMeeting和NIMChatroom中。 - 想確定一個行為是通過那個渠道進(jìn)行的。
- 判斷受眾,若這個行為的參與者不僅僅包涵主播與連麥者。(如監(jiān)聽直播間的狀態(tài)普通觀眾也要監(jiān)聽)則該行為走的是
NIMChatroom
- 判斷受眾,若這個行為的參與者不僅僅包涵主播與連麥者。(如監(jiān)聽直播間的狀態(tài)普通觀眾也要監(jiān)聽)則該行為走的是