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 // 接受会议邀请
- */
- }