1、实时对讲开发说明

1、实时对讲

实时对讲功能是语音会议的一种特殊形式,默认最大支持5方,专有云根据选定套餐进行扩展。发言人必须抢麦才能发言,只能有人放麦以后,其他人才能抢麦。

注意:5.0以上的SDK集成的客户端,测试音视频功能,音视频,会议,群组等操作需要,先将在我们控制台创建的应用上线,才可测试(控制台提供的测试demo中的应用id和应用token,不能用来测试,需要使用自己在官网控制台创建的应用的id和应用token)

1.1、接口逻辑:

接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。用户发出创建对讲、抢麦等操作时,在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的回调方法中处理。会议中的成员收到服务端发送过来的消息通过“通知回调”方法-(void)onReceiveInterphoneMeetingMsg:(ECInterphoneMeetingMsg *)msg;来接收并进行处理。

1.2、业务流程

(1)用户A创建实时对讲,创建的同时选择用户B、用户C加入

(2)用户A先被加入到实时对讲会议室中

(3)用户B和用户C收到请求并同意加入,同时用户A收到用户B和用户C加入的通知消息

(4)通过退出接口可以退出实时对讲

(5)实时对讲只要有一个人,实时对讲就不会结束,直到所有人退出实时对讲,会议室自动关闭

2、实时对讲操作代码示例

✾ 创建实时对讲—我们假设Tony要和John、Smith建立实时对讲,则Tony创建实时会议的代码如下:

//要邀请的成员数组
NSMutableArray * inviteArray = [[NSMutableArray alloc] initWithObjects:@" John的电话号",@" Smith的电话号", nil];
[[ECDevice sharedInstance].meetingManager createInterphoneMeetingWithMembers:inviteArray completion:^(ECError *error, NSString *meetingNumber) {  // error创建实时对讲回调状态码
               //meetingNo 创建实时对讲回调的会议号
                if(error.errorCode==ECErrorType_NoError){
                 NSLog(@"创建实时对讲成功,跳转到实时对讲界面");
                }else {
                  NSLog(@"创建实时对讲失败");
                } 
}];

                    

✾ 接收到实时对讲邀请—John和Smith收到实时对讲的邀请(在通知消息中同时上报了已经加入会议的成员),或者当有人加入实时对讲时,sdk都通过onReceiveInterphoneMeetingMsg上报相关信息,其代码如下:

-(void)onReceiveInterphoneMeetingMsg:(ECInterphoneMeetingMsg *)msg{
    ECInterphoneMeetingMsgType type=  msg.type;
   if (type== Interphone_INVITE)
    {
       NSLog(@"邀请加入实时对讲");
    }
    else if(type== Interphone_OVER)
    {
       NSLog(@"退出实时对讲");
    }
}

                    

注:通常实时对讲为了实时的邀请不允许拒绝,可以先进入实时对讲,然后再退出。

✾ 退出实时对讲—在实时对讲中,Tony、John、Smith三人任何人都可以随时退出实时对讲,代码如下:

[[ECDevice sharedInstance].meetingManager exitMeeting];
                 
                    

✾ 实时对讲抢麦—抢麦只有在实时对讲中才起作用,在语音会议和视频会议中无效。我们假设Tony在语音会议中抢麦,其示例代码如下:

NSString* meetingNo =@”所在的实时对讲的会议号”;
 [[ECDevice sharedInstance].meetingManager controlMicInInterphoneMeeting: meetingNo completion:^(ECError *error,NSString *memberVoip ){
         // memberVoip当前在麦上的账号
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"控麦成功,请讲话"); 
           }
        else
          {
               NSLog(@"控麦失败,稍后重试"); 

          }
 }];      
        
                    

✾ 实时对讲放麦—放麦只有在实时对讲中才起作用,在语音会议和视频会议中无效。我们假设Tony在语音会议中放麦,其示例代码如下:

NSString* meetingNo =@”所在的实时对讲的会议号”;
 [[ECDevice sharedInstance].meetingManager releaseMicInInterphoneMeeting: meetingNo completion:^(ECError *error,NSString *memberVoip ){
            // memberVoip当前在放麦人的账号
            if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"放麦成功,请讲话"); 
           }
        else
          {
               NSLog(@"放麦失败,稍后重试"); 
          }
        }];
        
                    

