使用ImSDK的接口创建聊天室,观众可进入聊天室中聊天,但此时主播端无音视频数据
[[TIMGroupManager sharedInstance] CreateGroup:@"AVChatRoom" members:nil groupName:@"groupName" groupId:groupId succ:^(NSString *groupId) {
NSLog(@"保存成功回调的groupId,在1.3步骤中需要用到");
} fail:^(int code, NSString *msg) {
NSLog(@"创建群组失败,打印code和msg分析原因");
}];
使用TILILiveSDK的接口创建音视频房间,主播开始音视频数据上行
TILLiveRoomOption *option = [TILLiveRoomOption defaultHostLiveOption];
option.imOption.imSupport = NO;//创建音视频房间是必须把imSupport配置项设置为NO
[[TILLiveManager getInstance] createRoom:roomId option:option succ:^{
NSLog(@"创建音视频房间成功,在这里开始1.3步骤");
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"创建音视频房间失败,打印errId和errMsg分析错误原因");
}];
使用ILiveSDK的接口绑定IM聊天室和音视频房间,绑定之后,聊天室和音视频房间则合成为一个房间
int result = [[ILiveRoomManager getInstance] bindIMGroupId:groupid];
if (result == 0)
{
NSLog(@"绑定成功,在这里开始1.4步骤");
}
使用TILLiveSDK的接口发送自定义消息,通知观众,主播进入直播间开始直播了(大咖来了,观众接收到这个消息的时候会进入音视频房间,参考2.2)
//发送群消息,通知观众进入音视频房间
ILVLiveCustomMessage *inAvRoomMsg = [[ILVLiveCustomMessage alloc] init];
inAvRoomMsg.type = ILVLIVE_IMTYPE_GROUP;
inAvRoomMsg.cmd = ILVLIVE_IMCMD_BigCast_ENTER;//自定义的消息命令字
NSString *roomStr = [@(roomId) stringValue];
inAvRoomMsg.data = [roomStr dataUsingEncoding:NSUTF8StringEncoding];
[[TILLiveManager getInstance] sendCustomMessage:inAvRoomMsg succ:^{
NSLog(@"发送成功,观众端接收到此消息,做进入音视频房间的操作");
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"发送消息失败,打印errId和errMsg分析原因");
}];
主播端退出IM聊天室之前,先发送一个退群消息,让其他观众感知到主播已经离开,观众也退群,再使用ImSDK的接口删除IM聊天室。
ILVLiveCustomMessage *customMsg = [[ILVLiveCustomMessage alloc] init];
customMsg.type = ILVLIVE_IMTYPE_GROUP;
customMsg.recvId = [[ILiveRoomManager getInstance] getIMGroupId];
customMsg.cmd = (ILVLiveIMCmd)AVIMCMD_ExitLive;
[[TILLiveManager getInstance] sendCustomMessage:customMsg succ:^{
NSLog(@"发送退群消息成功,在这里开始退出聊天室");
int result = [[TIMGroupManager sharedInstance] DeleteGroup:groupId succ:^{
NSLog(@"主播退出IM聊天室成功");
} fail:^(int code, NSString *msg) {
NSLog(@"主播退出IM聊天室失败,打印code和msg分析原因");
}];
if(result != 0)
{
NSLog(@"主播退出IM聊天室失败,打印result分析原因");
}
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"发送退群消息失败,打印errId和errMsg分析原因");
}];
使用TILLiveSDK的接口退出音视频房间
[[TILLiveManager getInstance] quitRoom:^{
NSLog(@"退出直播间成功");
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"退出直播间失败,打印eerrId和errMsg分析原因");
}]
使用ImSDK的接口加入聊天室,此时观众是看不到主播画面的,因为主播还没有创建音视频房间,观众只能在聊天室里面聊天。
int result = [[TIMGroupManager sharedInstance] JoinGroup:groupId msg:nil succ:^{
NSLog(@"加入聊天室成功");
} fail:^(int code, NSString *msg) {
if (code == ILIVE_IM_ALREADYINGROUP)//已经是群成员
{
NSLog(@"加入聊天室成功");
}
else
{
NSLog(@"加入聊天室失败,打印code和msg分析原因");
}
}];
if (result != 0)
{
NSLog(@"加入聊天室失败,打印result分析原因");
}
当观众收到主播加入音视频房间的的消息时(本文档中1.4的ILVLIVE_IMCMD_BigCast_ENTER),使用TILLiveSDK的接口加入音视频房间。
TILLiveRoomOption *option = [TILLiveRoomOption defaultGuestLiveOption];
option.imOption.imSupport = NO;//加入音视频房间是必须把imSupport配置项设置为NO
[[TILLiveManager getInstance] joinRoom:roomId option:option succ:^{
NSLog(@"加入音视频房间成功,在这里开始执行2.3");
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"加入音视频房间失败,打印errId和errMsg分析原因");
}];
使用ILiveSDK的接口绑定IM聊天室和音视频房间,绑定之后,聊天室和音视频房间则合成为一个房间
int result = [[ILiveRoomManager getInstance] bindIMGroupId:groupid];
if (result == 0)
{
NSLog(@"绑定成功。到此为止,从主播创建大咖模式房间到观众最终看到大咖视频画面的流程已经结束");
}
用TILLiveSDK的代理接口- (void)onCustomMessage:(ILVLiveCustomMessage *)msg
收消息,收到主播退出IM聊天室的消息后(本文当中1.5.1的AVIMCMD_ExitLive),用IM接口退出聊天室
int result = [[TIMGroupManager sharedInstance] DeleteGroup:groupId succ:^{
NSLog(@"观众退出IM聊天室成功");
} fail:^(int code, NSString *msg) {
if (code == 10015)//群组id无效
{
NSLog(@"观众端返回这个错误码,可以认为是退出聊天室成功,因为观众端退聊天室时,极有可能主播已经解散了这个聊天室,导致观众这边的聊天室id已经无效");
}
else
{
NSLog(@"观众退出IM聊天室失败,打印code和msg分析原因");
}
}];
if(result != 0)
{
NSLog(@"主播退出IM聊天室失败,打印result分析原因");
}
使用TILLiveSDK的接口退出音视频房间
[[TILLiveManager getInstance] quitRoom:^{
NSLog(@"退出直播间成功");
} failed:^(NSString *module, int errId, NSString *errMsg) {
NSLog(@"退出直播间失败,打印eerrId和errMsg分析原因");
}]