1、实时对讲开发说明

1、实时对讲

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

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

1.1、接口逻辑:

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

1.2、业务流程

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

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

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

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

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

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

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

//要邀请的成员数组
String members[]= [”John的账号”,”Smith的账号”];

ECDevice.getECMeetingManager().createInterphoneMeeting(
				members,
				new OnCreateOrJoinMeetingListener () {
					@Override
                 //reason创建实时对讲回调状态码
                 //meetingNo 创建实时对讲回调的会议号
					public void onCreateOrJoinMeeting (ECError reason,
							String meetingNo) {
						if(reason.errorCode == SdkErrorCode.REQUEST_SUCCESS)
						{	
                         log(“创建实时对讲成功,跳转到实时对讲界面”);
						}
else
{
                       log(“创建实时对讲失败”);
} 
					}
				});

                    

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

public void onReceiveInterPhoneMeetingMsg(ECInterPhoneMeetingMsg msg){
   
ECInterPhoneMeetingMsgType type = msg.getMsgType();
if (type==INVITE)
{
      //如果同意加入需要调用加入实时对讲接口。不加入就忽略此邀请
       Log(@"被邀请加入实时对讲");
    }
    else if(type==OVER)
    {
       Log(@实时对讲会议被解散");
}else if(type== JOIN){
 Log(@有人加入实时对讲");
} else if(type== CONTROL_MIC){
Log(@有人控麦");
} else if(type== RELEASE_MIC){
Log(@有人放麦");
}
else if(type== EXIT){
 Log(@有人退出实时对讲");
}

}

                    

✾ 加入实时对讲—代码如下:

void joinMeetingByType(java.lang.String meetingNo,
        java.lang.String meetingPwd,
        ECMeetingManager.ECMeetingType meetingType,
        ECMeetingManager.OnCreateOrJoinMeetingListener listener)

                    

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

ECDevice.getECMeetingManager().exitMeeting(ECMeetingManager.ECMeetingType.MEETING_INTERCOM);
        
                    

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

String meetingNo = “所在的实时对讲的会议号 ”;
ECDevice.getECMeetingManager().controlMicInInterPhoneMeeting (
						meetingNo, new OnControlMicInInterPhoneListener () {

							@Override
                        // reason抢麦的状态码
                        // speaker当前在麦
							public void onControlMicState(ECError reason,
									String speaker) {
                      if(reason.errorCode == SdkErrorCode.REQUEST_SUCCESS )
						{
                         //抢麦成功
						}
else
{
     //抢麦失败
} 

						}); 
        
                    

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

String meetingNo = “所在的实时对讲的会议号 ”;
ECDevice.getECMeetingManager().releaseMicInInterPhoneMeeting (
						meetingNo, new OnReleaseMicInInterPhoneListener () {

							@Override
                        // reason 放麦的回调状态
							public void onReleaseMicState(ECError reason) {
                         if(reason.errorCode == SdkErrorCode.REQUEST_SUCCESS )
						    {
                         //放麦成功
						    }


    else
    {
     //放麦失败
    } 
							}
						});
        
                    

2、语音会议开发说明

1、语音会议

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

1.1、接口逻辑:

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

1.2、业务流程

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

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

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

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

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

ECMeetingManager.ECCreateMeetingParams.Builder builder 
= new ECMeetingManager.ECCreateMeetingParams.Builder();
        // 设置语音会议房间名称
        builder.setMeetingName(mNameEditView.getText().toString().trim())
        // 设置语音会议房间加入密码
        .setMeetingPwd(mPasswordEditView.getText().toString().trim())
        // 设置语音会议创建者退出是否自动解散会议
        .setIsAutoClose(mCloseCheckedView.isChecked())
        // 设置语音会议创建成功是否自动加入
        .setIsAutoJoin(mJoinCheckedView.isChecked())
        // 设置语音会议背景音模式
        .setVoiceMod(
        ECMeetingManager.ECCreateMeetingParams.ToneMode.values()[mToneTypeView.getChoiceItemPosition()])
        // 设置语音会议所有成员退出后是否自动删除会议
        .setIsAutoDelete(mDelCheckedView.isChecked());			
	



	ECDevice.getECMeetingManager().createMultiMeetingByType(params, 
	ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE,
                new ECMeetingManager.OnCreateOrJoinMeetingListener() {
                    @Override
                    public void onCreateOrJoinMeeting(ECError reason, String meetingNo) {
                        if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                            //创建语音会议成功
                        }else {
                            //创建语音会议失败
                        } 
                       
                    }
                }); 
功能:创建语音
参数:params 创建语音会议的参数对象 参考ECCreateMeetingParams对象。

        
返回值:无

                    

✾ 邀请成员加入会议—我们假设Tony创建语音会议成功之后,邀请John和Smith加入语音会议,其代码如下:

String members[]=[”John的账号”,”Smith的账号”];
 String mMeetingNo =”会议号”;
Boolean isLandingCall:代表想邀请的时候想以手机形式或者app形式进行呼叫

//注释
ECDevice.getECMeetingManager().inviteMembersJoinToVoiceMeeting (mMeetingNo, members , isLandingCall,
                new ECMeetingManager.OnInviteMembersJoinToVoiceMeetingListener() {
                    @Override
                    public void onInviteMembersJoinToChatroom(ECError reason, String meetingNo) {
                       
                        if(SdkErrorCode.REQUEST_SUCCESS == reason.errorCode) {
                            // 邀请加入会议成功
                           
                        }
                        ToastUtil.showMessage("邀请加入会议失败["+ reason.errorCode + "]");
                    }
                }); 

                    

✾ 主动加入会议—我们假设Eric要主动加入会议,其示例代码如下:

String meetingNo=”会议号”;

String password=”会议的密码”;
ECDevice.getECMeetingManager().joinMeetingByType (meetingNo, password, 
ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE, new ECMeetingManager.OnCreateOrJoinMeetingListener() {
            @Override
            public void onCreateOrJoinMeeting(ECError reason, String meetingNo) {
                if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    //加入会议成功
                }else {
                   //加入会议失败
                }
                
            }
        });		}

                    

✾ 通过会议类型解散语音会议—我们假设Tony要解散自己创建的一个语音会议,其示例代码如下:

meetingNo;//想要删除的会议号
ECDevice.getECMeetingManager().deleteMultiMeetingByType (
ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE, meetingNo,
                new ECMeetingManager.OnDeleteMeetingListener() {
                    @Override
                    public void onMeetingDismiss(ECError reason, String meetingNo) {
                        if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                           //解散会议成功
                        }else {
                           //解散会议失败
                        }
                        
                    }
                }); 

                    

✾ 退出语音会议—退出会议,其示例代码如下:

ECDevice.getECMeetingManager().exitMeeting(ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE);
功能:退出会议 
参数:无。

                    

✾ 从语音会议踢出会议成员—只有会议创建者才能踢出成员,我们假设Tony要踢出John,其示例代码如下:


String member= “被踢出成员号”;
meetingNo=”会议号”;
boolean isMobile //当前被移除的是否是电话号码
ECDevice.getECMeetingManager().removeMemberFromMultiMeetingByType (
ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE,
           meetingNo ,member , isMobile ,new ECMeetingManager.OnRemoveMemberFromMeetingListener() {
                        @Override
                        public void onRemoveMemberFromMeeting(ECError reason, String member) {
                          
                            if(SdkErrorCode.REQUEST_SUCCESS == reason.errorCode) {
                               
                                // 移除会议成员成功
                                
                                            
                                        }
                                    }
                                }
                                return ;
                            }
                            ToastUtil.showMessage("移除会议成员失败[" + reason.errorCode+ "]");
                        }
                    });