2、语音会议开发说明

1、语音会议

语音会议只是多人参加的基于互联网、或者基于电话或者网络和电话混合的会议。Sdk最多支持32方语音会议。

1.1、接口逻辑:

接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的回调方法中处理。。会议中的成员收到服务端发送过来的消息通过“通知回调”方法-(void)onReceiveMultiVoiceMeetingMsg:(ECMultiVoiceMeetingMsg *)msg来接收并进行处理。

1.2、业务流程

(1)用户A创建语音会议或者电话会议

(2)会议创建成功之后,邀请其他成员加入会议

(3)其他成员收到邀请,同意或拒绝加入会议

2、语音会议操作代码示例

✾ 创建音频会议或电话会议—我们假设Tony要创建音频会议,其示例代码如下:

功能:创建语音、视频会议。
参数:params 创建语音、视频会议的参数对象 参考ECCreateMeetingParams对象。
ecMultMeetingType 创建会议的类型、语音、视频会议二种。 
返回值:无
ECCreateMeetingParams *params =[[ECCreateMeetingParams alloc]init];
            params.meetingType =会议类型
            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* keywords =@”业务属性”;

[[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会议的类型,
l 回调监听 根据传入的会议类型回调不同的方法。
返回值:无
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

✾ 分页获取音频会议列表

/**
 @brief 获取音频会议列表
 @param multMeetingType 会议房间的类型
 @param keywords        房间关键字
 @param page            页码
 @param pageSize        房间数
 @param isAsc           是否升序
 @param completion      执行结果回调block
 */
[[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVoice 
  andKeywords:nil page:(NSInteger)page pageSize:(NSInteger)pageSize isAsc:(BOOL)isAsc completion: 
   (ECError *error, NSArray * meetingList) {
        if (error.errorCode == ECErrorType_NoError)
           {
               NSLog(@"获取列表成功");
           }
        else
          {
               NSLog(@"获取列表失败");
          }
}];
                    

3、视频会议开发说明

1、视频会议

视频会议只是多人参加的基于互联网、或者基于电话或者网络和电话混合的会议。

1.1、接口逻辑:

接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的block回调中处理。会议中的成员收到服务端发送过来的消息通过“通知回调”方法onReceiveMultiVideoMeetingMsg来接收并进行处理。

1.2、业务流程

(1)用户A创建视频会议。

(2)会议创建的时候有两种方式:

根据参数设置创建者自动加入,如果创建者选择自动加入,则创建会议成功后,创建者直接加入会议。

根据参数设置创建者不自动加入会议,则会议创建成功后,创建者需要调用“加入会议接口”加入会议。

(3)其他成员获取视频会议列表,选择对应的会议加入。

(4)用户加入视频会议的同时,需要调用publishSelfVideoFrameInVideoMeeting:(NSString*)meetingNumber completion:(void(^)(ECError *error, NSString *meetingNumber))completion接口发布自己的视频。

(5)会议室成员收到有人加入会议通知,调用requestMemberVideoWithAccount:(NSString*)username andDisplayView:(UIView*)displayView andVideoMeeting:(NSString*)meetingNumber andPwd:(NSString*)meetingPwd andPort:(NSInteger)port completion:(void(^)(ECError *error, NSString *meetingNumber,NSString *member))completion请求该用户的视频数据。

(6)多路视频会议,涉及到消息体类包括:ECCreateMeetingParams、ECMeetingRoom、ECMeetingMember、ECMultiVideoMeetingMsg、ECError等,消息体类的相关属性,请参照SDK里面的说明。

2、视频会议操作代码示例

✾ 创建视频会议—创建视频会议和创建音频会议是同一个接口,主要是类型不同,同时注意在创建视频会议前创建视频显示窗口,现在我们假设Tony要创建视频会议,其示例代码如下:

功能:创建语音、视频会议。
参数:params 创建语音、视频会议的参数对象 参考ECCreateMeetingParams对象。
ecMultMeetingType 创建会议的类型、语音、视频会议二种。
        
返回值:无
ECCreateMeetingParams *params =[[ECCreateMeetingParams alloc]init];
            
            params.MeetingName= @"会议名称";
            params.meetingType = ECMeetingType_MultiVideo;
            params.Square=@"创建几路视频";
            params.AutoClose=@"创建者退出后会议是否解散";
            params.AutoJoin= @"创建后,创建者是否自动加入会议";
            params.AutoDelete= @"是否为永久会议";
            params.VoiceMod= @"背景音乐";
            params.Keywords=@"业务属性";
           [[ECDevice sharedInstance].meetingManager createMultMeetingByType:params completion: (ECError* error, NSString *meetingNumber) {
            //meetingNo 创建会议回调的会议号
           if (error.errorCode == ECErrorType_NoError)
             { 
                 NSLog(@"会议创建成功,请讲话"); 
                 如果选择的是创建者自动加入的话,在会议创建成功之后就应该创建好多路视频的View,创建过程如下:
                 1.在跳转的页面的初始化中,直接定义好view,在view调用底层sdk里面的方法,设置本地视频窗口、然后调用创建视频会议接口。
                 2.设置视频通话码率[[ECDevice sharedInstance].voIPManager setVideoBitRates:@” 视频码流,kb/s,范围30-300”];
                 3.设置视频通话显示的view [[ECDevice sharedInstance].voIPManager setVideoView:@” 对方显示视图” andLocalView:@” 本地显示视图”];
                 4.设置视频会议地址[[ECDevice sharedInstance].meetingManager setVideoConferenceAddr:@”会议地址”];
                 5.详细过程请参考demo中,MultiVideoConfViewController页面。
             }
          else
            {
                 NSLog(@"会议创建失败,稍后重试"); 
            } 
}];

                    

✾ 主动加入视频会议—主动加入视频会议和加入音频会议是同一个接口,只是传入参数的类型不同,同时需要注意视频窗口的创建,我们假设Eric要主动加入视频会议,其示例代码如下:

功能:通过会议类型加入会议。
参数:meetingNo 会议号
           meetingType 会议的类型;
           meetingPwd 会议的密码。
返回值:无。
如果选择不是自动加入的话,需要在自动加入前设置多路视频view,创建过程与自动加入的过程一致。
NSString* meetingNo =@”会议号”;
NSString* meetingpwd =@”会议密码”;
[[ECDevice sharedInstance].meetingManager joinMeeting: meetingNo ByMeetingType: ECMeetingType_MultiVideo andMeetingPwd: meetingpwd completion: (ECError* error, NSString *meetingNumber) {
       //meetingNo加入会议回调的会议号
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"加入会议成功"); 
           }
        else
          {
               NSLog(@"加入会议失败"); 
          } 
    }];

                    

✾ 解散视频会议—解散视频会议我们假设Tony要解散自己创建的一个会议,其示例代码如下:

功能:通过会议类型加入会议。
参数:meetingNo 会议号
           meetingType 会议的类型
           appId 应用id
返回值:无。
NSString* meetingNo =@”要解散的会议id”;
[[ECDevice sharedInstance].meetingManager deleteMultMeetingByMeetingType: ECMeetingType_MultiVideo e andMeetingNumber: meetingNo completion: (ECError *error, NSString *meetingNumber) {
          if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"解散会议成功"); 
           }
        else
          {
               NSLog(@"解散会议失败"); 
          }
}];

                    

