智慧服务,成就美好体验 项目咨询

主页 > 服务与支持 > 开发平台 > 客户端SDK参考 > Android Native SDK > 会议 会议管理

入门使用

会议管理

更新时间:2019-11-20

创建预约会议

描述

用户创建预约会议。

前提条件

  • 鉴权登录成功。
  • 会议环境参数已设置。

业务流程

图1 预约会议流程 
  1. UI调用TsdkConferenceManager对象的bookConference()方法预约会议,参数类型为TsdkBookConfInfo类。

     

    说明: 

    在创建TsdkBookConfInfo对象后,需要从该对象调用方法来设置必填参数和可选参数。

    • 在预约会议时,会议方数(size)、会议类型(confType)、媒体类型(confMediaType)和与会者信息(attendeeList&attendeeNum)必选,其他参数可选。
    • 按具体需求填写会议方数,当实际与会者数目多于设置的方数时,服务会自动扩大会议方数,当填写方数小于3时,服务器默认会议方数为3。
    • 预约会议,会议类型应选TsdkConfType.TSDK_E_CONF_RESERVED。
    • 服务器默认时间为UTC时间,在预约时需将预约时间转换为UTC时间。
    代码示例:
    //Java code
    public int bookConference(BookConferenceInfo bookConferenceInfo)
    {
        Log.i(TAG, "bookConference.");
    
        if (bookConferenceInfo == null)
        {
            Log.e(TAG, "booKConferenceInfo obj is null");
            return -1;
        }
    
        TsdkBookConfInfo bookConfInfo = new TsdkBookConfInfo();
    
        if(bookConferenceInfo.isInstantConference())
        {
            bookConfInfo.setConfType(TsdkConfType.TSDK_E_CONF_INSTANT);
            bookConfInfo.setIsAutoProlong(1);
        }
        else 
        {
            bookConfInfo.setConfType(TsdkConfType.TSDK_E_CONF_RESERVED);
        }
    
        bookConfInfo.setSubject(bookConferenceInfo.getSubject());
        bookConfInfo.setConfMediaType(bookConferenceInfo.getMediaType());
        bookConfInfo.setStartTime(bookConferenceInfo.getStartTime());
        bookConfInfo.setDuration(bookConferenceInfo.getDuration());
        bookConfInfo.setSize(bookConferenceInfo.getSize());
        bookConfInfo.setIsAutoRecord(bookConferenceInfo.getIs_auto()? 1:0);
        bookConfInfo.setRecordMode(bookConferenceInfo.getRecordType());
    
        List<TsdkAttendeeBaseInfo> attendeeList = ConfConvertUtil.memberListToAttendeeList(bookConferenceInfo.getMemberList());
        bookConfInfo.setAttendeeList(attendeeList);
        bookConfInfo.setAttendeeNum(attendeeList.size());
    
        //The other parameters are optional, using the default value
        bookConfInfo.setLanguage(TsdkConfLanguage.TSDK_E_CONF_LANGUAGE_EN_US);
    
        int result = TsdkManager.getInstance().getConferenceManager().bookConference(bookConfInfo);
        if (result != 0)
        {
            Log.e(TAG, "bookReservedConf result ->" + result);
            return  result;
        }
    
        return 0;
    }
    
     

     

  2. SDK在收到服务器返回的会议预约结果响应后,通过TsdkNotify对象中的onEvtBookConfResult()方法向UI上报预约会议结果,对应的结果参数为预约会议结果和会议信息。

     

    说明: 

    如果会议成功预约,其他用户可以通过查询会议列表或其他第三方方式获取该会议的信息。

    代码示例:
    //Java code
    public void handleBookConfResult(TsdkCommonResult result, TsdkConfBaseInfo confBaseInfo){
        Log.i(TAG, "onBookReservedConfResult");
        if ((result == null) || (confBaseInfo == null))
        {
            Log.e(TAG, "book conference is failed, unknown error.");
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_FAILED, -1);
            return;
        }
        if (result.getResult() != TupConfParam.CONF_RESULT.TUP_SUCCESS)
        {
            Log.e(TAG, "book conference is failed, return ->" + result.getResult());
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_FAILED, result.getResult());
            return;
        }
        Log.i(TAG, "book conference is success.");
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_SUCCESS, result.getResult());
    }
    
     

     

注意事项

无。

创建即时会议

描述

