更新时间:2019-11-20
描述
普通与会者和主席均可在会议中主动退出会议,主席可以结束会议。
若主席退出会议,则会议中无主席,预约会议时,原主席可以通过主席接入信息重新加入会议获取主席;当会议中无任何与会者时,会议也会自动结束。
与会者已在会议中。
业务流程
退出会议
在主动离开会议过程中,sdk层会主动挂断通话,然后才离开会议。
//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; |
//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; } |
详细流程参见“更新会议状态信息和与会者列表”描述。
结束会议
应用程序界面在关闭会议时应为主席提供“退出会议”和“结束会议”的选择入口。
//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; |
注意事项
无。
描述
在会议中进行基础的会议控制操作。
业务流程
基础会议控制
会控类型 |
接口 |
权限 |
说明 |
---|---|---|---|
闭音会议 |
tsdk_mute_conference |
主席 |
设置会议闭音后,除主席外,其他所有与会者均不可说(只可听)。 |
添加与会者 |
tsdk_add_attendee |
主席 |
支持邀请一个或多个与会者。 |
重拨与会者 |
tsdk_redial_attendee |
主席 |
- |
挂断与会者 |
tsdk_hang_up_attendee |
主席 |
挂断在会议中的与会者. |
删除与会者 |
tsdk_remove_attendee |
主席 |
踢出与会者(正在会议中的)、移除已离会的与会者和取消正在邀请的与会者。 |
闭音与会者 |
tsdk_mute_attendee |
主席 普通与会者 |
设置闭音后,该与会者不可说(只听)。 会议主席在会议中设置或取消其他与会者闭音,普通与会者设置或取消自己闭音。 |
举手 |
tsdk_set_handup |
主席 普通与会者 |
会议主席在会议中取消其他与会者举手,所有与会者设置或取消自己举手。 |
设置会议视频模式 |
tsdk_set_video_mode |
主席 |
在CloudEC解决方案下,支持的视频会议模式有“广播与会者模式”、“声控模式”和“自由讨论模式”。 |
观看与会者 |
tsdk_watch_attendee |
主席 普通与会者 |
AVC 会议:只需要指定待选看的与会者号码,每次指定选看一个与会者。 SVC会议:
|
广播与会者 |
tsdk_broadcast_attendee |
主席 |
会议视频模式为“广播与会者模式”时主席可以指定广播与会者。 |
申请主席 |
tsdk_request_chairman |
普通与会者 |
- |
释放主席 |
tsdk_release_chairman |
主席 |
- |
延长会议 |
tsdk_postpone_conference |
主席 |
- |
设置主讲人 |
tsdk_set_presenter |
主席 会议主讲人 |
会议类型为TSDK_E_CONF_MEDIA_VOICE_DATA或TSDK_E_CONF_MEDIA_VIDEO_DATA支持。 |
申请主讲人 |
tsdk_request_presenter |
与会者 |
会议类型为TSDK_E_CONF_MEDIA_VOICE_DATA或TSDK_E_CONF_MEDIA_VIDEO_DATA支持。 |
设置会议录播 |
tsdk_set_record_broadcast |
主席 |
- |
设置会议直播 |
tsdk_set_live_broadcast |
主席 |
- |
//c code /* 闭音会场 */ 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; |
//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; } |
详细流程参见“更新会议状态信息和与会者列表”描述。
注意事项
无。
描述
会议过程中,会议状态或与会者成员状态发生变化时,服务器会推送变更通知,应用程序界面应刷新相应的状态以提示用户。
主席和与会者均已在会议中。
业务流程
事件对应的数据结构TSDK_S_CONF_STATUS_INFO中:
//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; } |
注意事项
无。