✾ 管理员主动邀请成员加入视频会议—视频会议邀请成员加入,只有会议创建者才能邀请成员,我们假设Tony要邀请John,其示例代码如下:

功能: 邀请成员加入视频会议 
参数:meetingNo 会议号
          type 会议的类型视频。
          Member 被移除成员的通讯账号或者手机号码
返回值:无.
NSString* meetingNo =@”当前的会议id”;
NSString* meetingnumber =@”邀请的成员通讯账号”;
BOOL isLoadingCall = YES/NO; //用户登录的是手机号或者通讯账号,YES是手机号,NO是通讯账号
[[ECDevice sharedInstance].meetingManager inviteMembersJoinMultiMediaMeeting: meetingNo andIsLoandingCall: isLoadingCall andMembers: meetingnumber completion:^(ECError *error, NSString *meetingNumber) {// meetingNumber加入会议成员的号码
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"邀请会议成员成功"); 
           }
        else
          {
               NSLog(@"邀请会议成员失败"); 
          }
}];


邀请成员(通讯账号或者电话号),被邀请方需要处理的事件,在-(NSString*)onMeetingCallReceived:(NSString*)callid withCallType:(CallType)calltype withMeetingData:(NSDictionary*)meetingData;的方法中需要做处理。这个方法只有音视频会议邀请成员才会调用。具体事例如下:
功能:有会议呼叫邀请
参数; callid      会话id
        calltype    呼叫类型
        meetingData 会议的数据