功能:从语音会议移除成员 
参数:
meetingNo 会议号
返回值:无.

                    

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

public void void onReceiveVoiceMeetingMsg(ECVoiceMeetingMsg msg){
 
ECVoiceMeetingMsgType msgType= msg. getMsgType();
    if(msgType==JOIN)
    {
        Log(@"有人加入");
    }
    else if(msgType==EXIT)
    {
        Log(@"有人退出"); 
    }
    else if(msgType==DELETE)
    {
        Log(@"房间被删除退出");
    }
    else if(msgType== REMOVE_MEMBER)
{
   Log(@"有人被移除");
    }

}
                    

✾ 获取语音会议列表—通过“获取语音会议列表”接口,可以获得应用下的所有语音会议列表,其示例代码如下:

ECDevice.getECMeetingManager().listAllMultiMeetingsByType ("",
ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE, 
					new ECMeetingManager.OnListAllMeetingsListener<ECMeeting>() {
            @Override
            public void onListAllMeetings(ECError reason, List<ECMeeting> list) {
               
                if(reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    
                    //查询语音会议列表成功
                }else {
                    //查询语音会议列表失败
                }
                
            }
        });	}


                    

✾ 查询当前语音会议成员—用户加入会议后,需要获取当前语音会议中的所有成员,其示例代码如下:


