Android音视频会议开发说明

1. 音视频会议开发说明

1.1 接口逻辑

接口调用是采取“请求回调”和“通知回调”的方式和服务端交互。用户发出邀请、踢出、解散等操作时,在对应的sdk的方法参数中有“请求回调”方法,请求的结果直接在参数的回调方法中处理。会议中的成员收到服务端发送过来的消息通过“通知回调”接口OnConferenceListener中的onReceivedConferenceNotification接收并进行处理。
  • void modifyLiveChatRoomMemberRole(java.lang.String roomId,
  •                                   java.lang.String userId,
  •                                   ECLiveEnums.ECRole role,
  •                                   ECLiveNotifyWrapper notifyWrapper,
  •                                   ECLiveCallBack.OnControlMemberRoleListener listener)
修改聊天室成员的权限
参数:roomId - 房间号userId - 被修改成员的账号role - 权限枚举notifyWrapper - 通知包装listener - 回调

1.2 业务流程

1) 用户A创建会议,创建成功后加入会议,然后发布语音和视频。
2) 用户A邀请用户B或者用户B主动加入会议,加入成功后,发布语音和视频。
3) 用户A作为主持人可以对所有会议成员静音、踢出等会控操作。
4) 用户A作为主持人即可解散会议,也可退出会议,如果退出会议,第二个加入会议的会变更为临时主持人,以此类推,如果用户A再次加入会议,身份依然是主持人,临时主持人变为普通成员。
5) 普通成员只能退出会议。

1.3 常见业务流程示意图

1.3.1 创建会议

1.3.2 加入会议

1.3.3 禁言成员

1.3.4 关闭成员视频

2. 创建视频视频会议准备工作

注意事项:如果是电话会议以及语音会议可忽略此条。

2.1 设置本地视频采集

注意事项:视频采集建议使用ECCaptureView。
  • if (mCaptureView == null) {
  •     mCaptureView = new ECCaptureView(getApplicationContext());
  • }

  • ECVoIPSetupManager setupManager = ECDevice.getECVoIPSetupManager();
  • mCaptureView.setResolution(352 * 288);
  • setupManager.setCaptureView(mCaptureView);