-(NSString*)onMeetingCallReceived:(NSString*)callid withCallType:(CallType)calltype withMeetingData:(NSDictionary*)meetingData {

    if ([DemoGlobalClass sharedInstance].isCallBusy) {//当有邀请呼入或者正在通话过程中,需要告知对方,线路处于忙碌状态需要等待。
        [[ECDevice sharedInstance].VoIPManager rejectCall:callid andReason:ECErrorType_CallBusy];
        return @"";
    }
    
    UIViewController *incomingCallView = nil;
    if (calltype == VIDEO) {//当多路视频会议邀请时,需要处理的事件,弹出来电窗口
       
    } else {// 当音频会议邀请时,弹出来电窗口
       
    }
[DemoGlobalClass sharedInstance].isCallBusy = YES;//有来电呼入时,需要先把状态置为忙碌状态。
    return nil;
}

                    

✾ 退出会议—和音视频退出会议的接口是同一个,其示例代码如下:

[[ECDevice sharedInstance].meetingManager exitMeeting];

                    

✾ 从视频会议踢出会议成员—视频会议踢出会议成员和音频会议踢出会议成员是同一个接口,只是传入会议类型不同。只有会议创建者才能踢出成员,我们假设Tony要踢出John,其示例代码如下:

功能:从语音、视频会议移除成员 
参数:
meetingNo 会议号
type 会议的类型 、语音或者视频。
Member 被移除成员的通讯账号或者手机号码
返回值:无.
NSString* meetingNo =@”当前的会议id”;
NSString* meetingnumber =@”要踢出的成员”;
ECVoIPAccount *membervVoip = [[ECVoIPAccount alloc] init];
membervVoip.account =  meetingnumber;
membervVoip.isVoip = YES;
[[ECDevice sharedInstance].meetingManager removeMemberFromMultMeetingByMeetingType:ECMeetingType_MultiVideo andMeetingNumber: meetingNo andMember: membervVoip completion: (ECError *error, ECVoIPAccount *membervVoip) {
//member被移除会议成员的号码
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"踢出会议成员"); 
           }
        else
          {
               NSLog(@"踢出会议成员失败"); 
          }
}];

                    

✾ 视频会议通知消息—当对视频会议进行操作(如主动加入、退出、解散、踢出成员)时,会议室中的相关成员通过视频会议的“通知回调”接口onReceiveMultiVideoMeetingMsg接收相关信息,并进行处理,其代码示例如下:

-(void)onReceiveMultiVideoMeetingMsg:(ECMultiVideoMeetingMsg *)msg
{
ECVideoMeetingMsgType type=  msg.type;
   if(msgType==Video_JOIN)
    {
        NSLog(@"有人加入");
    }
    else if(msgType== Video_EXIT)
    {
        NSLog(@"有人退出"); 
    }
    else if(msgType== Video_DELETE)
    {
        NSLog(@"房间被删除退出");
    }
    else if(msgType== Video_REMOVEMEMBER)
   {
        NSLog(@"有人被踢出会议");
    }
    else if(type==Video_PUBLISH)
   {
        NSLog(@"发布视频");
   }
   else if(type==Video_UNPUBLISH)
   {
       NSLog(@"取消发布视频");
    }
}

                    

✾ 获取视频会议列表—获取视频会议列表和可以获得应用下的所有音频会议,和获取音频会议列表是同一个接口,其示例代码如下:

功能:获取应用下面的语音或视频会议列表。
参数: 
Keywords业务属性
meetingType会议的类型
返回值:无

[[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVideo andKeywords:nil completion: (ECError *error, NSArray * meetingList) {
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"获取列表成功"); 
           }
        else
          {
               NSLog(@"获取列表失败"); 
          }
}];

                    

✾ 查询当前视频会议成员—用户加入会议后,需要获取当前视频会议中的所有成员,接口和获取音频会议成员的接口一致,传入会议类型参数不同,其示例代码如下:

功能:根据会议类型查询当前会议的成员 
参数: meetingNo,会议号
            meetingType 会议的类型,