String meetingNo=”语音会议房间号”;

ECDevice.getECMeetingManager().queryMeetingMembersByType (meetingNo, 
ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE,
                new ECMeetingManager.OnQueryMeetingMembersListener<ECVoiceMeetingMember>() {
                    @Override
                    public void onQueryMeetingMembers(ECError reason, List<ECVoiceMeetingMember> members) {
                        if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                           //查询成员成功
                        }else {
                  //查询成员失败
                }
                        
                    }
                });

                    

✾ 设置语音会议成员禁言、禁听状态

ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
            if(meetingManager==null){
                return;
            }
           meetingManager.setMemberSpeakListen(account, type, meetingNum, meetingType, new 
           ECMeetingManager.OnSetMemberSpeakListenListener() {
            @Override
            public void onSetMemberSpeakListenResult(ECError error, String meetingNum) {
                
                if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
                    
                    Log.d(TAG,"设置成功");
                }else {
                    Log.d(TAG,"设置失败");
                }
            }
        });
		    

✾ 分页获取语音会议列表

     
    /**
	 * ECMeetingManager类
     * 获取会议列表时、支持分页功能
     * @param keywords    查询关键词
     * @param meetingType  查询的会议类型
     * @param match        分页参数
     * @param listener     执行结果回调
     */
        ECMeetingPageMatch match = new ECMeetingPageMatch();
        match.setPage(1);
        match.setPageSize(10);

ECDevice.getECMeetingManager().listPageMultiMeetingsByType("keywords", 
     ECMeetingManager.ECMeetingType.MEETING_MULTI_VOICE, match, 
	  new ECMeetingManager.OnListPageMeetingsListener(){

    @Override
    public void onListAllMeetings(ECError ecError, ECMeetingPageMatchResult ecMeetingPageMatchResult,
                List list) 	{
				 // 处理消息发送结果
            }
        });
                    

3、视频会议开发说明

1、视频会议

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

1.1、接口逻辑:

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

1.2、业务流程

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

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

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

(4)在视频会议中发布自己的视频会议图像。

(5)在视频会议中请求/取消成员的视频图像。

(6)管理员对视频已加入视频会议成员进行管理(如:移除出会议)。

(7)管理员解散视频会议/成员退出视频会议。

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

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

// 初始化创建会议所需要的参数
ECMeetingManager.ECCreateMeetingParams.Builder builder 
= new ECMeetingManager.ECCreateMeetingParams.Builder();
// 设置语音会议房间名称
builder.setMeetingName("meetingName)
        // 设置视频会议创建者退出是否自动解散会议
        .setIsAutoClose("IsAutoClose")
        // 设置视频会议创建成功是否自动加入
        .setIsAutoJoin("IsAutoJoin")
        // 设置视频会议背景音模式
        .setVoiceMod("VoiceMod")
        // 设置视频会议所有成员退出后是否自动删除会议
        .setIsAutoDelete("IsAutoDelete");
ECMeetingManager.ECCreateMeetingParams params = builder.create();
// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
meetingManager.createMultiMeetingByType(params, 
        ECMeetingManager.ECMeetingType. MEETING_MULTI_VIDEO
        new ECMeetingManager.OnCreateOrJoinMeetingListener() {
            @Override
            public void onCreateOrJoinMeeting(ECError reason, String meetingNo) {
                if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    //创建会议成功
                    return ;
                }

                Log.e("ECSDK_Demo" , "create video meeting error[" 
                        + error.errorCode + " ]");

            }
        });

                    

✾ 邀请成员加入会议—我们假设Tony创建视频会议成功之后,邀请John和Smith加入视频会议,其代码如下:

// 封装需要请请加入会议的成员
String members[]={"John的账号","Smith的账号"};
// isLandingCall:表示是否以落地电话形式或者来电方式
// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起邀请加入会议请求
meetingManager.inviteMembersJoinToMeeting("meetingNo", members, "isLandingCall",
        new ECMeetingManager.OnInviteMembersJoinToMeetingListener() {
            @Override
            public void onInviteMembersJoinToMeeting(ECError reason, String meetingNo) {
                if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    // 邀请加入会议成功
                    return ;
                }

                Log.e("ECSDK_Demo" , "invite member error["
                        + error.errorCode + " ]");

            }
        });
        
                    

