T 网易互动直播聊天室(包含用户上麦下麦踢出聊天室) - CocoaChina_让移动开发更简单

首页 >App Store研究

网易互动直播聊天室(包含用户上麦下麦踢出聊天室)

2017-08-09 10:16 编辑: suiling 分类:App Store研究 来源:简书

1.先前准备

1).http://netease.im/im-sdk-demo附上sdk下载链接

2).导入sdk 建议手动导入 并添加相应的依赖库文档都有

1.png

2.写代码

1).在网易云信登录获取到信息AppDelegate导入#import

NSString *appKey = @"30**************6e";
NSString *cerName = @"https://*********api";
[[NIMSDK sharedSDK] registerWithAppID:appKey cerName:cerName];

并获取到云信id这是必须的,先根据用户ID获取到token,获取后调取方法

[[[NIMSDK sharedSDK]loginManager] login:

用户ID token:在后台绑定的登录

token completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"登录失败%ld", error.code);
} else {
NSLog(@"登录成功%d", 200);
}
}]

2).实现该功能页面导入#import

2.0).创建一个会议NIMNetCallMeeting *_currentMeeting;

2.1).判断是否是主持人或者用户实现不同的方法

2.png

2.2)主持人创建会议

-(void)createVideoAndAudio
{
NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
meeting.name = 聊天室ID;
[self joinNetCallWithRMeeting:meeting];
}
- (void)joinNetCallWithRMeeting:(NIMNetCallMeeting *)rMeeting
{
if ([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]) {
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted) {
NIMNetCallOption *callOption =[[NIMNetCallOption alloc]init];
// 发送视频质量(SDK会处理 有可能无效)
//                callOption.preferredVideoQuality =NIMNetCallVideoQualityDefault;
// 禁止剪裁
//                callOption.disableVideoCropping =NO;
// 自动旋转远端画面
callOption.autoRotateRemoteVideo =YES;
// 期望的视频编码器
callOption.preferredVideoEncoder =NIMNetCallVideoCodecDefault;
// 期望的视频解码器
callOption.preferredVideoDecoder =NIMNetCallVideoCodecDefault;
// 是否使用后置摄像头
//                callOption.startWithBackCamera =NO;
// 启用互动直播
callOption.enableBypassStreaming =YES;
// 互动直播推流地址
callOption.bypassStreamingUrl = self.url;
// 是否在服务器录制音频
callOption.serverRecordAudio =YES;
callOption.autoDeactivateAudioSession = NO;
// 是否在服务器录制视频
callOption.serverRecordVideo =YES;
// 加入会议的类型->音频/视频
rMeeting.type = NIMNetCallMediaTypeAudio;
// 是否发送音视频数据
rMeeting.actor = YES;
// 网路电话配置
rMeeting.option = callOption;
//                NSLog(@"错那了%@",rMeeting);
//进入房间聊天
[[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:rMeeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {
if (!error) {
[[FbwHttpClient shareInstance]startRequestMethod:POST parameters:@{@"userId":用户ID,@"chatRoomId":聊天室ID} url:UrL_JoinChatRoom success:^(id responseObject) {
if ([[responseObject objectForKey:@"errcode"]integerValue] != 0) {
[SVProgressHUD showErrorWithStatus:[responseObject objectForKey:@"msg"]];
}else{
}
} failure:^(NSError *error) {
}];
NSLog(@"进入成功");
//默认关闭所有人视频
[[NIMAVChatSDK sharedSDK].netCallManager setCameraDisable:YES];
[[NIMAVChatSDK sharedSDK].netCallManager setMute:YES];
} else {
NSLog(@"进入失败");
[self reserveMeetingWithRoomId:self.LiaoTianSId];
}
}];
}else{
[self canRecord];
}
}];
}
}
- (void)reserveMeetingWithRoomId:(NSString *)roomId{
NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
meeting.name = roomId;
meeting.type = NIMNetCallMediaTypeAudio;
meeting.actor = NO;
[[NIMAVChatSDK sharedSDK].netCallManager reserveMeeting:meeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {
if (!error) {
NSLog(@"预定成功 ,进入房间");
[self joinNetCallWithRMeeting:meeting];
} else {
if (error.code == 417) {
[self joinNetCallWithRMeeting:meeting];
NSLog(@"meeting exists, %@",meeting);
error = nil;
} else {
NSLog(@"预定房间失败");
}
}
}];
}

2.3)用户加入会议

-(void)AddMeeting
{
NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];
meeting.name = 聊天室ID;
meeting.type = NIMNetCallMediaTypeAudio;
meeting.actor = NO;
[[FbwHttpClient shareInstance]startRequestMethod:POST parameters:@{@"userId":用户ID,@"chatRoomId":聊天室ID} url:UrL_JoinChatRoom success:^(id responseObject) {
if ([[responseObject objectForKey:@"errcode"]integerValue] != 0) {
[SVProgressHUD showErrorWithStatus:[responseObject objectForKey:@"msg"]];
}else{
//进入房间聊天
[[NIMAVChatSDK sharedSDK].netCallManager joinMeeting:meeting completion:^(NIMNetCallMeeting * _Nonnull meeting, NSError * _Nonnull error) {
if (!error) {
NSLog(@"进入成功");
[[NIMAVChatSDK sharedSDK].netCallManager setMute:YES];
[[NIMAVChatSDK sharedSDK].netCallManager setSpeaker:YES];//看需求是否开启扩音器
}else{
}
}];
}
} failure:^(NSError *error) {
}];
}

2.4)离开聊天室(踢出也如此)

[self quitConversationViewAndClear];

//                                    [self createOutRoom];

NIMNetCallMeeting *meeting = [[NIMNetCallMeeting alloc] init];

meeting.name = self.LiaoTianSId;

[[NIMAVChatSDK sharedSDK].netCallManager leaveMeeting:meeting];

2.5).主持人可以让用户上麦也可以让用户下麦以及旁听一看便知,很简单

3.png

2.6)到这里差不多也结束了,有几个注意的地方是你要区分主持人和用户,一抱麦用户即可说话,一下麦及不可,主持人一直可以,我们的需求你们可以看下图,我们聊天室用的融云,互动直播用的网易,当房间还有用户存在时,主持人退出聊天室还在,在麦用户还可以说话,当只有主持人一人时,退出聊天室,即关闭.

4.jpg

2.7)排版可能有点乱,看官们将就着看,做下来一开始确实有点麻烦,还好有位朋友指点就顺利多了,现在想想还挺简单的哈哈,互相学习,不断进步.

作者:博文欧巴

链接:http://www.jianshu.com/p/cddc1dbb4311

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

搜索CocoaChina微信公众号:CocoaChina
微信扫一扫
订阅每日移动开发及APP推广热点资讯
公众号:
CocoaChina
我要投稿   收藏文章
上一篇:iOS APP发布App Store上架IPV6遭拒问题
下一篇:iOS 10.3 开始请求应用商店评分的正确姿势:SKStoreReviewController
我来说两句
发表评论
您还没有登录!请登录注册
所有评论(0

综合评论

相关帖子

sina weixin mail 回到顶部