回调监听 根据传入的会议类型回调不同的方法。
返回值:无
NSString* meetingNo =@”当前的会议id”;
[[ECDevice sharedInstance].meetingManager queryMeetingMembersByMeetingType: ECMeetingType_MultiVideo andMeetingNumber: meetingNo completion: (ECError *error, NSArray* member){
        //members参与会议的成员数组
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"查询会议成员成功"); 
           }
        else
          {
               NSLog(@"查询失败"); 
          }
}];

                    

✾ 视频会议发布自己的视频—创建或加入视频会议后,需要首先发布自己的视频,其示例代码如下:

NSString* meetingNo =@”当前的会议id”;
 [[ECDevice sharedInstance].meetingManager publishSelfVideoFrameInVideoMeeting:meetingNo completion:^(ECError *error, NSString *meetingNumber){
       if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"发布视频成功"); 
           }
        else
          {
               NSLog(@"发布失败"); 
          }
}]; 

                    

✾ 视频会议取消发布自己的视频—用户想关闭自己的视频(可以看到会议室中其他成员视频,),其示例代码如下:

NSString* meetingNo =@”当前的会议id”;
 [[ECDevice sharedInstance].meetingManager cancelPublishSelfVideoFrameInVideoMeeting:meetingNo completion:^(ECError *error, NSString *meetingNumber){
        if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"取消发布成功"); 
           }
        else
          {
               NSLog(@"取消发布失败"); 
          }
}];

                    

✾ 视频会议请求某端视频—请求某端视频是要显示会议室中某位成员的视频。我们假设Tony请求John的视频,其示例代码如下:

NSString* meetingNo =@”当前的会议id”;
NSString* meetingPwd =@”所在的会议密码”;
NSString* memberNumber =@”John的通讯账号”;
XXXXXX displayView=当成功请求时,展示该成员的窗口
[[ECDevice sharedInstance].meetingManager requestMemberVideoWithAccount: memberNumber andDisplayView: displayView andVideoConference: meetingNo andPwd: meetingPwd andPort:port.integerValue completion:^(ECError *error, NSString *meetingNumber, NSString *member) {
       if (error.errorCode == ECErrorType_NoError)
           { 
               NSLog(@"请求成功"); 
           }
        else
          {
               NSLog(@"请求失败"); 
          }

}];
说明:
视频时(包含点对点和会议),设置远端UIView的属性contentMode:(DisplayView: displayView)
UIViewContentModeScaleToFill //view默认值,图像数据显示,填充view,但不等比例拉伸
UIViewContentModeScaleAspectFit //图像等比例拉伸,完全显示内容
UIViewContentModeScaleAspectFill //图像等比例拉伸,填充view,部分内容可能不显示

                    

✾ 视频会议中取消某一端视频—取消某端视频是在自己的视频会议窗口中不在显示某位成员的视频。我们假设Tony请求John的视频,其示例代码如下:

NSString* meetingNo =@”当前的会议id”;
NSString* meetingPwd =@”所在的会议密码”;
NSString* memberNumber =@”John的通讯账号”;
XXXXXX displayView=当成功请求时,展示该成员的窗口

[[ECDevice sharedInstance].meetingManager
 cancelConferenceMemberVideoWithAccount: memberNumber
 andVideoConference: meetingNo andPwd: meetingPwd completion:^(ECError *error, NSString *meetingNumber, NSString *member) {
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)onReceiveMultiVideoMeetingMsg:(ECMultiVideoMeetingMsg *)msg

✾ 分页获取视频会议列表

/**
 @brief 获取音频会议列表
 @param multMeetingType 会议房间的类型
 @param keywords        房间关键字
 @param page            页码
 @param pageSize        房间数
 @param isAsc           是否升序
 @param completion      执行结果回调block
 */
[[ECDevice sharedInstance].meetingManager listAllMultMeetingsByMeetingType: ECMeetingType_MultiVideo 
  andKeywords:nil page:(NSInteger)page pageSize:(NSInteger)pageSize isAsc:(BOOL)isAsc completion: 
   (ECError *error, NSArray * meetingList) {
        if (error.errorCode == ECErrorType_NoError)
           {
               NSLog(@"获取列表成功");
           }
        else
          {
               NSLog(@"获取列表失败");
          }
}];
                    

文档更新时间:2016年12月4日