✾ 主动加入会议—我们假设Eric要主动加入视频会议,其示例代码如下。

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起加入会议请求[如果会议需要验证密码则需要输入会议密码]
meetingManager.joinMeetingByType("meetingNo", "password",
        ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO,
        new ECMeetingManager.OnCreateOrJoinMeetingListener() {
            @Override
            public void onCreateOrJoinMeeting(ECError reason, String meetingNo) {
                if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    // 加入会议成功
                    return;
                }

                Log.e("ECSDK_Demo", "join meeting error["
                        + error.errorCode + " ]");
            }
        });

                    

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

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起解散会议请求
meetingManager.deleteMultiMeetingByType (ECMeetingType.MEETING_MULTI_VIDEO,
        "meetingNo", new ECMeetingManager.OnDeleteMeetingListener() {
            @Override
            public void onMeetingDismiss(ECError reason, String meetingNo) {
                if (reason.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
                    // 解散会议成功
                    return;
                }
                Log.e("ECSDK_Demo", "del meeting error["
                        + error.errorCode + " ]");
            }
        });
        
                    

✾ 退出视频会议—退出会议,其示例代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起退出视频会议请求
meetingManager.exitMeeting(ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO);

                    

✾ 视频会议踢出会议成员—只有会议创建者才能踢出成员,我们假设Tony要踢出John,isMobile标识John是否以落地电话的形式加入或者视频来电方式加入。其示例代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起视频会议移除成员请求
meetingManager.removeMemberFromMultiMeetingByType(
        ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO,
        "meetingNo", "john", "isMobile",
        new ECMeetingManager.OnRemoveMemberFromMeetingListener() {
            @Override
            public void onRemoveMemberFromMeeting(ECError reason, String member) {
                if (SdkErrorCode.REQUEST_SUCCESS == reason.errorCode) {
                    // 移除会议成员成功
                    return ;
                }
                Log.e("ECSDK_Demo", "del meeting member error["
                        + error.errorCode + " ]");
            }
        });
        
                    

✾ 获取视频会议列表—通过“获取视频会议列表”接口,可以获得应用下的所有视频会议列表,其示例代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起查询视频会议请求
meetingManager.listAllMultiMeetingsByType("keyword",
        ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO,
        new ECMeetingManager.OnListAllMeetingsListener<ECMeeting>() {
            @Override
            public void onListAllMeetings(ECError reason, List<ECMeeting> list) {
                if (SdkErrorCode.REQUEST_SUCCESS == reason.errorCode) {
                    // 查询会议成功
                    return;
                }
                Log.e("ECSDK_Demo", "query meetings error["
                        + error.errorCode + " ]");
            }
        });
        
                    

✾ 查询当前视频会议成员—用户加入会议后,需要获取当前视频会议中的所有成员,其示例代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 发起查询视频会议成员请求
meetingManager.queryMeetingMembersByType("meetingNo",
        ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO,
        new ECMeetingManager.OnQueryMeetingMembersListener<ECVideoMeetingMember>() {
            @Override
            public void onQueryMeetingMembers(ECError reason, List<ECVideoMeetingMember> members) {
                if (SdkErrorCode.REQUEST_SUCCESS == reason.errorCode) {
                    // 查询视频会议成员成功
                    return;
                }
                Log.e("ECSDK_Demo", "query meeting member error["
                        + error.errorCode + " ]");

            }
        });

                    

✾ 视频会议发布自己的视频图像—我们假设Tony要发布自己的视频图像,其示例代码如下:

//  获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 调用发布视频会议图像接口
meetingManager.publishSelfVideoFrameInVideoMeeting("Tony所在会议的会议号",
      new OnSelfVideoFrameChangedListener() {
   @Override
   public void onSelfVideoFrameChanged(boolean isPublish, ECError error) {
      if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
         // 发布视频会议图像成功
         // isPublish 表示当前是否是发布视频会议请求
         // isPublish = true表示请求发布视频会议图像接口回调
         return ;
      }

      Log.e("ECSDK_Demo" , "publish sel video error[" + error.errorCode
            + " ]");
   }
});

                    

✾ 视频会议取消发布自己的视频图像—我们假设Tony要取消发布自己的视频图像,其示例代码如下:

