会议控制功能提供了会议中的各种控制操作,包括发言管理、会议签到、音视频控制、会议信息查询等功能。支持举手发言、签到、静音控制、会议模式切换等核心功能。
在会议中进行发言申请和控制:
// 申请发言 - 申请发言权限
NemoSdkAdaptor::getInstance()->applySpeaking(true);
// 举手发言 - 请求发言
NemoSdkAdaptor::getInstance()->speakingReq();
// 结束发言 - 结束当前发言
NemoSdkAdaptor::getInstance()->speakingEnd();
控制会议中的音视频状态:
// 静音麦克风 - 设置为静音状态
NemoSdkAdaptor::getInstance()->setMicMute(true);
// 关闭摄像头 - 设置为视频静音状态
NemoSdkAdaptor::getInstance()->setVideoMute(true);
// 设置本地预览分辨率 - 1280x720分辨率
NemoSdkAdaptor::getInstance()->setLocalPreviewResolution(1280, 720);
获取和管理会议相关信息:
// 获取会议信息 - 传入会议ID
NemoSdkAdaptor::getInstance()->getMeetingRoomInfoForInstant("meeting_id");
// 会中修改用户名 - 设置新的用户名
NemoSdkAdaptor::getInstance()->setUserNameInMeeting("new_username");
// 会议签到 - 进行会议签到
NemoSdkAdaptor::getInstance()->signIn();
切换会议模式和获取会控信息:
// 切换会议模式 - 设置为会议模式
NemoSdkAdaptor::getInstance()->setCallMode(XYCallMode_Meeting);
// 获取会控H5链接 - 获取主持人控制链接
NemoSdkAdaptor::getInstance()->getHostMeetingUrl();
// 检查主持人权限 - 检查是否有主持人权限
NemoSdkAdaptor::getInstance()->checkHostMeetingPermission();
API: applySpeaking
接口定义:
virtual void applySpeaking(bool apply) = 0;
参数:
apply
: bool - 是否申请发言示例:
// 申请发言
NemoSdkAdaptor::getInstance()->applySpeaking(true);
// 取消申请发言
NemoSdkAdaptor::getInstance()->applySpeaking(false);
API: speakingReq
接口定义:
virtual void speakingReq() = 0;
示例:
NemoSdkAdaptor::getInstance()->speakingReq();
API: speakingEnd
接口定义:
virtual void speakingEnd() = 0;
示例:
NemoSdkAdaptor::getInstance()->speakingEnd();
API: setMicMute
接口定义:
virtual void setMicMute(bool mute) = 0;
参数:
mute
: bool - 是否静音示例:
// 静音麦克风
NemoSdkAdaptor::getInstance()->setMicMute(true);
// 取消静音
NemoSdkAdaptor::getInstance()->setMicMute(false);
API: setVideoMute
接口定义:
virtual void setVideoMute(bool mute) = 0;
参数:
mute
: bool - 是否关闭视频示例:
// 关闭摄像头
NemoSdkAdaptor::getInstance()->setVideoMute(true);
// 开启摄像头
NemoSdkAdaptor::getInstance()->setVideoMute(false);
API: setLocalPreviewResolution
接口定义:
virtual void setLocalPreviewResolution(int width, int height) = 0;
参数:
width
: int - 宽度height
: int - 高度示例:
NemoSdkAdaptor::getInstance()->setLocalPreviewResolution(1280, 720);
API: getMeetingRoomInfoForInstant
接口定义:
virtual void getMeetingRoomInfoForInstant(const char* meetingId) = 0;
参数:
meetingId
: const char* - 会议ID示例:
NemoSdkAdaptor::getInstance()->getMeetingRoomInfoForInstant("meeting_123");
API: setUserNameInMeeting
接口定义:
virtual void setUserNameInMeeting(const char* userName) = 0;
参数:
userName
: const char* - 新用户名示例:
NemoSdkAdaptor::getInstance()->setUserNameInMeeting("new_username");
API: signIn
接口定义:
virtual void signIn() = 0;
示例:
NemoSdkAdaptor::getInstance()->signIn();
API: setCallMode
接口定义:
virtual void setCallMode(XYCallMode mode) = 0;
参数:
mode
: XYCallMode - 会议模式示例:
// 切换到会议模式
NemoSdkAdaptor::getInstance()->setCallMode(XYCallMode_Meeting);
// 切换到通话模式
NemoSdkAdaptor::getInstance()->setCallMode(XYCallMode_Call);
API: getHostMeetingUrl
接口定义:
virtual void getHostMeetingUrl() = 0;
示例:
NemoSdkAdaptor::getInstance()->getHostMeetingUrl();
API: checkHostMeetingPermission
接口定义:
virtual void checkHostMeetingPermission() = 0;
示例:
NemoSdkAdaptor::getInstance()->checkHostMeetingPermission();
API: getSensitiveWords
示例:
NemoSdkAdaptor::getInstance()->getSensitiveWords();
API: getWatermark
示例:
NemoSdkAdaptor::getInstance()->getWatermark();
API: dialDtmf
参数:
dtmf
: DTMF信号示例:
NemoSdkAdaptor::getInstance()->dialDtmf("1234");
参数:
callUrl
: 呼叫URLcommand
: 控制命令示例:
NemoSdkAdaptor::getInstance()->farEndHardwareControl("call_url", "command");
class MeetingController {
private:
bool _isMicMuted = false;
bool _isVideoMuted = false;
bool _isSpeaking = false;
QString _currentMeetingId;
QString _userName;
public:
void setMeetingInfo(const QString& meetingId, const QString& userName) {
_currentMeetingId = meetingId;
_userName = userName;
}
// 发言管理
void applyForSpeaking() {
NemoSdkAdaptor::getInstance()->applySpeaking(true);
}
void cancelSpeaking() {
NemoSdkAdaptor::getInstance()->applySpeaking(false);
}
void raiseHand() {
NemoSdkAdaptor::getInstance()->speakingReq();
}
void endSpeaking() {
NemoSdkAdaptor::getInstance()->speakingEnd();
_isSpeaking = false;
}
// 音视频控制
void toggleMicMute() {
_isMicMuted = !_isMicMuted;
NemoSdkAdaptor::getInstance()->setMicMute(_isMicMuted);
}
void toggleVideoMute() {
_isVideoMuted = !_isVideoMuted;
NemoSdkAdaptor::getInstance()->setVideoMute(_isVideoMuted);
}
void setLocalPreviewResolution(int width, int height) {
NemoSdkAdaptor::getInstance()->setLocalPreviewResolution(width, height);
}
// 会议信息管理
void getMeetingInfo() {
if (!_currentMeetingId.isEmpty()) {
NemoSdkAdaptor::getInstance()->getMeetingRoomInfoForInstant(_currentMeetingId.toStdString());
}
}
void updateUserName(const QString& newName) {
NemoSdkAdaptor::getInstance()->setUserNameInMeeting(newName.toStdString());
_userName = newName;
}
void signInMeeting() {
NemoSdkAdaptor::getInstance()->signIn();
}
// 会议模式控制
void switchToMeetingMode() {
NemoSdkAdaptor::getInstance()->setCallMode(XYCallMode_Meeting);
}
void switchToCallMode() {
NemoSdkAdaptor::getInstance()->setCallMode(XYCallMode_Call);
}
void getHostMeetingUrl() {
NemoSdkAdaptor::getInstance()->getHostMeetingUrl();
}
void checkHostPermission() {
NemoSdkAdaptor::getInstance()->checkHostMeetingPermission();
}
// 安全功能
void getSensitiveWords() {
NemoSdkAdaptor::getInstance()->getSensitiveWords();
}
void getWatermarkInfo() {
NemoSdkAdaptor::getInstance()->getWatermark();
}
// 设备控制
void dialDTMF(const QString& dtmf) {
NemoSdkAdaptor::getInstance()->dialDtmf(dtmf.toStdString());
}
void controlRemoteCamera(const QString& callUrl, const QString& command) {
NemoSdkAdaptor::getInstance()->farEndHardwareControl(
callUrl.toStdString(),
command.toStdString()
);
}
// 会议信息变化回调
void onConfInfoChanged(const XYString& confInfo) {
QString info(confInfo.str());
qDebug() << "Conference info changed:" << info;
emit conferenceInfoChanged(info);
}
// 会议管理变化回调
void onConfMgmtChanged(const XYString& confMgmt) {
QString mgmt(confMgmt.str());
qDebug() << "Conference management changed:" << mgmt;
emit conferenceManagementChanged(mgmt);
}
// 申请发言结果回调
void onApplySpeakingResult(const XYString& code, bool apply) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Apply speaking result:" << (apply ? "success" : "cancelled");
emit applySpeakingResult(apply);
} else {
qDebug() << "Apply speaking failed:" << errCode;
emit applySpeakingFailed(errCode);
}
}
// 签到结果回调
void onSignInResult(const XYString& code) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Sign in successful";
emit signInSuccessful();
} else {
qDebug() << "Sign in failed:" << errCode;
emit signInFailed(errCode);
}
}
// 会议信息回调
void onMeetingRoomInfoForInstant(const XYString& code, const XYString& meetingInfo) {
QString errCode(code.str());
QString info(meetingInfo.str());
if (errCode == SDKError_NoError) {
qDebug() << "Meeting room info:" << info;
emit meetingRoomInfoReceived(info);
} else {
qDebug() << "Get meeting room info failed:" << errCode;
emit meetingRoomInfoFailed(errCode);
}
}
// 敏感词回调
void onGetSensitiveWordsResult(const XYString& code, const XYString& words) {
QString errCode(code.str());
QString sensitiveWords(words.str());
if (errCode == SDKError_NoError) {
qDebug() << "Sensitive words:" << sensitiveWords;
emit sensitiveWordsReceived(sensitiveWords);
} else {
qDebug() << "Get sensitive words failed:" << errCode;
emit sensitiveWordsFailed(errCode);
}
}
// 水印信息回调
void onGetWatermarkResult(const XYString& code, const XYString& watermark) {
QString errCode(code.str());
QString watermarkInfo(watermark.str());
if (errCode == SDKError_NoError) {
qDebug() << "Watermark info:" << watermarkInfo;
emit watermarkInfoReceived(watermarkInfo);
} else {
qDebug() << "Get watermark failed:" << errCode;
emit watermarkInfoFailed(errCode);
}
}
// 会控配置回调
void onGetMeetingControlConfigResult(const XYString& code, const XYString& config) {
QString errCode(code.str());
QString configInfo(config.str());
if (errCode == SDKError_NoError) {
qDebug() << "Meeting control config:" << configInfo;
emit meetingControlConfigReceived(configInfo);
} else {
qDebug() << "Get meeting control config failed:" << errCode;
emit meetingControlConfigFailed(errCode);
}
}
// 会控静音操作变化回调
void onMeetingControlMuteActionChange(bool isMuted) {
qDebug() << "Meeting control mute action changed:" << isMuted;
emit meetingControlMuteActionChanged(isMuted);
}
// 会控视频静音操作变化回调
void onMeetingControlVideoMuteActionChange(bool isMuted) {
qDebug() << "Meeting control video mute action changed:" << isMuted;
emit meetingControlVideoMuteActionChanged(isMuted);
}
// 会控静音结果回调
void onMeetingControlMuteResult(const XYString& code, bool isMuted) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Meeting control mute result:" << isMuted;
emit meetingControlMuteResult(isMuted);
} else {
qDebug() << "Meeting control mute failed:" << errCode;
emit meetingControlMuteFailed(errCode);
}
}
// 会控邀请权限回调
void onMeetingInvitedPermisssion(const XYString& code, bool hasPermission) {
QString errCode(code.str());
if (errCode == SDKError_NoError) {
qDebug() << "Meeting invited permission:" << hasPermission;
emit meetingInvitedPermissionChanged(hasPermission);
} else {
qDebug() << "Get meeting invited permission failed:" << errCode;
emit meetingInvitedPermissionFailed(errCode);
}
}
// Getter方法
bool isMicMuted() const { return _isMicMuted; }
bool isVideoMuted() const { return _isVideoMuted; }
bool isSpeaking() const { return _isSpeaking; }
QString getCurrentMeetingId() const { return _currentMeetingId; }
QString getUserName() const { return _userName; }
};
模式 | 说明 |
| 通话模式 |
| 会议模式 |
方法 | 描述 | 链接 |
申请发言和取消申请发言 | ||
举手发言 | ||
发言结束 |
方法 | 描述 | 链接 |
会议中停止/开始发送Mic音频 | ||
会议中停止/开始发送摄像头视频 | ||
设置本地预览视频分辨率 |
方法 | 描述 | 链接 |
通过会议号查询会议室信息 | ||
会中修改用户名 | ||
签到 |
方法 | 描述 | 链接 |
切换会议模式 | ||
获取会控H5链接 | ||
获取主持会议的相关配置信息 |
方法 | 描述 | 链接 |
获取敏感词 | ||
查询会中水印信息 |
方法 | 描述 | 链接 |
呼叫H323设备 | ||
通过callurl遥控摄像头 |
回调 | 描述 | 链接 |
会议信息变化回调 | ||
会议管理变化回调 | ||
申请发言结果回调 | ||
签到结果回调 | ||
会议信息回调 | ||
敏感词回调 | ||
水印信息回调 | ||
会控配置回调 | ||
会控静音操作变化回调 | ||
会控视频静音操作变化回调 | ||
会控静音结果回调 | ||
会控邀请权限回调 |
枚举 | 描述 | 链接 |
呼叫模式枚举 |