暖暖视频免费观**,国产免费美女被艹视频,毛片一级毛片,不卡三级

智慧服務,成就美好體驗 項目咨詢

主頁 > 服務與支持 > 開發(fā)平臺 > 客戶端SDK參考 > Windows Native SDK > 會議 會議接入

入門使用

會議接入

更新時間:2019-11-20

會議列表一鍵入會

描述

用戶通過會議列表一鍵入會的方式加入會議。

前提條件:

  1. 鑒權(quán)登錄成功。
  2. SIP號碼已成功注冊。
  3. 會議環(huán)境參數(shù)已設置。

業(yè)務流程

圖1 會議列表一鍵入會流程 
  1. UI調(diào)用tsdk_join_conference()加入會議;SDK發(fā)送加入會議請求至服務器。
    說明: 

    在加入會議時,入會參數(shù)(conf_join_param),是否視頻接入會議(is_video_join)為必選;

    1. 入會參數(shù)機構(gòu)體重conf_id,access_number,conf_password都為必選。
    2. 入會號碼(join_number)如果不填,則使用自己軟終端號碼入會。
    3. 會議對應的呼叫ID(接口會同步返回call_id,需要記錄下),在使用SIP終端號碼入會時有效。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_join_conference(confJoinParam, joinNumber, isVideoJoin, callId);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("join conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  2. SDK在收到服務器返回的加入會議響應后,向UI上報加入會議結(jié)果通知TSDK_E_CONF_EVT_JOIN_CONF_RESULT,對應的結(jié)果數(shù)據(jù)結(jié)構(gòu)為TSDK_S_JOIN_CONF_IND_INFO,并返回conf handle,后續(xù)會控時使用,此時, UI可跳轉(zhuǎn)至會議界面。
    說明: 
    1. 在加入會議時,會請求會議權(quán)限,若請求失敗,則會向UI上報會議權(quán)限請求失敗通知TSDK_E_CONF_EVT_REQUEST_CONF_RIGHT_FAILED,UI提示申請會控權(quán)限失敗,若請求成功,則不上報。
    2. 若應用程序是以多流的方式(SVC)成功加入會議,則此結(jié)果通知中會攜帶SVC信息,包含 is_svc_conf (是否多流會議)、svc_label_count(可使用的多流Label數(shù)) 和 svc_label (多流Label 表),應用程序應保存多流“Label”信息,用于后繼流程中“綁定SVC視頻窗口”、"選看SVC與會者"和“設置SVC窗口和與會者關(guān)系”等操作。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_CONF_RESULT:
    {
         if (TSDK_SUCCESS == param2)
         {
             CHECK_POINTER(data);
             TSDK_S_JOIN_CONF_IND_INFO* pResult = (TSDK_S_JOIN_CONF_IND_INFO*)data;
             TSDK_S_JOIN_CONF_IND_INFO* notifyInfo = new TSDK_S_JOIN_CONF_IND_INFO;
             memset(notifyInfo, 0, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             memcpy_s(notifyInfo, sizeof(TSDK_S_JOIN_CONF_IND_INFO), pResult, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_RESULT, (WPARAM)notifyInfo, (LPARAM)param1);
         }
         else 
         {
              maindlg->MessageBox(_T("join conf failed!"));
         }
         break;
    }
    
     
  3. SDK收到會議狀態(tài)更新通知,向UI上報會議信息及狀態(tài)更新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會議成員列表和會議信息。

    代碼示例詳見“更新會議狀態(tài)信息和與會者列表”描述。

  4. 若會議包含數(shù)據(jù)會議能力,SDK會向UI上報獲取數(shù)據(jù)會議參數(shù)結(jié)果TSDK_E_CONF_EVT_GET_DATACONF_PARAM_RESULT。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_GET_DATACONF_PARAM_RESULT:
    {
         if (TSDK_SUCCESS != param2)
         {
             maindlg->MessageBox(_T("get data conf param failed!"));
         }
         else
         {
             ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_GET_DATA_CONF_PARAM, (WPARAM)param1, NULL);
         }
         break;
    }
    
     
  5. 此時UI可選擇自動加入或用戶選擇加入數(shù)據(jù)會議,調(diào)用加入數(shù)據(jù)會議接口tsdk_join_data_conference(),SDK發(fā)送創(chuàng)建會議請求至會議服務器。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_join_data_conference(confHandle);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("join data conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  6. SDK在收服務器加入數(shù)據(jù)會議響應后,向UI上報數(shù)據(jù)會議加入結(jié)果通知TSDK_E_CONF_EVT_JOIN_DATA_CONF_RESULT,若成功,則UI刷新界面,提示加入數(shù)據(jù)會議成功,若失敗,則提示加入數(shù)據(jù)會議失敗。
    說明: 

    在加入數(shù)據(jù)會議后,會向UI上報會議信息及狀態(tài)更新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會議成員列表和會議信息。

    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_DATA_CONF_RESULT:
    {
         ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_DATACONF_RESULT, NULL, (LPARAM)param2);
         break;
    }   
    
     

注意事項

無。

會議接入碼入會

描述

用戶由第三方途徑獲取會議信息,通過輸入會議號和接入碼的方式加入會議。

說明: 
  1. 因不支持從撥號盤撥打“會議號”+“接入碼”的方式直接加入會議,所以應用程序界面需要提供“接入會議”的單獨入口;
  2. 與“會議列表一鍵入會”的接口調(diào)用流程相同,不同在于用戶界面入口。

業(yè)務流程

參見“會議列表一鍵入會”。

注意事項

無。

統(tǒng)一會議接入號入會

描述

用戶由第三方途徑獲取會議信息,通過撥打統(tǒng)一會議接入號,使用IVR導航的方式加入會議。

前提條件:

  1. 鑒權(quán)登錄成功;
  2. SIP號碼已成功注冊;
  3. 會議環(huán)境參數(shù)已設置。

業(yè)務流程

圖2 統(tǒng)一會議接入號入會流程

  1. UI調(diào)用“音視頻呼叫”接口tsdk_start_call()發(fā)起一個呼叫請求,被叫號碼為“統(tǒng)一會議接入號”。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_start_call(&callid, call_number, FALSE);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("start call failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  2. 若呼叫建立 成功,SDK向UI上報呼叫建立事件TSDK_E_CALL_EVT_CALL_CONNECTED,與普通音視頻呼叫相同。
    代碼示例:
    //c code
    case TSDK_E_CALL_EVT_CALL_CONNECTED:
    {
         CHECK_POINTER(data);
         TSDK_S_CALL_INFO* callInfo = (TSDK_S_CALL_INFO*)data;
         TSDK_S_CALL_INFO* notifyInfo = new TSDK_S_CALL_INFO;
         memset(notifyInfo, 0, sizeof(TSDK_S_CALL_INFO));
         memcpy_s(notifyInfo, sizeof(TSDK_S_CALL_INFO), callInfo, sizeof(TSDK_S_CALL_INFO));
    
         ::PostMessage(maindlg->GetSafeHwnd(), WM_CALL_CONNECTED, (WPARAM)notifyInfo, NULL);
         break;
    }
    
     
  3. 用戶根據(jù)服務器的語言提示,在二次撥號界面輸入會議接入碼和密碼,UI調(diào)用tsdk_send_dtmf()完成會議接入碼和密碼發(fā)送,SDK完成入會交互處理。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_send_dtmf(callid, tone);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("send dtmf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  4. SDK在收到服務器返回的加入會議響應后,向UI上報加入會議結(jié)果通知TSDK_E_CONF_EVT_JOIN_CONF_RESULT,對應的結(jié)果數(shù)據(jù)結(jié)構(gòu)為TSDK_S_JOIN_CONF_IND_INFO,并返回conf handle,后續(xù)會控時使用,此時, UI可跳轉(zhuǎn)至會議界面。
    說明: 
    1. 在加入會議時,會請求會議權(quán)限,若請求失敗,則會向UI上報會議權(quán)限請求失敗通知TSDK_E_CONF_EVT_REQUEST_CONF_RIGHT_FAILED,UI提示申請會控權(quán)限失敗,若請求成功,則不上報。
    2. 若應用程序是以多流的方式(SVC)成功加入會議,則此結(jié)果通知中會攜帶SVC信息,包含 is_svc_conf (是否多流會議)、svc_label_count(可使用的多流Label數(shù)) 和 svc_label (多流Label 表),應用程序應保存多流“Label”信息,用于后繼流程中“綁定SVC視頻窗口”、"選看SVC與會者"和“設置SVC窗口和與會者關(guān)系”等操作。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_CONF_RESULT:
    {
         if (TSDK_SUCCESS == param2)
         {
             CHECK_POINTER(data);
             TSDK_S_JOIN_CONF_IND_INFO* pResult = (TSDK_S_JOIN_CONF_IND_INFO*)data;
             TSDK_S_JOIN_CONF_IND_INFO* notifyInfo = new TSDK_S_JOIN_CONF_IND_INFO;
             memset(notifyInfo, 0, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             memcpy_s(notifyInfo, sizeof(TSDK_S_JOIN_CONF_IND_INFO), pResult, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_RESULT, (WPARAM)notifyInfo, (LPARAM)param1);
         }
         else 
         {
              maindlg->MessageBox(_T("join conf failed!"));
         }
         break;
    }
    
     
  5. SDK收到會議狀態(tài)更新通知,向UI上報會議信息及狀態(tài)更新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會議成員列表和會議信息。

    代碼示例詳見“更新會議狀態(tài)信息和與會者列表”描述。

  6. 若會議包含數(shù)據(jù)會議能力,SDK會向UI上報獲取數(shù)據(jù)會議參數(shù)結(jié)果TSDK_E_CONF_EVT_GET_DATACONF_PARAM_RESULT。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_GET_DATACONF_PARAM_RESULT:
    {
         if (TSDK_SUCCESS != param2)
         {
             maindlg->MessageBox(_T("get data conf param failed!"));
         }
         else
         {
             ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_GET_DATA_CONF_PARAM, (WPARAM)param1, NULL);
         }
         break;
    }
    
     
  7. 此時UI可選擇自動加入或用戶選擇加入數(shù)據(jù)會議,調(diào)用加入數(shù)據(jù)會議接口tsdk_join_data_conference(),SDK發(fā)送創(chuàng)建會議請求至會議服務器。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_join_data_conference(confHandle);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("join data conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  8. SDK在收服務器加入數(shù)據(jù)會議響應后,向UI上報數(shù)據(jù)會議加入結(jié)果通知TSDK_E_CONF_EVT_JOIN_DATA_CONF_RESULT,若成功,則UI刷新界面,提示加入數(shù)據(jù)會議成功,若失敗,則提示加入數(shù)據(jù)會議失敗。
    說明: 

    在加入數(shù)據(jù)會議后,會向UI上報會議信息及狀態(tài)更新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會議成員列表和會議信息。

    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_DATA_CONF_RESULT:
    {
         ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_DATACONF_RESULT, NULL, (LPARAM)param2);
         break;
    }   
    
     

注意事項

無。

被邀接入會議

描述

會議主席邀請新的與會者加入會議。

與會者通過主席身份加入會議,或已申請獲取為主席。

業(yè)務流程

圖3 被邀入會流程 
  1. 被邀與會者側(cè)SDK收到會議來電請求,向UI上報會議來電事件TSDK_E_CONF_EVT_CONF_INCOMING_IND,對應的事件數(shù)據(jù)結(jié)構(gòu)為TSDK_S_CONF_INCOMING_INFO,UI提示用戶會議來電。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_CONF_INCOMING_IND:
    {
         CHECK_POINTER(data);
         TSDK_S_CONF_INCOMING_INFO* pResult = (TSDK_S_CONF_INCOMING_INFO*)data;
         TSDK_S_CONF_INCOMING_INFO* notifyInfo = new TSDK_S_CONF_INCOMING_INFO;
         memset(notifyInfo, 0, sizeof(TSDK_S_CONF_INCOMING_INFO));
         memcpy_s(notifyInfo, sizeof(TSDK_S_CONF_INCOMING_INFO), pResult, sizeof(TSDK_S_CONF_INCOMING_INFO));
         ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_CONF_COMMING, (WPARAM)notifyInfo, (LPARAM)param1);
         break;
    }
    
    LRESULT CDemoMainDlg::OnConfInComming(WPARAM wparam, LPARAM lparam)
    {
        TSDK_S_CONF_INCOMING_INFO* notifyInfo = (TSDK_S_CONF_INCOMING_INFO*)wparam;
        CHECK_POINTER_RETURN(notifyInfo, 0L);
        unsigned int handle = (unsigned int)lparam;
        std::string strchairman = notifyInfo->number;
        unsigned int conf_id = CTools::str2num(notifyInfo->conf_id);
        SetConfChairman(false);
    
        CDemoCallInCommingDlg incommingDlg;
    
        if (TSDK_E_CONF_MEDIA_VIDEO == notifyInfo->conf_media_type || TSDK_E_CONF_MEDIA_VIDEO_DATA == notifyInfo->conf_media_type)
        {
            incommingDlg.GetInitParam(VIDEO_CONF_CALL, strchairman, conf_id);
        }
        else
        {
            incommingDlg.GetInitParam(AUDIO_CONF_CALL, strchairman, conf_id);
        }
    
        INT_PTR nResponse = incommingDlg.DoModal();
        if (IDOK == nResponse)
        {
            if (TSDK_E_CONF_MEDIA_VIDEO == notifyInfo->conf_media_type || TSDK_E_CONF_MEDIA_VIDEO_DATA == notifyInfo->conf_media_type)
            {
                (void)service_conf_mem_accept(handle, TRUE);
            }
            else
            {
                (void)service_conf_mem_accept(handle, FALSE);
            }
        }
        else
        {
            (void)service_conf_mem_reject(handle);
        }
        m_confHandle = handle;
        SAFE_DELETE(notifyInfo);
        return 0L;
    }
    
     
  2. 被邀與會者側(cè)接受入會邀請則調(diào)用tsdk_accept_conference()接聽會議來電呼叫,拒絕入會邀請則調(diào)用tsdk_reject_conference()。
    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_accept_conference(confHandle, isJoinVideo);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("accept conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  3. SDK在收到服務器返回的加入會議響應后,向UI上報加入會議結(jié)果通知TSDK_E_CONF_EVT_JOIN_CONF_RESULT,對應的結(jié)果數(shù)據(jù)結(jié)構(gòu)為TSDK_S_JOIN_CONF_IND_INFO,并返回conf handle,后續(xù)會控時使用,此時, UI可跳轉(zhuǎn)至會議界面。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_CONF_RESULT:
    {
         if (TSDK_SUCCESS == param2)
         {
             CHECK_POINTER(data);
             TSDK_S_JOIN_CONF_IND_INFO* pResult = (TSDK_S_JOIN_CONF_IND_INFO*)data;
             TSDK_S_JOIN_CONF_IND_INFO* notifyInfo = new TSDK_S_JOIN_CONF_IND_INFO;
             memset(notifyInfo, 0, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             memcpy_s(notifyInfo, sizeof(TSDK_S_JOIN_CONF_IND_INFO), pResult, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
             ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_RESULT, (WPARAM)notifyInfo, (LPARAM)param1);
          }
          else 
          {
              maindlg->MessageBox(_T("join conf failed!"));
          }
          break;
    }
    
     
  4. SDK收到會議成員列表刷新通知,向UI上報會議成員列表刷新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會議成員列表和會議信息。

    代碼示例詳見“更新會議狀態(tài)信息和與會者列表”描述。

匿名加入會議

描述

用戶在未注冊EC帳號時,通過匿名方式加入一個會議。

會議已經(jīng)創(chuàng)建,且用戶通過第三方方式獲取到會議ID和密碼。

業(yè)務流程

圖4 匿名加入會議流程 
  1. UI調(diào)用tsdk_join_anonymous_conference()接口,匿名加入會議。
    說明: 

    參數(shù)TSDK_S_CONF_ANONYMOUS_JOIN_PARAM中的服務器地址和端口,指會議服務器的地址和端口。

    代碼示例:

    //c code
    TSDK_S_CONF_ANONYMOUS_JOIN_PARAM anonymousJoinConfParam;
    service_memset_s(&anonymousJoinConfParam,sizeof(TSDK_S_CONF_ANONYMOUS_JOIN_PARAM),0,sizeof(TSDK_S_CONF_ANONYMOUS_JOIN_PARAM));
    
    anonymousJoinConfParam.user_id = 1;
    CTools::CString2Char(m_strConfId, anonymousJoinConfParam.conf_id, TSDK_D_MAX_CONF_ID_LEN);
    CTools::CString2Char(m_strJoinPwd, anonymousJoinConfParam.conf_password, TSDK_D_MAX_CONF_PASSWORD_LEN);
    CTools::CString2Char(m_strConfServerAddress, anonymousJoinConfParam.server_addr, TSDK_D_MAX_URL_LENGTH);
    CTools::CString2Char(m_strNickname, anonymousJoinConfParam.display_name, TSDK_D_MAX_DISPLAY_NAME_LEN);
    anonymousJoinConfParam.server_port = (unsigned short)CTools::str2num(CTools::UNICODE2UTF(m_strConfServerPort));
    
    (void)service_join_conference_by_anonymous(&anonymousJoinConfParam);
    
    int service_join_conference_by_anonymous(TSDK_S_CONF_ANONYMOUS_JOIN_PARAM *confJoinParam)
    {
        TSDK_RESULT ret;
        ret = tsdk_join_conference_by_anonymous(confJoinParam);
        if (TSDK_SUCCESS != ret)
        {
            LOG_D_CALL_ERROR("join conference by anonymous failed. result=%#x", ret);
            return -1;
        }
        return TSDK_SUCCESS;
    }
    
     
  2. SDK通過會議ID和密碼向會議服務器完成鑒權(quán),獲取臨時帳號,上報臨時帳號獲取結(jié)果事件TSDK_E_LOGIN_EVT_GET_TEMP_USER_RESULT。
    說明: 

    若此次事件通知返回失敗,應用程序界面應提示用戶。

    代碼示例:

    //c code
    case TSDK_E_LOGIN_EVT_GET_TEMP_USER_RESULT:
    {
         CHECK_POINTER(data);
         TSDK_CHAR* notifyInfo = (TSDK_CHAR*)data;
         ::PostMessage(logindlg->GetSafeHwnd(), WM_LOGIN_GET_TEMP_USER_RESULT, (WPARAM)notifyInfo, NULL);
         break;
    }
    
     
  3. SDK自動完成臨時帳號注冊,并完成加入會議處理,向UI上報加入會議結(jié)果事件TSDK_E_CONF_EVT_JOIN_CONF_RESULT。后續(xù)過程與普通入會流程相同。
    說明: 

    匿名會議過程中,無論用戶采用主席密碼入會或是普通與會者密碼入會,均只有設置自己閉音的會控能力,其他會控能力暫不支持。

    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_JOIN_CONF_RESULT:
    {
    if (TSDK_SUCCESS == param2)
    {
        CHECK_POINTER(data);
        TSDK_S_JOIN_CONF_IND_INFO* pResult = (TSDK_S_JOIN_CONF_IND_INFO*)data;
        TSDK_S_JOIN_CONF_IND_INFO* notifyInfo = new TSDK_S_JOIN_CONF_IND_INFO;
        service_memset_s(notifyInfo, sizeof(TSDK_S_JOIN_CONF_IND_INFO), 0, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
        memcpy_s(notifyInfo, sizeof(TSDK_S_JOIN_CONF_IND_INFO), pResult, sizeof(TSDK_S_JOIN_CONF_IND_INFO));
        ::PostMessage(maindlg->GetSafeHwnd(), WM_CONF_CTRL_JOIN_RESULT, (WPARAM)notifyInfo, (LPARAM)param1);
    }
    else
    {
         maindlg->MessageBox(_T("join conf failed!"));
    }
    break;
    }