//  获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 调用取消发布视频会议图像接口
meetingManager.cancelPublishSelfVideoFrameInVideoMeeting("Tony所在会议的会议号",
      new OnSelfVideoFrameChangedListener() {
         @Override
         public void onSelfVideoFrameChanged(boolean isPublish, ECError error) {
            if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
               // 取消视频会议图像成功
               // isPublish 表示当前是否是发布视频会议请求
               // isPublish = false表示取消发布视频会议图像接口回调
               return ;
            }

            Log.e("ECSDK_Demo" , "cancel publish sel video error[" + error.errorCode
                  + " ]");
         }
      });

                    

✾ 请求视频会议成员图像接口—我们假设Tony要请求成员John的视频图像,其代码如下:

//  获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 调用请求视频会议成员图像接口
// meetingNo :所在的会议号
// meetingPwd :所在的会议密码
// account :需要请求视频的成员账号,比如需要请求John的视频图像则 account 为John账号
// displayView :视频图像显示View
// ip和port :成员视频图像所在的IP地址和端口可以参考ECVideoMeetingMember.java和ECVideoMeetingJoinMsg.java 参数
meetingManager.requestMemberVideoInVideoMeeting("meetingNo", "meetingPwd",
      "account", "displayView ", "ip", 'port',
      new OnMemberVideoFrameChangedListener() {
         @Override
         public void onMemberVideoFrameChangedFailed(ECError error,
                                          boolean isRequest,
                                          String meetingNo,
                                          String account) {

            if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
               // 请求成员视频图像成功
               // isRequest 表示当前是否是对应请求视频图像请求
               // isRequest = true表示对应请求视频图像回调
               // meetingNo 当前视频成员所在的视频会议号
               // account 所请求的视频成员账号
               return ;
            }

            Log.e("ECSDK_Demo" , "request member video error[" + 
                  error.errorCode + " ]");

         }
      });

                    

✾ 取消视频会议成员图像接口—我们假设Tony需要取消视频会议成员John的视频图像,其代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 调用取消视频会议成员图像接口
// meetingNo :所在的会议号
// meetingPwd :所在的会议密码
// account :需要取消视频的成员账号,比如需要请求John的视频图像则 account 为John账号
meetingManager.cancelRequestMemberVideoInVideoMeeting("meetingNo", "meetingPwd",
      "account",  new OnMemberVideoFrameChangedListener() {
              // v5.1.8r版本
         @Override
         public void onMemberVideoFrameChangedFailed(ECError error,
                                          boolean isRequest,
                                          String meetingNo,
                                          String account) {

            if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
               // 取消成员视频图像成功
               // isRequest 表示当前是否是对应请求/取消视频图像请求
               // isRequest = false表示对应取消视频图像回调
               // meetingNo 当前视频成员所在的视频会议号
               // account 所请求的视频成员账号
               return ;
            }

            Log.e("ECSDK_Demo" , "cancel member video error[" + 
                  error.errorCode + " ]");

         }
      });
备注:从v5.1.9r版本开始,将回调方法修改为:
/**
 * 在视频会议中获取或者取消实时获取某一成员视频图像请求失败回调接口
 */
interface OnMemberVideoFrameChangedListener{

	/**
	 * 当调用接口{@link #requestMemberVideoInVideoMeeting(String, String, String, View, String, int, 
	 *                   OnMemberVideoFrameChangedListener)} 实时获取,某一成员
	 * 视频图象以及{@link #cancelRequestMemberVideoInVideoMeeting(String, String, String, 
	 *                  OnMemberVideoFrameChangedListener)} 取消实时获取某一成员
	 * 视频图像时,SDK会通过该回调方法通知应用接口调用结果。
	 * @param isRequest 是否是获取或者是取消获取视频图像请求
	 * @param reason 接口执行失败错误码
	 * @param meetingNo 视频会议号
	 * @param account 执行该操作对应的成员账号
	 */
	void onMemberVideoFrameChanged(boolean isRequest, ECError reason, String meetingNo, String account);
}

                    

✾ 切换/重置当前视频成员图像显示窗口接口—我们假设Tony要将视频成员[John]的视频图像切换到另一个View显示,则代码如下:

// 获取一个会议管理接口对象
ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
// 调用切换/重置当前视频成员图像显示窗口接口
// account :John的账号
// displayView :新的视频图像显示窗口
int ret = meetingManager.resetVideoMeetingWindow("account", "displayView");
if(ret == 0) {
   // 切换请求执行成功
   return ;
}
// 失败[ -1(不支持视频) 170012(账号号为NULL) -3(displayView为NULL) -4(找不到该账号相关的资料)]
Log.e("ECSDK_Demo" , "reset member video window error[" + ret + " ]");

                    

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

