互联网多人语音
1、语音会议
语音会议是多人参加的基于互联网、或者基于电话或者网络和电话混合的会议。Sdk最多支持32方语音会议。
1.1、接口逻辑
接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的回调方法中处理。会议中的成员收到服务端发送过来的消息通过“通知回调”方法-(void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg来接收并进行处理。
1.2、业务流程
- 用户A创建语音会议或者电话会议
- 会议创建成功之后,邀请其他成员加入会议
- 其他成员收到邀请,同意或拒绝加入会议
2、语音会议操作代码示例
创建音频会议或电话会议
我们假设Tony要创建音频会议,其示例代码如下:
- 功能:创建语音、视频会议。
- 参数:params 创建语音、视频会议的参数对象 参考ECCreateMeetingParams对象
- ecMultMeetingType 创建会议的类型,语音、视频会议二种
- 返回值:无
- ECCreateMeetingParams *params =[[ECCreateMeetingParams alloc]init];
- params.meetingType = ECMeetingType_MultiVoice;
- params.meetingName = @"会议名称";
- params.meetingPwd = @"会议密码";
- params.square=@"创建几路视频";
- params.autoClose=@"创建者退出后会议是否解散";
- params.autoJoin= @"创建后,创建者是否自动加入会议";
- params.autoDelete= @"是否为永久会议";
- params.voiceMod= @"背景音乐";
- params.keywords=@"业务属性";
- [[ECDevice sharedInstance].meetingManager createMultMeetingByType:params andType:More_Voice completion:^(NSUInteger error,NSString *meetingNo ){
- //meetingNo 创建会议回调的会议号
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"会议创建成功,请讲话");
- }
- else
- {
- NSLog(@"会议创建失败,稍后重试");
- }
- }];
邀请成员加入会议
我们假设Tony创建音频会议成功之后,邀请John和Smith加入音频会议,其代码如下:
- 功能:邀请用户加入语音会议
- 参数: meetingNumber 会议号
- isLoadingCall用户登录的是电话号或者通讯号码
- members被邀请加入语音会议的成员号
- 返回值:无
- NSString* meetingNumber=@”会议号”;
- NSMutableArray *selectArray = [[NSMutableArray alloc] initWithObjects:@" John的电话号",@" Smith的电话号", nil];
- [[ECDevice sharedInstance].meetingManager inviteMembersJoinToVoiceMeeting: meetingNumber andIsLoandingCall:(alertView.tag==ChatRoomVIEW_addmember) andMembers: selectArray completion:^(ECError *error, NSString *meetingNumber) {
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"邀请成员成功");
- }
- else
- {
- NSLog(@"邀请成员失败");
- }
- }];
主动加入会议
我们假设Eric要主动加入会议,其示例代码如下:
- 功能:通过会议类型加入会议。
- 参数:meetingNumber 会议号
- meetingType 会议的类型
- meetingPwd 会议的密码
- 返回值:无
- NSString* roomNo =@”会议号”;
- NSString* pwd =@”会议密码”;
- [[ECDevice sharedInstance].meetingManager joinMeeting:roomNo ByMeetingType:ECMeetingType_MultiVoice andMeetingPwd:pwd completion:^(ECError *error, NSString *meetingNumber) { //meetingNo加入会议回调的会议号
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"加入会议成功");
- }
- else
- {
- NSLog(@"加入会议失败");
- }
- }];
通过会议类型解散语音
我们假设Tony要解散自己创建的一个语音会议,其示例代码如下:
- 功能:通过会议类型加入会议。
- 参数:meetingNumber 会议号
- multMeetingType 会议的类型
- 返回值:无
- NSString* meetingNo =@”要解散的会议id”;
- [[ECDevice sharedInstance].meetingManager deleteMultMeetingByMeetingType:ECMeetingType_MultiVoice andMeetingNumber: meetingNo completion:^(ECError *error, NSString *meetingNumber) {
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"解散会议成功");
- }
- else
- {
- NSLog(@"解散会议失败");
- }
- }];
退出会议
有人退出会议,其示例代码如下:
- 功能:退出会议 参数:无
- [[ECDevice sharedInstance].meetingManager exitMeeting];
从语音会议踢出会议成员
只有会议创建者才能踢出成员,我们假设Tony要踢出John,其示例代码如下:
- 功能:从语音、视频会议移除成员
- 参数:meetingNumber 会议号
- multMeetingType 会议的类型; 会议的类型 、语音或者视频
- membervVoip 被移除成员的账号
- 返回值:无
- NSString* curRoomNo =@”当前的会议id”;
- NSString* meetingnumber =@”要踢出的成员”;
- [[ECDevice sharedInstance].meetingManager removeMemberFromMultMeetingByMeetingType:ECMeetingType_MultiVoice andMeetingNumber: curRoomNo andMember: meetingnumber completion:^(ECError *error, ECVoIPAccount *membervVoip) { //member被移除会议成员的号码
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"踢出会议成员");
- }
- else
- {
- NSLog(@"踢出会议成员失败");
- }
- }];
音频会议通知消息
当对音频会议进行操作(如邀请,主动加入、退出、解散、踢出成员)时,会议室中的相关成员通过音频会议的“通知回调”接口 onReceiveMultiVoiceMeetingMsg接收相关信息,并进行处理,其代码示例如下:
- - (void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg{
- ECMultiVoiceMeetingMsgType *msgType= msg.type;
- if(msgType== MultiVoice_JOIN)
- {
- NSLog(@"有人加入");
- }
- else if(msgType== MultiVoice_EXIT)
- {
- NSLog(@"有人退出");
- }
- else if(msgType== MultiVoice_DELETE)
- {
- NSLog(@"房间被删除退出");
- }
- else if(msgType== MultiVoice_REMOVEMEMBER){
- NSLog(@"有人被移除");
- } else if(msgType== MultiVoice_REFUSE)
- {
- NSLog(@"会议释放掉");
- }
- }
获取语音会议列表
通过“获取音频会议列表”接口,可以获得应用下的所有音频会议列表,其示例代码如下:
- 功能:获取应用下面的语音或视频会议列表。
- 参数: keywords 业务属性
- multMeetingType 会议类型
- 返回值:无
- NSString *NSString = @”业务属性”;
- [[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType:(ECMeetingType)multMeetingType andKeywords:(NSString *)keywords completion:(void(^)(ECError *error, NSArray * meetingList))completion {
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"获取列表成功");
- }
- else
- {
- NSLog(@"获取列表失败");
- }
- }];
查询当前音频会议成员
用户加入会议后,需要获取当前音频会议中的所有成员,接口和获取视频会议成员的接口一致,只是传入的会议类型参数不同,其示例代码如下:
- 功能:根据会议类型查询当前会议的成员
- 参数:meetingNumber 会议号
- meetingtype 会议类型
- 返回值:无
- NSString *meetingNumber =@”当前的会议id”;
- [[ECDevice sharedInstance].meetingManager queryMeetingMembersByMeetingType:(ECMeetingType)meetingtype andMeetingNumber:(NSString *)meetingNumber completion:(void(^)(ECError *error, NSArray* members))completion {//members参与会议的成员数组
- if (error.errorCode == ECErrorType_NoError)
- {
- NSLog(@"查询会议成员成功");
- }
- else
- {
- NSLog(@"查询失败");
- }
- }];
禁言禁听功能
管理员有权限决定会议成员是否可听可讲,当不需要某一成员说话或者可听时,此接口可以帮助用户实现。
- /**
- @brief 设置会议某成员是否可听可讲
- @param memberVoip 成员通讯账号
- @param speakListen 是否可听可讲 1、禁言 2、可讲 3、禁听 4、可听
- @param meetingType 会议房间的类型
- @param meetingNumber 房间号
- @param completion 执行结果回调block
- */
- ECVoIPAccount *account = “是否是通讯账号”;
- NSInteger speakListen = “是否可听可讲”;//1、禁言 2、可讲 3、禁听 4、可听
- ECMeetingType meetingType = “会议的类型”;
- NSString *meetingNumber = “会议号”;
- [[ECDevice sharedInstance].meetingManager setMember:account
- speakListen: speakListen ofMeetingType: meetingType andMeetingNumber: meetingNumber
- completion:^(ECError *error, NSString *meetingNumber) {
- }];
禁言禁听设置后,服务器会下发一条通知消息,通知所有人,谁被禁言禁听了。通知消息体增加属性speakListen,语音群聊的通知是-(void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg