- 最近开发了一个互动直播的项目。就其中的逻辑部分进行一个梳理。项目地址和逻辑图如下。

逻辑图
非连麦
1.流程
- 进入聊天室
NIMChatroom - 用拉流播放器加载
拉流Url进行播放(这种方式的播放延迟较高)。 - 退出聊天室
NIMChatroom
2.行为
- 聊天/发送礼物等行为均通过
[NIMSDK sharedSDK].chatroomManager在在当前NIMChatroom发送与监听系统/自定义消息。 - 直播的状态变更(如直播结束)。直播间的状态由主播进行维护。非主播则通过
[NIMSDK sharedSDK].chatroomManager对直播间状态进行监听与更新。
连麦
- 流程
- 主播一开始直播需创建并加入
NIMNetCallMeeting - 连麦者在申请连麦并被允许后进入
NIMNetCallMeeting - 在连麦情况下不需要
拉流Url进行播放。仅需展示自己的本地摄像头画面与[NIMAVChatSDK sharedSDK].netCallManager的- (void)onRemoteYUVReady:(NSData *)yuvData width:(NSUInteger)width height:(NSUInteger)height from:(NSString *)user方法获得的数据
- 主播一开始直播需创建并加入
- 行为
- 用户的进入与退出通过监听
[NIMAVChatSDK sharedSDK].netCallManager的onUserJoined和onUserLeft方法进行
- 用户的进入与退出通过监听
总结
- 这里只讲了大致的流程许多细节并未讲清。整个逻辑梳理的难点在于对于
NIMNetCallMeeting和NIMChatroom两者的理解。 - 其实只需记住直播间里面的所有角色都在
NIMChatroom中,而主播与连麦者同时在NIMNetCallMeeting和NIMChatroom中。 - 想确定一个行为是通过那个渠道进行的。
- 判断受众,若这个行为的参与者不仅仅包涵主播与连麦者。(如监听直播间的状态普通观众也要监听)则该行为走的是
NIMChatroom
- 判断受众,若这个行为的参与者不仅仅包涵主播与连麦者。(如监听直播间的状态普通观众也要监听)则该行为走的是