台湾一级a毛片在线播放,黄色精品偷拍视频大全,精品一区二区在线欧美日韩,日本特黄一级视频播三级片,日韩美女18岁美女视频,偷偷操不一样的99,国产午夜激无码av毛片久

智慧服務(wù),成就美好體驗(yàn) 項(xiàng)目咨詢(xún)

主頁(yè) > 服務(wù)與支持 > 開(kāi)發(fā)平臺(tái) > 客戶(hù)端SDK參考 > Windows Native SDK > 會(huì)議 會(huì)議控制

入門(mén)使用

會(huì)議控制

更新時(shí)間:2019-11-20

退出和結(jié)束會(huì)議

描述

普通與會(huì)者和主席均可在會(huì)議中主動(dòng)退出會(huì)議,主席可以結(jié)束會(huì)議。

說(shuō)明: 

若主席退出會(huì)議,則會(huì)議中無(wú)主席,預(yù)約會(huì)議時(shí),原主席可以通過(guò)主席接入信息重新加入會(huì)議獲取主席;當(dāng)會(huì)議中無(wú)任何與會(huì)者時(shí),會(huì)議也會(huì)自動(dòng)結(jié)束。

與會(huì)者已在會(huì)議中。

業(yè)務(wù)流程

退出會(huì)議

圖1 退出會(huì)議流程 
  1. 普通與會(huì)者或主席側(cè)UI調(diào)用tsdk_leave_conference()主動(dòng)退出會(huì)議。
    說(shuō)明: 

    在主動(dòng)離開(kāi)會(huì)議過(guò)程中,sdk層會(huì)主動(dòng)掛斷通話,然后才離開(kāi)會(huì)議。

    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_leave_conference(confHandle);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("leave conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  2. 普通與會(huì)者或主席側(cè)SDK在收到“退出會(huì)議”請(qǐng)求的響應(yīng)后,向UI上報(bào)刪除呼叫id事件TSDK_E_CALL_EVT_CALL_DESTROY。
    代碼示例:
    //c code
    case TSDK_E_CALL_EVT_CALL_DESTROY:
    {
         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_END, (WPARAM)notifyInfo, NULL);
         break;
    }
    
     
  3. 其他與會(huì)者側(cè)SDK收到會(huì)議成員列表刷新通知,向UI上報(bào)會(huì)議成員列表刷新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會(huì)議成員列表。
    說(shuō)明: 

    詳細(xì)流程參見(jiàn)“更新會(huì)議狀態(tài)信息和與會(huì)者列表”描述。

 

結(jié)束會(huì)議