用户创建立即开始的会议,会议创建成功后,会议创建者自动入会,其他与会者将收到入会邀请。

前提条件

  • 鉴权登录成功。
  • 会议环境参数已设置。

业务流程

图2 创建立即会议流程 
  1. UI调用TsdkConferenceManager对象中的bookConference()方法创建立即会议。参数类型为TsdkBookConfInfo类。

     

    说明: 

    在创建TsdkBookConfInfo对象后,需要从该对象调用方法来设置必填参数和可选参数。

    • 在预约会议时,会议方数(size)、会议类型(confType)、媒体类型(confMediaType)和与会者信息(attendeeList&attendeeNum)必选,其他参数可选。
    • 按具体需求填写会议方数,当实际与会者数目多于设置的方数时,服务会自动扩大会议方数,当填写方数小于3时,服务器默认会议方数为3。
    • 预约会议,会议类型应选TsdkConfType.TSDK_E_CONF_INSTANT。
    • 服务器默认时间为UTC时间,在预约时需将预约时间转换为UTC时间。
    代码示例:
    //Java code
    public int bookConference(BookConferenceInfo bookConferenceInfo)
    {
        Log.i(TAG, "bookConference.");
    
        if (bookConferenceInfo == null)
        {
            Log.e(TAG, "booKConferenceInfo obj is null");
            return -1;
        }
    
        TsdkBookConfInfo bookConfInfo = new TsdkBookConfInfo();
    
        if(bookConferenceInfo.isInstantConference())
        {
            bookConfInfo.setConfType(TsdkConfType.TSDK_E_CONF_INSTANT);
            bookConfInfo.setIsAutoProlong(1);
        }
        else 
        {
            bookConfInfo.setConfType(TsdkConfType.TSDK_E_CONF_RESERVED);
        }
    
        bookConfInfo.setSubject(bookConferenceInfo.getSubject());
        bookConfInfo.setConfMediaType(bookConferenceInfo.getMediaType());
        bookConfInfo.setStartTime(bookConferenceInfo.getStartTime());
        bookConfInfo.setDuration(bookConferenceInfo.getDuration());
        bookConfInfo.setSize(bookConferenceInfo.getSize());
        bookConfInfo.setIsAutoRecord(bookConferenceInfo.getIs_auto()? 1:0);
        bookConfInfo.setRecordMode(bookConferenceInfo.getRecordType());
    
        List<TsdkAttendeeBaseInfo> attendeeList = ConfConvertUtil.memberListToAttendeeList(bookConferenceInfo.getMemberList());
        bookConfInfo.setAttendeeList(attendeeList);
        bookConfInfo.setAttendeeNum(attendeeList.size());
    
        //The other parameters are optional, using the default value
        bookConfInfo.setLanguage(TsdkConfLanguage.TSDK_E_CONF_LANGUAGE_EN_US);
    
        int result = TsdkManager.getInstance().getConferenceManager().bookConference(bookConfInfo);
        if (result != 0)
        {
            Log.e(TAG, "bookReservedConf result ->" + result);
            return  result;
        }
    
        return 0;
    }
    
     

     

  2. SDK在收到服务器返回的立即会议创建成功后,通过TsdkNotify对象中的onEvtBookConfResult()方法向UI上报会议创建结果通知。

     

    代码示例:
    //Java code
    public void handleBookConfResult(TsdkCommonResult result, TsdkConfBaseInfo confBaseInfo){
        Log.i(TAG, "onBookReservedConfResult");
        if ((result == null) || (confBaseInfo == null))
        {
            Log.e(TAG, "book conference is failed, unknown error.");
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_FAILED, -1);
            return;
        }
        if (result.getResult() != TupConfParam.CONF_RESULT.TUP_SUCCESS)
        {
            Log.e(TAG, "book conference is failed, return ->" + result.getResult());
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_FAILED, result.getResult());
            return;
        }
        Log.i(TAG, "book conference is success.");
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.BOOK_CONF_SUCCESS, result.getResult());
    }
    
     

     

  3. SDK在收到服务器返回的加入会议响应后,通过TsdkNotify对象中的onEvtJoinConfResult()方法向UI上报会议加入结果事件。并返回会议对象TsdkConference,后续会控时使用。此时UI可跳转至会议界面。

     

    说明: 
    1. 在加入会议时,会请求会议权限,若请求失败,则通过TsdkNotify对象中的onEvtRequestConfRightFailed()方法向UI上报会议权限请求失败通知,UI提示申请会控权限失败,若请求成功,则不上报。
    2. 若应用程序是以多流的方式(SVC)成功加入会议,则此结果通知中会携带SVC信息,包含 isSvcConf (是否多流会议)、svcLabelCount(可使用的多流Label数) 和 svcLabel (多流Label 表),应用程序应保存多流“Label”信息,用于后继流程中“绑定SVC视频窗口”、"选看SVC与会者"和“设置SVC窗口和与会者关系”等操作。
    代码示例:
    //Java code
    public void handleJoinConfResult(TsdkConference tsdkConference, TsdkCommonResult commonResult, TsdkJoinConfIndInfo tsdkJoinConfIndInfo
        Log.i(TAG, "handleJoinConfResult");
        if ((tsdkConference == null) || (commonResult == null)) {
            return;
        }
        int result = commonResult.getResult();
        if (result == 0)
        {
            this.currentConference = tsdkConference;
            this.memberList = null;
            this.self = null;
            TsdkCall tsdkCall = tsdkConference.getCall();
            if (null != tsdkCall) {
                Session newSession = CallMgr.getInstance().getCallSessionByCallID(tsdkCall.getCallInfo().getCallId());
                if (null == newSession) {
                    newSession = new Session(tsdkCall);
                    CallMgr.getInstance().putCallSessionToMap(newSession);
                }
                if (tsdkCall.getCallInfo().getIsVideoCall() == 1) {
                    VideoMgr.getInstance().initVideoWindow(tsdkCall.getCallInfo().getCallId());
                }
            }
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.JOIN_CONF_SUCCESS, tsdkConference.getHandle() + "");
        }
        else
        {
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.JOIN_CONF_FAILED, result);
        }
    }
    
     

     

  4. SDK收到会议状态刷新通知,通过TsdkNotify对象中的onEvtInfoAndStatusUpdate()方法向UI上报会议信息及会议状态刷新事件,UI刷新会议状态和成员列表。

     

    说明: 

    详细流程参见会议信息及会议状态更新描述。

     

  1. 若会议包含数据会议能力,SDK通过TsdkNotify对象中的onEvtGetDataconfParamResult()方法向UI上报获取数据会议参数结果。

     

    代码示例:
    //Java code
    public void  handleGetDataConfParamsResult(TsdkConference tsdkConference, TsdkCommonResult commonResult){
        Log.i(TAG, "handleJoinConfResult");
        if ((tsdkConference == null) || (commonResult == null)) {
            return;
        }
        int result = commonResult.getResult();
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.GET_DATA_CONF_PARAM_RESULT, result);
    }
    
     

     

  2. 此时UI可选择自动加入或用户选择加入数据会议,调用TsdkConference对象中的joinDataConference()方法加入数据会议。

     

    代码示例:
    //Java code
    public int joinDataConf()
    {
        if (null == currentConference)
        {
            Log.e(TAG,  "join data conf failed, currentConference is null ");
            return -1;
        }
    
        int result =  currentConference.joinDataConference();
    
        return result;
    }
    
     

     

  3. SDK在收服务器加入数据会议响应后,通过TsdkNotify对象中的onEvtJoinDataConfResult()方法向UI上报数据会议加入结果事件。若成功,则UI刷新界面,提示加入数据会议成功,若失败,则提示加入数据会议失败。

     

    说明: 

    在加入数据会议后,通过TsdkNotify对象中的onEvtInfoAndStatusUpdate()方法向UI上报会议信息及状态更新事件,UI刷新会议状态和成员列表。

    代码示例:
    //Java code
    public void  handleJoinDataConfResult(TsdkConference tsdkConference, TsdkCommonResult commonResult){
        Log.i(TAG, "handleJoinDataConfResult");
        if ((tsdkConference == null) || (commonResult == null)) {
            return;
        }
        int result = commonResult.getResult();
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.JOIN_DATA_CONF_RESULT, result);
    }
    
     

     