@Override
public void onReceiveVideoMeetingMsg(ECVideoMeetingMsg msg) {
   switch (msg.getMsgType()) {
        case JOIN:
            // 视频会议消息类型-有人加入
            ECVideoMeetingJoinMsg joinMsg = (ECVideoMeetingJoinMsg) msg;
            break;
        case EXIT:
            // 视频会议消息类型-有人退出
            ECVideoMeetingExitMsg exitMsg = (ECVideoMeetingExitMsg) msg;
            break;
        case DELETE:
            // 视频会议消息类型-会议结束
            ECVideoMeetingDeleteMsg delMsg = (ECVideoMeetingDeleteMsg) msg;
            break;
        case REMOVE_MEMBER:
            // 视频会议消息类型-成员被移除
            ECVideoMeetingRemoveMemberMsg rMsg =
                    (ECVideoMeetingRemoveMemberMsg) msg;
            break;
        case SWITCH:
            // 视频会议消息类型-主屏切换
            ECVideoMeetingSwitchMsg sMsg = (ECVideoMeetingSwitchMsg) msg;
            break;
        case VIDEO_FRAME_ACTION:
            // 视频会议消息类型-成员图象发布或者取消发布
            ECVideoMeetingVideoFrameActionMsg actionMsg =
                    (ECVideoMeetingVideoFrameActionMsg) msg;
            break;
        case REJECT:
            // 视频会议消息类型-成员拒绝邀请加入会议请求
            ECVideoMeetingRejectMsg rejectMsg = 
                    (ECVideoMeetingRejectMsg) msg;
            break;
        default:
            Log.e("ECSDK_Demo" , "can't handle notice msg "
                    + msg.getMsgType() );
            break;
    }

                    

✾ 视频会议成员图像分辨率改变通知

// 标识对方视频图像到达,本地可以做一些操作,比如显示对方的视频控件等等
@Override
public void onVideoRatioChanged(VideoRatio videoRatio) {
          // 视频通话/视频会议中,对方视频图像分辨率发生改变,回调该接口通知
          // 当前视频分辨率发生改变所属的通话Id或者视频会议号
          String callId = videoRatio.getCallId();
          // 视频图像分辨率改变后的宽
          int width = videoRatio.getWidth();
          // 视频图像分辨率改变后的高
          int height = videoRatio.getHeight();
          // 当前是否是视频会议
          boolean meeting = videoRatio.isMeeting();
          // 如果当前是视频会议则表示发生改变的视频会议成员账号
          // 如果是视频通话,则当前字段为null
          String account = videoRatio.getAccount();
      }

                    

✾ 设置视频会议成员禁言、禁听状态

ECMeetingManager meetingManager = ECDevice.getECMeetingManager();
            if(meetingManager==null){
                return;
            }
           meetingManager.setMemberSpeakListen(account, type, meetingNum, meetingType, new 
           ECMeetingManager.OnSetMemberSpeakListenListener() {
            @Override
            public void onSetMemberSpeakListenResult(ECError error, String meetingNum) {
                
                if(error.errorCode==SdkErrorCode.REQUEST_SUCCESS){
                    
                    Log.d(TAG,"设置成功");
                }else {
                    Log.d(TAG,"设置失败");
                }
            }
        });

                    

✾ 分页获取视频会议列表

     
    /**
	 * ECMeetingManager类
     * 获取会议列表时、支持分页功能
     * @param keywords    查询关键词
     * @param meetingType  查询的会议类型
     * @param match        分页参数
     * @param listener     执行结果回调
     */
     ECMeetingPageMatch match = new ECMeetingPageMatch();
     match.setPage(1);
     match.setPageSize(10);

     ECDevice.getECMeetingManager().listPageMultiMeetingsByType("keywords", 
     ECMeetingManager.ECMeetingType.MEETING_MULTI_VIDEO, match, 
	      new ECMeetingManager.OnListPageMeetingsListener(){

       @Override
       public void onListAllMeetings(ECError ecError, ECMeetingPageMatchResult ecMeetingPageMatchResult, 
			 List list) 	{
				 // 处理消息发送结果
            }
        });
                    

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