圖2 結(jié)束會(huì)議流程 
  1. 主席側(cè)UI調(diào)用tsdk_end_conference()結(jié)束會(huì)議。
    說(shuō)明: 

    應(yīng)用程序界面在關(guān)閉會(huì)議時(shí)應(yīng)為主席提供“退出會(huì)議”和“結(jié)束會(huì)議”的選擇入口。

    代碼示例:
    //c code
    TSDK_RESULT ret;
    ret = tsdk_end_conference(confHandle);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("end conf failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  2. 其他與會(huì)者側(cè)SDK收到會(huì)議結(jié)束通知,向UI上報(bào)會(huì)議結(jié)束事件TSDK_E_CONF_EVT_CONF_END_IND,UI提示用戶(hù)會(huì)議結(jié)束。

注意事項(xiàng)

無(wú)。

基礎(chǔ)會(huì)控操作

描述

在會(huì)議中進(jìn)行基礎(chǔ)的會(huì)議控制操作。

業(yè)務(wù)流程

基礎(chǔ)會(huì)議控制

圖3 基礎(chǔ)會(huì)議控制流程 
  1. UI調(diào)用會(huì)議基礎(chǔ)控制接口(如表1),實(shí)現(xiàn)會(huì)議控制相關(guān)操作。
    表1 會(huì)議控制相關(guān)操作

    會(huì)控類(lèi)型

    接口

    權(quán)限

    說(shuō)明

    閉音會(huì)議

    tsdk_mute_conference

    主席

    設(shè)置會(huì)議閉音后,除主席外,其他所有與會(huì)者均不可說(shuō)(只可聽(tīng))。

    添加與會(huì)者

    tsdk_add_attendee

    主席

    支持邀請(qǐng)一個(gè)或多個(gè)與會(huì)者。

    重?fù)芘c會(huì)者

    tsdk_redial_attendee

    主席

    -

    掛斷與會(huì)者

    tsdk_hang_up_attendee

    主席

    掛斷在會(huì)議中的與會(huì)者.

    刪除與會(huì)者

    tsdk_remove_attendee

    主席

    踢出與會(huì)者(正在會(huì)議中的)、移除已離會(huì)的與會(huì)者和取消正在邀請(qǐng)的與會(huì)者。

    閉音與會(huì)者

    tsdk_mute_attendee

    主席

    普通與會(huì)者

    設(shè)置閉音后,該與會(huì)者不可說(shuō)(只聽(tīng))。

    會(huì)議主席在會(huì)議中設(shè)置或取消其他與會(huì)者閉音,普通與會(huì)者設(shè)置或取消自己閉音。

    舉手

    tsdk_set_handup

    主席

    普通與會(huì)者

    會(huì)議主席在會(huì)議中取消其他與會(huì)者舉手,所有與會(huì)者設(shè)置或取消自己舉手。

    設(shè)置會(huì)議視頻模式

    tsdk_set_video_mode

    主席

    在CloudEC解決方案下,支持的視頻會(huì)議模式有“廣播與會(huì)者模式”、“聲控模式”和“自由討論模式”。

    觀看與會(huì)者

    tsdk_watch_attendee

    主席

    普通與會(huì)者

    AVC 會(huì)議:只需要指定待選看的與會(huì)者號(hào)碼,每次指定選看一個(gè)與會(huì)者。

    SVC會(huì)議:

    1. 除指定待選看的與會(huì)者號(hào)碼外,還應(yīng)該指定"SVC Label",以及待選看的分辨率(寬和高),且“SVC Label”與“分辨率”必須與“綁定SVC視頻窗口”時(shí)填寫(xiě)的參數(shù)相對(duì)應(yīng)。
    2. 更新選看時(shí),需要全量指定所有選看信息(一大多少)。
    3. 若指定的待選看與會(huì)者號(hào)碼為空(僅支持大窗口),則所選看的與會(huì)者由系統(tǒng)自動(dòng)推送。

    廣播與會(huì)者

    tsdk_broadcast_attendee

    主席

    會(huì)議視頻模式為“廣播與會(huì)者模式”時(shí)主席可以指定廣播與會(huì)者。

    申請(qǐng)主席

    tsdk_request_chairman

    普通與會(huì)者

    -

    釋放主席

    tsdk_release_chairman

    主席

    -

    延長(zhǎng)會(huì)議

    tsdk_postpone_conference

    主席

    -

    設(shè)置主講人

    tsdk_set_presenter

    主席

    會(huì)議主講人

    會(huì)議類(lèi)型為T(mén)SDK_E_CONF_MEDIA_VOICE_DATA或TSDK_E_CONF_MEDIA_VIDEO_DATA支持。

    申請(qǐng)主講人

    tsdk_request_presenter

    與會(huì)者

    會(huì)議類(lèi)型為T(mén)SDK_E_CONF_MEDIA_VOICE_DATA或TSDK_E_CONF_MEDIA_VIDEO_DATA支持。

    設(shè)置會(huì)議錄播

    tsdk_set_record_broadcast

    主席

    -

    設(shè)置會(huì)議直播

    tsdk_set_live_broadcast

    主席

    -

    代碼示例:
    //c code
    /* 閉音會(huì)場(chǎng) */
    TSDK_RESULT ret;
    ret = tsdk_mute_conference(confHandle, isMute);
    if (TSDK_SUCCESS != ret)
    {
        LOG_D_CALL_ERROR("mute conference failed. result=%#x", ret);
        return -1;
    }
    return TSDK_SUCCESS;
    
     
  2. SDK在收到會(huì)控請(qǐng)求的響應(yīng)后,向UI上報(bào)會(huì)控操作結(jié)果事件TSDK_E_CONF_EVT_CONFCTRL_OPERATION_RESULT。
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_CONFCTRL_OPERATION_RESULT:
    {
         CHECK_POINTER(data);
         TSDK_S_CONF_OPERATION_RESULT* pResult = (TSDK_S_CONF_OPERATION_RESULT*)data;
         TSDK_S_CONF_OPERATION_RESULT* notifyInfo = new TSDK_S_CONF_OPERATION_RESULT;
         memset(notifyInfo, 0, sizeof(TSDK_S_CONF_OPERATION_RESULT));
         memcpy_s(notifyInfo, sizeof(TSDK_S_CONF_OPERATION_RESULT), pResult, sizeof(TSDK_S_CONF_OPERATION_RESULT));
    
         if(TSDK_SUCCESS != notifyInfo->reason_code)
         { 
    	maindlg->MessageBox(_T("operation failed!"));
         }
    
         if (TSDK_SUCCESS == notifyInfo->reason_code)
         {
             if(TSDK_E_CONF_SET_PRESENTER  == notifyInfo->operation_type)
             { 
                CDemoDataMeetingDlg* dataMeetingDlg = maindlg->GetDemoDataMeetingDlg();
                CHECK_POINTER(dataMeetingDlg);
                dataMeetingDlg->SetPresenter(false);
             }
          }
          break;
    }
    
     
  3. 主席側(cè)和其他與會(huì)者側(cè)SDK收到會(huì)議成員列表刷新通知,向UI上報(bào)會(huì)議成員列表刷新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE,UI刷新會(huì)議頁(yè)面。
    說(shuō)明: 

    詳細(xì)流程參見(jiàn)“更新會(huì)議狀態(tài)信息和與會(huì)者列表”描述。