注意事项

无。

查询会议列表

描述

用户查询自己“创建”的和“待参加”的预约会议信息。

前提条件

  • 鉴权登录成功。
  • 会议环境参数已设置。

业务流程

图3 查询会议列表流程 
  1. UI调用TsdkConferenceManager对象的queryConferenceList()查询会议列表,参数为获取会议列表信息,参数类型为TsdkQueryConfListReq类。

     

    说明: 

    在创建TsdkQueryConfListReq对象后,需要从该对象调用方法来设置参数。

    • 会议权限(confRight),使用setConfRight()方法设置,参考枚举类ConfctrlConfRight,用于指定要查询的会议权限类型,包含查询创建的会议、待参加的会议或创建和待参加的会议,可选填。
    • 指定返回的页面索引(pageIndex),使用setPageIndex()方法设置,参数类型为int,取值从1开始,建议与应用程序与会议列表的页签对应,必须要有明确值。
    • 指定每页返回的记录数(pageSize),使用setPageSize()方法设置,参数类型为int,建议与应用程序会议列表个数相同,必须要有明确值。
    • 是否包含已结束的会议(isIncludeEnd),使用setIsIncludeEnd()方法设置,参数类型为int。
    • 返回来的时间为UTC时间,UI进行页面呈现之前需进行时间处理。
    代码示例:
    //Java code
    public int queryMyConfList(ConfConstant.ConfRight myRight)
    {
        Log.i(TAG, "query my conf list.");
        TsdkConfRight tupConfRight;
        switch (myRight)
        {
            case MY_CREATE:
                tupConfRight = TsdkConfRight.TSDK_E_CONF_RIGHT_CREATE;
                break;
            case MY_JOIN:
                tupConfRight = TsdkConfRight.TSDK_E_CONF_RIGHT_JOIN;
                break;
            case MY_CREATE_AND_JOIN:
                tupConfRight = TsdkConfRight.TSDK_E_CONF_RIGHT_CREATE_JOIN;
                break;
            default:
                tupConfRight = TsdkConfRight.TSDK_E_CONF_RIGHT_CREATE_JOIN;
                break;
        }
        TsdkQueryConfListReq queryReq = new TsdkQueryConfListReq();
        queryReq.setPageSize(ConfConstant.PAGE_SIZE);
        queryReq.setPageIndex(1);    
        queryReq.setIsIncludeEnd(0); 
        queryReq.setConfRight(tupConfRight);
        int result = TsdkManager.getInstance().getConferenceManager().queryConferenceList(queryReq);
        if (result != 0)
        {
            Log.e(TAG, "getConfList result ->" + result);
            return  result;
        }
        return 0;
    }
    
     

     

  2. SDK在收到服务器返回的查询会议列表响应后,通过TsdkNotify对象中的onEvtQueryConfListResult()方法向UI上报查询会议列表结果,参数包括会议列表信息和操作结果。

     

    说明: 
    • 查询会议列表只返回会议的概要信息,如需查询会议详情(包括与会者信息),需要查询会议详情
    • 会议的主席密码需要查询会议详情获取。
    代码示例:
    //Java code
    public void handleQueryConfListResult(TsdkCommonResult result, TsdkConfListInfo confList){
        Log.i(TAG, "onGetConfListResult");
        if (result == null)
        {
            Log.e(TAG, "get conference list is failed, unknown error.");
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_LIST_FAILED, -1);
            return;
        }
        else if (result.getResult() != 0)
        {
            Log.e(TAG, "get conference list is failed, return ->" + result.getReasonDescription());
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_LIST_FAILED, result.getResult());
            return;
        }
        List<ConfBaseInfo> confBaseInfoList = new ArrayList<>();
        List<TsdkConfBaseInfo> tsdkConfBaseInfos = confList.getConfInfoList();
        if (null != tsdkConfBaseInfos) {
            for (TsdkConfBaseInfo confInfo : tsdkConfBaseInfos) {
                ConfBaseInfo confBaseInfo = new ConfBaseInfo();
                confBaseInfo.setSize(confInfo.getSize());
                confBaseInfo.setConfID(confInfo.getConfId());
                confBaseInfo.setSubject(confInfo.getSubject());
                confBaseInfo.setAccessNumber(confInfo.getAccessNumber());
                confBaseInfo.setChairmanPwd(confInfo.getChairmanPwd());
                confBaseInfo.setGuestPwd(confInfo.getGuestPwd());
                confBaseInfo.setSchedulerNumber(confInfo.getScheduserAccount());
                confBaseInfo.setSchedulerName(confInfo.getScheduserName());
                confBaseInfo.setStartTime(confInfo.getStartTime());
                confBaseInfo.setEndTime(confInfo.getEndTime());
                confBaseInfo.setMediaType(ConfConvertUtil.convertConfMediaType(confInfo.getConfMediaType()));
                confBaseInfo.setConfState(ConfConvertUtil.convertConfctrlConfState(confInfo.getConfState()));
                confBaseInfoList.add(confBaseInfo);
            }
        }
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_LIST_SUCCESS, confBaseInfoList);
    }
    
     

     