2.2 设置视频流回调

  • ECVoIPCallManager callMgr = ECDevice.getECVoIPCallManager();
  • callMgr.setOnFrameChangeListener(new ECVoIPCallManager.OnFrameChangeListener() {
  •    @Override
  • /**
  •  * @param account 成员id,如果是null 表明是本地视频,反之是远端视频
  •  */
  • public void onRemoteVideoFrameEvent(String account, byte[] frame, int width, int height, int size) {}

2.3 根据视频流绘制视频

注意事项:绘制视频建议统一使用ECOpenGlView
  • @Override
  • /**
  •  * @param account 成员id,如果是null 表明是本地视频,反之是远端视频
  •  */
  • public void onRemoteVideoFrameEvent(String account, byte[] frame, int width, int height, int size) {
  •     if (TextUtils.isEmpty(account)) {
  •         //绘制本地视频
  •         selfECOpenGlView.getRenderer().renderCapture(frame, width, height, frame.length, size);
  •     } else {
  •         //绘制远端视频
  •         otherECOpenGlView.getRenderer().renderFrame(frame,width,height,size);
  •     }
  • }

3. 会议接口中常用对象

3.1 ECAccountInfo(会议成员对象)

  • //成员的id
  • private String accountId ;
  • //成员的类型  ECAccountType_PhoneNumber, ECAccountType_AppNumber
  • private ECConferenceEnums.ECAccountType ecAccountType;
  • //电话号
  • public String phoneNumber;
  • //名字
  • public String userName;
  • //邀请结果
  • private String inviteResult;
  • //角色id
  • private int roleId;

3.2 ECConferenceMemberInfo(成员信息对象)

  • //名字
  • private String userName ;
  • //扩展字段
  • private String appData  ;
  • //成员的状态 &运算
  • // 0x000000 离线
  • // 0x000001 app在线
  • // 0x000002 正在说话
  • // 0b000100 摄像头打开
  • // 0x000040 可讲状态
  • // 0x000080 可听状态
  • // 0x000100 媒体在线
  • // 0x000200 拒绝加入会议状态
  • // 0x000400 邀请状态
  • public int state ;
  • //成员对象
  • private ECAccountInfo member ;

3.3 ECConferenceInfo(会议信息对象)

  • //会议中成员人数
  • private int memberCount;
  • //会议id
  • private String conferenceId;
  • //会议的创建者
  • private ECAccountInfo creator;
  • //会议的名字
  • private String confName;
  • //会议的创建者密码
  • private String ownerPassword;
  • //会议的密码
  • private String password;
  • //会议的类型   ECConferenceType_Temporary(临时),ECConferenceType_Permanent(永久),
  • private ECConferenceEnums.ECConferenceType confType;
  • //会议成员的信息集合
  • private List<ECConferenceMemberInfo> memberInfos;
  • //会议的最大人数
  • private int maxMember;
  • //会议的状态  &运算 0b00000000  //空闲
  • //                 0b00000001 //进行中。历史记录中:为0,会议未开始就被取消;为1,会议开始过,现已结束
  • //                 0b00000010 //已经锁定(此时禁止 成员加入)
  • public int state;
  • //是否是预约会议 0 否 1 是
  • public int reserveEnable;
  • //会议创建的时间
  • public String createTime;
  • //会议更新的时间
  • public String updateTime;
  • //会议的时长 单位 分钟
  • public long duration;
  • //会议的预约时间
  • public String reserveStartTime;
  • //会议的媒体类型
  • public long mediaType;
  • //会议的结束时间
  • public String endTime;
  • //会议的开始时间
  • public String startTime;
 

4. 会议接口中常用枚举

4.1 ECControlMediaAction

  • /**多个改变*/
  • ECControlMediaAction_MoreChange(-1),
  • /** 禁听 */
  • ECControlMediaAction_CloseListen(0),
  • /** 可听 */
  • ECControlMediaAction_OpenListen(1),
  • /** 禁言 */
  • ECControlMediaAction_CloseSpeak(2),
  • /** 可说 */
  • ECControlMediaAction_OpenSpeak(3),
  • /** 停止观看视频 */
  • ECControlMediaAction_CloseLookVideo(10),
  • /** 观看视频 */
  • ECControlMediaAction_OpenLookVideo(11),
  • /** 停止发布视频 */
  • ECControlMediaAction_StopPublish(12),
  • /** 发布视频 */
  • ECControlMediaAction_PublishVideo(13),

4.2 ECConferenceType

  • /**临时会议*/
  •  ECConferenceType_Temporary ,
  • /**永久会议*/
  •  ECConferenceType_Permanent ,
  • /**预约会议  废弃*/
  •  ECConferenceType_Reservation ,

4.3 ECAccountType

  • /**电话参会*/
  • ECAccountType_PhoneNumber ,
  •  /**app参会*/
  • ECAccountType_AppNumber ,

5. 会议主调业务接口

接口使用前注意事项
1、如果接口中参数是可选,如果不需要该参数,int类型可传为-1,String类型可传为空
2、
  • //  0:自由模式,1:主持人模式,
  • private static int confMode = 1;
  • //  主持人离开会议后,会议是否自动结束,confMode=1时,此字段生效0:否,1:是,默认值1
  • private static int autoClose = 0;
  • //   指定会议主持人ID
  • private static String moderator = "";
  • //    1 是电话号,2是平台
  • private static int inviteType = 2;
  • // 0 是纯落地电话会议  1是多路视频流  2是视频混屏 3是多路 + 混屏 4是实时对讲
  • private static int mediaType = 1;

5.1 创建会议或预约会议

  • //获取confmgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建ECConferenceInfo 对象
  • ECConferenceInfo conferenceInfo = new ECConferenceInfo();
  • //设置会议名字
  • conferenceInfo.setConfName("会议name");
  • //设置会议密码
  • conferenceInfo.setPassword("password");
  • //设置会议最大人数
  • conferenceInfo.setMaxMember(getMaxNum());
  • //设置会议的背景音模式 推荐设置ECConferenceVoiceMode_All
  • conferenceInfo.setVoiceMode(ECConferenceVoiceMode_All);
  • //设置会议的类型
  • //       ECConferenceType_Temporary, 临时会议
  • //       ECConferenceType_Permanent, 永久会议
  • //       ECConferenceType_Reservation; 弃用
  • conferenceInfo.setConfType(ECConferenceType_Temporary);
  • /**
  •  * 创建会议
  •  * 第一个参数为必选,其他均为可选
  •  * @param ECConferenceInfo 会议相关信息
  •  * @param int confMode 会议模式
  •  * @param int autoClose 主持人离开会议后是否自动关闭会议
  •  * @param int moderator 指定主持人ID
  •  * @param string 开始时间
  •  * @param string 邀请的成员json字符串 例如members:[{"memberId":"xxx","memberIdType":1}, {...}, ...]
  •  * @param int duration 会议持续时间,单位:分钟 默认值60
  •  * @param int sendInvitation 到时间之后是否发送入会邀请(对于应用账号发送邀请通知,对于手机号发起邀请呼叫)0:否,1:是;默认值 1
  •  * @param int sendReserveNote 启用预约的会议中使用这个字段,是否给会议成员发送提醒通知(提醒成员被列入预约会议成员) 0:否,1:是 默认值 0
  •  * @param int remindBeforeStart 预约的会议中使用这个字段,会议开始前多久发送提醒通知,单位:分钟.默认值10
  •  * @param int remindBeforeEnd  :预约的会议中使用这个字段,会议结束前多久发送提醒通知,单位:分钟默认值10
  •  * @param int mediaType  : 0:落地电话会议 1:多路视频会议 2:混屏视频会议 3:多路+混屏视频会议 4 实时对讲
  •  * @param int reserveEnable  : 是否启用预约功能,0:不启用,1:启用;预约会议必须传1
  •  * @param OnCreateConferenceListener 创建结果回调 200成功
  •  */
  • conferenceManager.createConference(conferenceInfo, confMode, autoClose, moderator, "", members.toString(),30, -1, 0, 3, -1, mediaType, 0, new ECConferenceManager.OnCreateConferenceListener() {
  •             @Override
  •             public void onCreateConference(ECError ecError, ECConferenceInfo ecConferenceInfo) {
  •                 if (ecError.errorCode == SdkErrorCode.REQUEST_SUCCESS) {
  •                     LogUtil.e(TAG, "create success");
  •                 }
  •             }
  •         }

  • );

5.2 邀请成员加入会议

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //组装成员对象
  • List<ECConferenceMemberInfo> memberList = new ArrayList<>();

  • for (int i = 0; i < 2; i++) {
  •     //创建成员
  •     ECAccountInfo accountInfo = new ECAccountInfo();
  •     //设置被邀请者的名字
  •     accountInfo.setAccountId("别邀请者Id");
  •     //设置被邀请者的类型 ECAccountType_PhoneNumber,电话参会类型
  •     //                 ECAccountType_AppNumber;  app参会类型
  •     accountInfo.setEcAccountType(ECAccountType_AppNumber);
  •     //设置被邀请者的名字
  •     accountInfo.setUserName("被邀请者名字");
  •     //设置成员信息对象
  •     ECConferenceMemberInfo memberInfo = new ECConferenceMemberInfo();
  •     memberInfo.setMember(accountInfo);
  •     memberList.add(memberInfo);
  • }
  • /**
  •  * 邀请成员
  •  * @param List<ECConferenceMemberInfo必选 成员信息集合
  •  * @param string 必选 会议iD
  •  * @param int 可选 callImmediately : 是否立即发起呼叫 1表示立即给邀请者发起呼叫
  •  *            0表示仅在会议中增加成员(一般用户预约会议开始前增加成员)
  •  * @param string 可选 appdata 扩展字段
  •  * @param OnInviteMemberListener 邀请回调 200成功
  •  */
  • conferenceManager.inviteMembers(memberList, "会议号", 1, "",
  •         new ECConferenceManager.OnInviteMemberListener() {
  •             @Override
  •             public void onInviteMembers(ECError reason) {
  •                 LogUtil.e(TAG, "doInviteMobileMember Net" + reason.errorCode);
  •             }
  •         });

5.3 加入会议

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建加入信息对象
  • ECConferenceJoinInfo conferenceJoinInfo = new ECConferenceJoinInfo();
  • //设置加入会议的Id
  • conferenceJoinInfo.setConferenceId(mMeetingNo);
  • //设置加入会议的密码
  • conferenceJoinInfo.setPassword("");
  • //设置自己加入会议的名字
  • conferenceJoinInfo.setUserName("名字");
  • /**
  •  * 加入会议
  •  * @param ECConferenceJoinInfo 必选 加入信息
  •  * @param int 可选 inviteType 邀请者ID类型:1,电话号码;2,平台账户
  •  * @param int 可选 mediaType  : 0:落地电话会议 1:多路视频会议 2:混屏视频会议 3:多路+混屏视频会议
  •  * @param OnJoinOrQuitConferenceListener 加入回调 200成功
  •  */
  • conferenceManager.joinConference(conferenceJoinInfo, inviteType, mediaType, new ECConferenceManager.OnJoinOrQuitConferenceListener() {
  •     @Override
  •     public void onJoinOrQuitConference(ECError reason, ECConferenceInfo info) {
  •         LogUtil.e(TAG, "joinconference " + reason.errorCode);
  •     }

  • });

5.4 拒绝加入

  • //获取confMgr
  • ECConferenceManager manager = ECDevice.getECConferenceManager();
  • /**
  •  * 拒绝加入会议
  •  * @param string 必选 会议Id
  •  * @param string 可选 cause 邀请结果,可以自定义透传错误码
  •  */
  • manager.rejectConferenceInvitation(meetingNo, "邀请结果", new ECConferenceManager.OnRejectInvitationListener() {
  •     @Override
  •     public void onRejectResult(ECError ecError) {
  •         LogUtil.e(TAG, "onRejectResult " + ecError.errorCode);
  •     }

  • });

5.5 发布语音

  • /**
  •  * 发布语音
  •  * @param string 必选 会议Id
  •  * @param int 可选 exclusively : 仅用于实时对讲功能。
  •           1 表示控麦,此时仅允许会中有一个人发布语音,如果已经有人发布语音,此接口调用会返回错误
  •           0 表示发布语音,不考虑其他人语音发布状态 
  •           默认为0
  •  * @param OnPublishVoiceInConferenceListener 发布语音的回调
  •  */
  • conferenceManager.publishVoiceInConference("会议ID", 0, new ECConferenceManager.OnPublishVoiceInConferenceListener() {
  •     @Override
  •     public void onPublishVoiceInConference(ECError ecError) {
  •         LogUtil.e(TAG, "publishVoiceInConference  code is " + ecError.errorCode);
  •     }
  • });

5.6 发布视频

  • /**
  •  * 发布语音
  •  * @param string 必选 会议Id
  •  * @param OnPublishVideoInConferenceListener 发布视频的回调
  •  */
  • conferenceManager.publishVideoInConference("会议ID", new ECConferenceManager.OnPublishVideoInConferenceListener() {
  •     @Override
  •     public void onOnPublishVideoInConference(ECError ecError) {
  •         LogUtil.e(TAG, "publishVideoInConference  code is " + ecError.errorCode);
  •     }
  • });

5.7 停止发布语音

  • /**
  •  * 停止发布语音
  •  * @param string 必选 会议id
  •  * @param int 可选 exclusively     : 仅用于实时对讲功能。
  •  *            1 表示 放麦,放麦成功后其他人才可以控麦
  •               0 表示发布语音,不考虑其他人语音发布状态
  •               默认为0
  •  * @param OnCancelPublishVoiceInConferenceListener 200表示成功
  •  */
  • conferenceManager.cancelVoiceInConference("会议ID", 0, new ECConferenceManager.OnCancelPublishVoiceInConferenceListener() {
  •     @Override
  •     public void onCancelPublishVoiceInConference(ECError ecError) {
  •         LogUtil.e(TAG, "cancelPublishVoice  code is " + ecError.errorCode);
  •     }
  • });

5.8 停止发布视频

  • /**
  •  * 停止发布语音
  •  * @param string 必选 会议id
  •  * @param OnCancelPublishVideoInConferenceListener 200表示成功
  •  */
  • conferenceManager.cancelVideoInConference("会议ID",
  •         new ECConferenceManager.OnCancelPublishVideoInConferenceListener() {
  •             @Override
  •             public void onCancelPublishVideoInConference(ECError ecError) {
  •                 LogUtil.e(TAG, "cancelPublishVideo  code is " + ecError.errorCode);
  •             }
  •         });

5.9 会议成员查询

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //设置获取过滤规则对象
  • ECConferenceFilterInfo info = new ECConferenceFilterInfo();
  • //设置获取第几页 可选参数
  • info.setNumber(1);
  • //设置每页返回的人数 默认20 最大100 可选参数
  • info.setSize(20);

  • /**
  •  * 获取成员列表
  •  * @param string 必选 会议Id
  •  * @param ECConferenceFilterInfo 必选 过滤规则对象
  •  * @param OnGetMembersListener 回调 200成功
  •  */
  • conferenceManager.getMemberListOfConference(meetingNo, info,new ECConferenceManager.OnGetMembersListener() {
  •     @Override
  •     public void onGetMember(ECError ecError, List<ECConferenceMemberInfo> list) {
  •         LogUtil.e(TAG,"onGetMember code is " + ecError.errorCode);
  •     }
  • });

5.10 请求成员视频

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建videoInfo对象
  • ECConferenceVideoInfo videoInfo = new ECConferenceVideoInfo();
  • //必选 设置会议号
  • videoInfo.setConferenceId("会议号");
  • //必选 设置显示的view view的宽高影响视频的分辨率
  • videoInfo.setView(view);
  • //创建成员对象
  • ECAccountInfo accountInfo = new ECAccountInfo();
  • //必选 设置成员id
  • accountInfo.setAccountId(member.getAccount());
  • videoInfo.setMember(accountInfo);
  • /**
  •  * 请求视频
  •  * @param ECConferenceVideoInfo videoinfo对象
  •  * 返回值 0 代表成功
  •  */
  • int requestCode = conferenceManager.requestMemberVideoSSRC(videoInfo);

  • if (requestCode == 0) {
  •     LogUtil.e(TAG, requestCode + "  requestMemberVideoSSRC success");
  • }

5.11 重置成员视频

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建videoinfo对象
  • ECConferenceVideoInfo videoInfo = new ECConferenceVideoInfo();
  • //必选 设置会议id
  • videoInfo.setConferenceId("会议Id");
  • //必选 设置请求的view view的宽高影响视频的分辨率
  • videoInfo.setView(glView);
  • //创建成员对象
  • ECAccountInfo accountInfo = new ECAccountInfo();
  • //设置成员id
  • accountInfo.setAccountId("成员Id");
  • videoInfo.setMember(accountInfo);
  • /**
  •  * 重置成员视频
  •  * @param ECConferenceVideoInfo videoinfo对象
  •  * 返回值 0 代表成功
  •  */
  • int resetCode = conferenceManager.resetMemberVideoSSRC(videoInfo);

  • if (resetCode == 0) {
  •     LogUtil.e(TAG, resetCode + "  resetMemberVideoSSRC success");
  • }

5.12 取消成员视频

  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建videoInfo 对象
  • ECConferenceVideoInfo videoInfo = new ECConferenceVideoInfo();
  • //必选 设置会议Id
  • videoInfo.setConferenceId("会议Id");
  • //创建成员对象
  • ECAccountInfo accountInfo = new ECAccountInfo();
  • //设置成员Id
  • accountInfo.setAccountId("成员Id");
  • videoInfo.setMember(accountInfo);
  • /**
  •  * 取消成员视频
  •  * @param ECConferenceVideoInfo videoinfo对象
  •  * 返回值 0 代表成功
  •  */
  • int cancelCode = conferenceManager.stopRequestMemberVideoSSRC(videoInfo);

  • if (cancelCode == 0) {
  •     LogUtil.e(TAG, cancelCode + "  cancelRequestFrame success");
  • }

5.13 会议媒体控制(开关静音、关闭他人视频等等)

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //设置成员信息列表
  • List<ECConferenceMemberInfo> memberInfoList = new ArrayList<>();
  • //创建成员信息对象
  • ECConferenceMemberInfo conferenceMemberInfo = new ECConferenceMemberInfo();
  • //创建成员
  • ECAccountInfo accountInfo = new ECAccountInfo();
  • //设置成员id
  • accountInfo.setAccountId("被控制成员ID");
  • //设置成员的类型 ECAccountType_PhoneNumber, ECAccountType_AppNumber;
  • accountInfo.setEcAccountType(ECConferenceEnums.ECAccountType.ECAccountType_AppNumber);
  • //设置成员的名字
  • conferenceMemberInfo.setUserName("被控制成员名字");
  • conferenceMemberInfo.setMember(accountInfo);
  • memberInfoList.add(conferenceMemberInfo);
  • /**
  •  * 媒体控制接口
  •  * @param ECConferenceEnums.ECControlMediaAction 必选 action
  •  *      // 禁听
  •         ECControlMediaAction_CloseListen(0)
  •         //可听
  •         ECControlMediaAction_OpenListen(1)
  •         //禁言
  •         ECControlMediaAction_CloseSpeak(2)
  •         //可说
  •         ECControlMediaAction_OpenSpeak(3)
  •         // 停止观看视频
  •         ECControlMediaAction_CloseLookVideo(10)
  •         // 观看视频
  •         ECControlMediaAction_OpenLookVideo(11)
  •         // 停止发布视频
  •         ECControlMediaAction_StopPublish(12)
  •         // 发布视频
  •         ECControlMediaAction_PublishVideo(13)
  •  * @param string 必选 会议id
  •  * @param int 可选 allMember 0: 作用于members参数指定的成员
  •  *            1: 作用于会议中的所有成员(主持人除外)
  •               2: 作用于会议中所有成员(主持人除外),及后续加入会议的成员
  •               取值为2时,仅影响 禁讲、可讲(action=2 action=3)功能
  •  * @param int 可选 unchangable 是否不可被成员更改 0:否,1:是
  •  * @param List<ECConferenceMemberInfo> 必选 成员信息列表
  •  * @param OnConferenceMediaControlListener 200成功
  •  */
  • conferenceManager.conferenceMediaControl(action, meetingNo, isAll, 0,
  •         memberInfoList, new ECConferenceManager.OnConferenceMediaControlListener() {
  •             @Override
  •             public void onConferenceMediaControl(ECError ecError) {
  •                 LogUtil.e(TAG, "onConferenceMediaControl isall = " + isAll + " ecerror " + ecError.errorCode);
  •             }
  •         });

5.14 踢出成员

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //设置成员信息集合
  • List<ECConferenceMemberInfo> memberInfoList = new ArrayList<>();
  • //创建成员信息对象
  • ECConferenceMemberInfo conferenceMemberInfo = new ECConferenceMemberInfo();
  • //创建成员对象
  • ECAccountInfo accountInfo = new ECAccountInfo();
  • //设置被踢出成员的ID
  • accountInfo.setAccountId("被踢出成员的ID");
  • //设置成员类型   ECAccountType_PhoneNumber,ECAccountType_AppNumber;
  • accountInfo.setEcAccountType(ECConferenceEnums.ECAccountType.ECAccountType_AppNumber);
  • conferenceMemberInfo.setMember(accountInfo);
  • memberInfoList.add(conferenceMemberInfo);
  • /**
  •  * 踢出成员
  •  * @param List<ECConferenceMemberInfo> 必选 成员信息集合
  •  * @param string 必选 会议id
  •  * @param string 可选 appdata 扩展字段
  •  */
  • conferenceManager.kickMembers(memberInfoList, "会议ID", "", "", new ECConferenceManager.OnKickMemberListener() {
  •     @Override
  •     public void onKickMembers(ECError ecError) {
  •         LogUtil.e(TAG, "onKickMembers code is " + ecError.errorCode);
  •     }
  • });

5.15 锁定会议

  • //获取confMgr
  • ECConferenceManager manager = ECDevice.getECConferenceManager();
  • /**
  •  * 锁定会议
  •  * @param string 必选 会议ID
  •  * @param int 0锁定 1解锁
  •  */
  • manager.lockConference("会议号", lockAction, new ECConferenceManager.OnLockConferenceListener() {
  •     @Override
  •     public void onLockConference(ECError ecError) {
  •         LogUtil.e(TAG, "onLockConference code is " + ecError.errorCode);
  •     }
  • });

5.16 解散会议或取消会议

  • //获取confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建会议信息对象
  • ECConferenceInfo conferenceInfo = new ECConferenceInfo();
  • //设置会议id 必选
  • conferenceInfo.setConferenceId("会议id");
  • /**
  •  * 解散会议
  •  * @param ECConferenceInfo 必选会议信息
  •  * @param OnDeleteConferenceListener 200 成功
  •  */
  • conferenceManager.deleteConference(conferenceInfo, new ECConferenceManager.OnDeleteConferenceListener() {
  •     @Override
  •     public void onDeleteConference(ECError ecError) {
  •         LogUtil.e(TAG, "ecerror onDeleteConference " + ecError.errorCode);
  •     }
  • });

5.17 退出会议

  • //设置confMgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • /**
  •  * 退出会议
  •  * @param string 会议Id
  •  * @param OnJoinOrQuitConferenceListener 200成功
  •  */
  • conferenceManager.quitConference(meetingNo, new ECConferenceManager.OnJoinOrQuitConferenceListener() {
  •     @Override
  •     public void onJoinOrQuitConference(ECError ecError, ECConferenceInfo info) {
  •         LogUtil.e(TAG, " onJoinOrQuitConference " + ecError.errorCode);
  •     }
  • });

5.18 查询指定会议

  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • /**
  •  * 查询指定会议  只能查询进行中的会议 或者 预约会议  历史会议 使用 getHistoryConfListByAccount 查询
  •  * @param string 必选 会议id
  •  * @param OnGetConferenceListener 200 成功
  •  */
  • conferenceManager.getConference(mMeetingNo, new ECConferenceManager.OnGetConferenceListener() {
  •     @Override
  •     public void onGetConference(ECError ecError, ECConferenceInfo ecConferenceInfo) {
  •         LogUtil.e(TAG, "queryConference result is " + ecError.errorCode);
  •     }
  • });

5.19 查询进行中的会议以及预约会议列表

  • ECConferenceManager ecConferenceManager = ECDevice.getECConferenceManager();
  • //创建条件对象
  • ECConferenceCondition ecconferenceCondition = new ECConferenceCondition();
  • //必选 设置查询成员id
  • ecconferenceCondition.setMemberId("成员Id");
  • //必选 设置成员类型  1: 电话号码,2: 应用账号
  • ecconferenceCondition.setIdType(2);
  • //可选 设置查询会议的类型ECConferenceType_Temporary(临时会议),ECConferenceType_Permanent(永久会议),
  • ecconferenceCondition.setConfType(ECConferenceEnums.ECConferenceType.ECConferenceType_Temporary);
  • //可选 设置查询与自己相关的会议类型 1: 用户创建的会议,2:用户参与的会议,3:用户相关的会议(创建或者参与)
  • ecconferenceCondition.setSearchType(ECConferenceEnums.ECSearchType.ABOUT);
  • //设置查询过滤对象
  • ECConferenceFilterInfo ecConferenceFilterInfo = new ECConferenceFilterInfo();
  • //设置获取第几页的内容
  • ecConferenceFilterInfo.setNumber(number);
  • //设置每页返回的会议个数
  • ecConferenceFilterInfo.setSize(size);
  • /**
  •  * 查询进行中的会议以及预约会议
  •  * @param ECConferenceCondition 必选 查询条件对象
  •  * @param ECConferenceFilterInfo 必选 查询过滤对象
  •  * @param OnGetConferenceListWithCondition 200 成功
  •  */
  • ecConferenceManager.getConferenceListWithCondition(ecconferenceCondition, ecConferenceFilterInfo, new ECConferenceManager.OnGetConferenceListWithCondition() {
  •     @Override
  •     public void OnGetConferenceListWithCondition(ECError ecError, List<ECConferenceInfo> list) {
  •         LogUtil.e(TAG,"OnGetConferenceListWithCondition code is " + ecError.errorCode);
  •     }
  • });

5.20 查询历史会议列表或指定历史会议

  • ECConferenceManager ecConferenceManager = ECDevice.getECConferenceManager();
  • //创建过滤规则
  • ECConferenceFilterInfo ecConferenceFilterInfo = new ECConferenceFilterInfo();
  • //设置获取第几页的内容
  • ecConferenceFilterInfo.setNumber(number);
  • //设置每页返回的会议个数
  • ecConferenceFilterInfo.setSize(size);
  • /**
  •  * 获取历史会议 其中包括 已结束的会议和已取消的会议
  •  * @param string 可选 createTimeBegin 会议创建时间起始点
  •  * @param string 可选 createTimeEnd   会议创建时间终点
  •  * @param int 可选 confType 0:临时会议;1:永久会议。默认值:0
  •  * @param int 可选 searchByMember 1: 用户创建的会议,2:用户参与的会议,3:用户相关的会议(创建或者参与)
  •  * @param ECConferenceFilterInfo 必选 过滤条件
  •  * @param string 可选 会议id   如果设置这个参数 说明 要查询指定的会议
  •  * @param OnGetConferenceListWithCondition 200 成功
  •  */
  • ecConferenceManager.getHistoryConferenceListWithCondition("", "", 0, 3, ecConferenceFilterInfo, confId, new ECConferenceManager.OnGetConferenceListWithCondition() {
  •     @Override
  •     public void OnGetConferenceListWithCondition(ECError ecError, List<ECConferenceInfo> list) {
  •         LogUtil.e(TAG,"OnGetConferenceListWithCondition code is " + ecError.errorCode);
  •     }
  • });

5.21 更新会议

  • //获取confmgr
  • ECConferenceManager conferenceManager = ECDevice.getECConferenceManager();
  • //创建ECConferenceInfo 对象
  • ECConferenceInfo conferenceInfo = new ECConferenceInfo();
  • //设置会议名字
  • conferenceInfo.setConfName("会议name");
  • //设置会议密码
  • conferenceInfo.setPassword("password");
  • //设置会议最大人数
  • conferenceInfo.setMaxMember(getMaxNum());
  • //设置会议的背景音模式 推荐设置ECConferenceVoiceMode_All
  • conferenceInfo.setVoiceMode(ECConferenceVoiceMode_All);
  • //设置会议的类型
  • //       ECConferenceType_Temporary, 临时会议
  • //       ECConferenceType_Permanent, 永久会议
  • conferenceInfo.setConfType(ECConferenceType_Temporary);
  • /**
  •  * 更新会议
  •  * 第一个参数为必选,其他均为可选
  •  * @param ECConferenceInfo 会议相关信息
  •  * @param int confMode 会议模式
  •  * @param int autoClose 主持人离开会议后是否自动关闭会议
  •  * @param int moderator 指定主持人ID
  •  * @param string startTime 开始时间
  •  * @param string 邀请的成员json字符串 例如members:[{"memberId":"xxx","memberIdType":1}, {...}, ...]
  •  * @param int duration 会议持续时间,单位:分钟 默认值60
  •  * @param int sendInvitation 到时间之后是否发送入会邀请(对于应用账号发送邀请通知,对于手机号发起邀请呼叫)0:否,1:是;默认值 1
  •  * @param int sendReserveNote 启用预约的会议中使用这个字段,是否给会议成员发送提醒通知(提醒成员被列入预约会议成员) 0:否,1:是 默认值 0
  •  * @param int remindBeforeStart 预约的会议中使用这个字段,会议开始前多久发送提醒通知,单位:分钟.默认值10
  •  * @param int remindBeforeEnd  :预约的会议中使用这个字段,会议结束前多久发送提醒通知,单位:分钟默认值10
  •  * @param int mediaType    : 0:落地电话会议 1:多路视频会议 2:混屏视频会议 3:多路+混屏视频会议
  •  * @param int reserveEnable  : 是否启用预约功能,0:不启用,1:启用
  •  * @param onUpdateConference 创建结果回调 200成功
  •  */
  • conferenceManager.updateConference(conferenceInfo, confMode, autoClose, moderator, startTime,
  •         members.toString(), duration, -1, -1, -1, -1, -1, new ECConferenceManager.OnUpdateConferenceListener() {
  •             @Override
  •             public void onUpdateConference(ECError ecError) {
  •                LogUtil.e(TAG,"onUpdateConference code is " + ecError.errorCode);
  •             }
  •         });

6. 会议回调业务接口

6.1 配置接口

注意事项:建议sdk初始化成功后,就配置好接口。
  • ECDevice.getECConferenceManager().setConferenceListener(new OnConferenceListener() {
  •     @Override
  •     public void onReceivedConferenceNotification(ECConferenceNotification ecConferenceNotification) {      
  •     }
  • });

6.2 接口中回调类型说明

6.2.1 邀请回调

  • if (ecConferenceNotification instanceof ECConferenceInviteNotification) {
  •     ECConferenceInviteNotification notification = (ECConferenceInviteNotification) ecConferenceNotification;
  •     if (notification.callImmediately == 0) {
  •        //一般是预约会议中邀请别人,收到邀请后 建议不立即加入会议,只发送通知
  •     } else{
  •         String confId = notification.getConferenceId();
  •         String pwd = notification.getPassword();
  •         //......
  •         //一般是立即会议中邀请,收到邀请后可以加入会议
  •     }
  • }
 
通知中包含参数
  • public ECAccountInfo inviter;

  • public String creatorId;

  • public int creatorIdType;

  • public String conferenceId;

  • public String confName;

  • public String password;

  • public String appData;

  • public int reserveEnable;

  • public String creatorName;

  • public String inviterName;

  • public int callImmediately;

  • public String startTime;

  • public int state;

  • public long inviteTime;

  • public int mediaType;

6.2.2 成员加入回调

注意事项:如果进行中的会议邀请别人,会立即收到此回调,但此时对象可能并未真正加入,判断被邀请者是否真正加入,是根据成员信息变更通知来判断,如果成员信息变更通知中携带的state表明改成员媒体在线,那么说明成员已加入会议,这时候再请求对方视频等操作
  • if (ecConferenceNotification instanceof ECConferenceJoinNotification) {
  •     ECConferenceJoinNotification joinNotification = (ECConferenceJoinNotification) ecConferenceNotification;
  •     List<ECConferenceMemberInfo> membersList = joinNotification.getMembersList();

6.2.3 成员退出回调

  • if (ecConferenceNotification instanceof ECConferenceQuitNotification) {
  •     ECConferenceQuitNotification quitNotification = (ECConferenceQuitNotification) ecConferenceNotification;
  •     ECAccountInfo member = quitNotification.member;

6.2.4 会议解散回调

  • if (ecConferenceNotification instanceof ECConferenceDeleteNotification) {
  •    //会议被解散
  • }

6.2.5 成员被移除回调

  • if (ecConferenceNotification instanceof ECConferenceKickOutNotification) {
  •     // 成员被移除
  •     ECConferenceKickOutNotification kickOutNotification = (ECConferenceKickOutNotification) ecConferenceNotification;
  •     List<ECConferenceMemberInfo> kickedMembers = kickOutNotification.kickedMembers;

6.2.6 成员信息变更通知

  • if (ecConferenceNotification instanceof ECConferenceMemberInfoNotification) {
  •     // 成员信息变更通知
  •     ECConferenceMemberInfoNotification memberInfoNotification = (ECConferenceMemberInfoNotification) ecConferenceNotification;
  •     List<ECConferenceMemberInfo> members = memberInfoNotification.getMembers();
  •     ECConferenceEnums.ECControlMediaAction action = memberInfoNotification.getAction();
  •            /** ECControlMediaAction_CloseListen(0),
  •             ECControlMediaAction_OpenListen(1),
  •             ECControlMediaAction_CloseSpeak(2),
  •             ECControlMediaAction_OpenSpeak(3),
  •             ECControlMediaAction_CloseLookVideo(10),
  •             ECControlMediaAction_OpenLookVideo(11),
  •             ECControlMediaAction_StopPublish(12),
  •             ECControlMediaAction_PublishVideo(13),
  •             ECControlMediaAction_CloseLookScreen(20),
  •             ECControlMediaAction_OpenLookScreen(21),
  •             ECControlMediaAction_CloseScreen(22),
  •             ECControlMediaAction_OpenScreen(23),
  •             ECControlMediaAction_SetRole(50),
  •             ECControlMediaAction_UserInfo(51);
  •             */
  • }

6.2.7 媒体控制回调

  • if (ecConferenceNotification instance of ECConferenceMediaControlNotification) {
  •     ECConferenceMediaControlNotification info = (ECConferenceMediaControlNotification) ecConferenceNotification;
  •     ECConferenceEnums.ECControlMediaAction action = info.action;

6.2.8 邀请成员结果通知

  • if (ecConferenceNotification instance of ECConferenceInviteResultNotification) {
  •     // 成员拒绝邀请加入会议请求
  •     ECConferenceInviteResultNotification inviteResultNotification = (ECConferenceInviteResultNotification) ecConferenceNotification;
  •     String result = inviteResultNotification.getResult();   

6.2.9 会议信息更新通知

  • if (ecConferenceNotification instance of ECConferenceUpdateNotification) {
  •     ECConferenceUpdateNotification notification = (ECConferenceUpdateNotification) ecConferenceNotification;
  •     int action = notification.getAction();
  •     /**
  •      kControlForbidListen = 0, // 禁听
  •      kControlAllowSListen = 1, // 可听
  •      kControlForbidSpeak = 2, // 禁讲(言)
  •      kControlAllowSpeak = 3, // 可讲(言)
  •      kControlVoiceTotal,

  •      kControlForbidWatchCamera = 10,
  •      kControlAllowSWatchCamera = 11,
  •      kControlForbidShareCamera = 12, // 取消发布视频
  •      kControlAllowShareCamera = 13, // 发布视频
  •      kControlCameraTotal,

  •      kControlForbidWatchScreen = 20,
  •      kControlAllowSWatchScreen = 21,
  •      kControlForbidShareScreen = 22, // 取消发布桌面共享
  •      kControlAllowShareScreen = 23, // 发布桌面共享
  •      kControlScreenTotal,

  •      kControlForbidWatchWhiteboard = 30,
  •      kControlAllowSWatchWhiteboard = 31,
  •      kControlForbidShareWhiteboard = 32,
  •      kControlAllowShareWhiteboard = 33,
  •      kControlForbidOperateWhiteboard = 34,
  •      kControlAllowOperateWhiteboard = 35,
  •      kControlWhiteboardTotal,

  •      kControlStartSpeaking = 40,
  •      kControlStopSpeaking = 41,
  •      kControlSpeakingTota,

  •      kControlSetRole = 50, // 成员角色改变时,发出此通知,如调用 设置会议成员角色
  •      kControlUserInfo = 51, // 成员的 state/username/appdata 等数据改变时,发出此通知,如调用 更新会议成员信息 或 成员媒体断开 

  •      KControlConfLockUnlock = 53 // 会议锁定状态更新

  •      KControlConfTopic = 54 // 会议议题更新
  •      KControlConfStartTime = 55 // 会议开始时间更新

  •      KControlUserRejectInvitation = 56 // 拒绝会议邀请
  •      KControlUserAcceptInvitation = 57 // 接受会议邀请
  •      */
  •      }