注意事項(xiàng)

無(wú)。

更新會(huì)議狀態(tài)信息和與會(huì)者列表

描述

會(huì)議過(guò)程中,會(huì)議狀態(tài)或與會(huì)者成員狀態(tài)發(fā)生變化時(shí),服務(wù)器會(huì)推送變更通知,應(yīng)用程序界面應(yīng)刷新相應(yīng)的狀態(tài)以提示用戶(hù)。

說(shuō)明: 
  1. 會(huì)議狀態(tài)當(dāng)前包括鎖定狀態(tài)、閉音狀態(tài)和是否錄播狀態(tài);
  2. 會(huì)議成員狀態(tài)當(dāng)前包括與會(huì)者加入、退出、掛斷、閉音、舉手和角色變更。

主席和與會(huì)者均已在會(huì)議中。

業(yè)務(wù)流程

圖4 更新會(huì)議狀態(tài)信息和與會(huì)者列表流程 
  1. SDK在收到服務(wù)器的與會(huì)者列表更新通知后,向UI上報(bào)與會(huì)者列表更新事件TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE。
    說(shuō)明: 

    事件對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)TSDK_S_CONF_STATUS_INFO中:

    • is_record,表示會(huì)場(chǎng)錄音狀態(tài),為true時(shí),應(yīng)用程序界面應(yīng)提示與會(huì)者當(dāng)前處于錄音狀態(tài);
    • is_all_mute,表示會(huì)場(chǎng)靜音狀態(tài),為true時(shí),應(yīng)用程序界面應(yīng)提示與會(huì)者當(dāng)前處于會(huì)場(chǎng)閉音狀態(tài),除主席外,均可聽(tīng)不可說(shuō);
    • subject,會(huì)議主題,不為空時(shí),應(yīng)用程序界面應(yīng)顯示此主題,在會(huì)議創(chuàng)建時(shí)已確定,首次獲取后,不會(huì)再有變更;
    • is_hd_conf,高清視頻會(huì)議,為true時(shí),會(huì)議視頻為高清視頻;
    • conf_media_type,會(huì)議媒體類(lèi)型,參考結(jié)構(gòu)體TSDK_E_CONF_MEDIA_TYPE;
    • conf_state,會(huì)議狀態(tài),參考結(jié)構(gòu)體TSDK_E_CONF_STATE;
    • update_type,表示成員更新方式,支持無(wú)更新、全量更新、增量增加、增量修改和增量刪除,目前以全量同步的方式進(jìn)行更新;
    • attendee_num,當(dāng)前會(huì)議中的與會(huì)者個(gè)數(shù);
    • attendee_list,與會(huì)者的詳細(xì)信息,包括用戶(hù)標(biāo)識(shí)、名稱(chēng)、號(hào)碼、閉音狀態(tài)、靜音狀態(tài)、舉手狀態(tài)、用戶(hù)狀態(tài)、角色和支持的媒體類(lèi)型,應(yīng)用程序界面需要根據(jù)相應(yīng)字段顯示與會(huì)者的信息和狀態(tài);
    • is_live_broadcast,表示會(huì)場(chǎng)直播狀態(tài),為true時(shí),應(yīng)用程序應(yīng)提示與會(huì)者當(dāng)前出于直播狀態(tài) ;
    • is_support_live_broadcast,表示會(huì)場(chǎng)是否支持直播 ;
    • is_support_record_broadcast,表示會(huì)場(chǎng)是否支持錄播.
    代碼示例:
    //c code
    case TSDK_E_CONF_EVT_INFO_AND_STATUS_UPDATE:
    {
         CHECK_POINTER(data);
         TSDK_S_CONF_STATUS_INFO* pResult = (TSDK_S_CONF_STATUS_INFO*)data;
         TSDK_S_CONF_STATUS_INFO* notifyInfo = new TSDK_S_CONF_STATUS_INFO;
         memset(notifyInfo, 0, sizeof(TSDK_S_CONF_STATUS_INFO));
         memcpy_s(notifyInfo, sizeof(TSDK_S_CONF_STATUS_INFO), pResult, sizeof(TSDK_S_CONF_STATUS_INFO));
    
         unsigned int attrndsnumber = pResult->attendee_num;
         notifyInfo->attendee_list = NULL;
         notifyInfo->attendee_list = (TSDK_S_ATTENDEE*)malloc(attrndsnumber*sizeof(TSDK_S_ATTENDEE));
         if (NULL == notifyInfo->attendee_list)
         {
             return;
         }
         (void)memset(notifyInfo->attendee_list, 0, attrndsnumber*sizeof(TSDK_S_ATTENDEE));
          TSDK_S_ATTENDEE* pTempAttendee = notifyInfo->attendee_list;
          for (unsigned int i = 0; i < attrndsnumber; i++)
          {
               if (pTempAttendee)
               {
                  (void)strncpy_s(pTempAttendee->status_info.participant_id, TSDK_D_MAX_PARTICIPANTID_LEN+1, pResult->attendee_list[i].status_info.participant_id, _TRUNCATE);
                  (void)strncpy_s(pTempAttendee->base_info.display_name, TSDK_D_MAX_DISPLAY_NAME_LEN+1, pResult->attendee_list[i].base_info.display_name, _TRUNCATE);
                  (void)strncpy_s(pTempAttendee->base_info.number, TSDK_D_MAX_NUMBER_LEN+1, pResult->attendee_list[i].base_info.number, _TRUNCATE);
                   pTempAttendee->base_info.role = (TSDK_E_CONF_ROLE)pResult->attendee_list[i].base_info.role;
                   pTempAttendee->status_info.is_mute = pResult->attendee_list[i].status_info.is_mute;
                   pTempAttendee->status_info.is_handup = pResult->attendee_list[i].status_info.is_handup;
                   pTempAttendee->status_info.state = (TSDK_E_CONF_PARTICIPANT_STATUS)pResult->attendee_list[i].status_info.state;
                   pTempAttendee->status_info.has_camera = pResult->attendee_list[i].status_info.has_camera;
                   pTempAttendee->status_info.is_present = pResult->attendee_list[i].status_info.is_present;
                   pTempAttendee->status_info.is_self = pResult->attendee_list[i].status_info.is_self;
                }
                else
                {
                   break;
                }
                pTempAttendee++;
            }
    
            if (TSDK_E_CONF_MEDIA_VOICE == notifyInfo->conf_media_type)
            {
                CDemoAudioMeetingDlg* pAudioMettingDlg = maindlg->GetDemoAudioMeetingDlg();
                CHECK_POINTER(pAudioMettingDlg);
                ::PostMessage(pAudioMettingDlg->GetSafeHwnd(), WM_CONF_CTRL_INFO_AND_STATUS_UPDATE, (WPARAM)notifyInfo, (LPARAM)param1);
            }
            else if (TSDK_E_CONF_MEDIA_VIDEO == notifyInfo->conf_media_type)
            {
                CDemoVideoMeetingDlg* pVideoMettingDlg = maindlg->GetDemoVideoMeetingDlg();
                CHECK_POINTER(pVideoMettingDlg);
                ::PostMessage(pVideoMettingDlg->GetSafeHwnd(), WM_CONF_CTRL_INFO_AND_STATUS_UPDATE, (WPARAM)notifyInfo, (LPARAM)param1);
            }
            else if (TSDK_E_CONF_MEDIA_VOICE_DATA == notifyInfo->conf_media_type || TSDK_E_CONF_MEDIA_VIDEO_DATA == notifyInfo->conf_media_type)
            {
                CDemoDataMeetingDlg* pDataMettingDlg = maindlg->GetDemoDataMeetingDlg();
                CHECK_POINTER(pDataMettingDlg);
                ::PostMessage(pDataMettingDlg->GetSafeHwnd(), WM_CONF_CTRL_INFO_AND_STATUS_UPDATE, (WPARAM)notifyInfo, (LPARAM)param1);
            }
            break;
        }
    
     

注意事項(xiàng)

無(wú)。