注意事项

无。

查询会议详情

描述

用户查询指定会议的详细信息。

前提条件

  • 鉴权登录成功。
  • 会议环境参数已设置。

业务流程

图4 查询会议详情流程 
  1. UI调用TsdkConferenceManager对象的queryConferenceDetail()方法查询会议详情,参数为获取会议详细信息,参数类型为TsdkQueryConfDetailReq类。

     

    说明: 

    在创建TsdkQueryConfDetailReq对象后,需要从该对象调用方法来设置参数。

    • 请求与会者列表页索引,通过setPageIndex()方法设置,取值从1开始,建议与应用程序与会者列表的页签对应。
    • 需要查询的会议ID,通过查询列表或其他方式获取。
    • 与会者列表每页的与会者个数,通过setPageSize()方法设置,建议与应用程序与会者列表个数相同。
    代码示例:
    //Java code
    public int queryConfDetail(String confID)
    {
        Log.i(TAG,  "query conf detail");
        TsdkQueryConfDetailReq queryReq = new TsdkQueryConfDetailReq();
        queryReq.setConfId(confID);
        int result = TsdkManager.getInstance().getConferenceManager().queryConferenceDetail(queryReq);
        if (result != 0)
        {
            Log.e(TAG, "getConfInfo result ->" + result);
            return  result;
        }
        return result;
    }
    
     

     

  2. SDK在收到服务器返回的查询会议详情响应后,通过TsdkNotify对象中的onEvtQueryConfDetailResult()方法向UI上报查询结果,参数包括会议详情信息和操作结果。

     

    代码示例:
    //Java code
    public void handleQueryConfDetailResult(TsdkCommonResult result, TsdkConfDetailInfo tsdkConfDetailInfo){
        Log.i(TAG, "onGetConfInfoResult");
        if ((result == null) || (tsdkConfDetailInfo == null))
        {
            Log.e(TAG, "get conference detail is failed, unknown error.");
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_DETAIL_FAILED, -1);
            return;
        }
        if (result.getResult() != TupConfParam.CONF_RESULT.TUP_SUCCESS)
        {
            Log.e(TAG, "get conference detail is failed, return ->" + result.getResult());
            mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_DETAIL_FAILED, result.getResult());
            return;
        }
        ConfDetailInfo confDetailInfo = new ConfDetailInfo();
        confDetailInfo.setSize(tsdkConfDetailInfo.getConfInfo().getSize());
        confDetailInfo.setConfID(tsdkConfDetailInfo.getConfInfo().getConfId());
        confDetailInfo.setSubject(tsdkConfDetailInfo.getConfInfo().getSubject());
        confDetailInfo.setAccessNumber(tsdkConfDetailInfo.getConfInfo().getAccessNumber());
        confDetailInfo.setChairmanPwd(tsdkConfDetailInfo.getConfInfo().getChairmanPwd());
        confDetailInfo.setGuestPwd(tsdkConfDetailInfo.getConfInfo().getGuestPwd());
        confDetailInfo.setSchedulerNumber(tsdkConfDetailInfo.getConfInfo().getScheduserAccount());
        confDetailInfo.setSchedulerName(tsdkConfDetailInfo.getConfInfo().getScheduserName());
        confDetailInfo.setStartTime(tsdkConfDetailInfo.getConfInfo().getStartTime());
        confDetailInfo.setEndTime(tsdkConfDetailInfo.getConfInfo().getEndTime());
        confDetailInfo.setMediaType(ConfConvertUtil.convertConfMediaType(tsdkConfDetailInfo.getConfInfo().getConfMediaType()));
        confDetailInfo.setConfState(ConfConvertUtil.convertConfctrlConfState(tsdkConfDetailInfo.getConfInfo().getConfState()));
        List<Member> memberList = ConfConvertUtil.convertAttendeeInfoList(tsdkConfDetailInfo.getAttendeeList());
        confDetailInfo.setMemberList(memberList);
        mConfNotification.onConfEventNotify(ConfConstant.CONF_EVENT.QUERY_CONF_DETAIL_SUCCESS, confDetailInfo);
    }
    
     

     

注意事项

无。