华为云用户手册

  • loginBySSO: 接口描述 该接口用于通过SSO的方式登录和鉴权。 注意事项 除匿名入会外,在使用其他业务之前必须进行成功登录。 方法定义 1 - (void)loginBySSO:(HWMSSOLoginParam *)param callback:(HWMSDKLoginCompleteHandler)callback; 参数描述 表4 HWMSSOLoginParam参数说明 参数 是否必须 类型 描述 domain 是 NSString * 企业 域名 userTicket 是 NSString * code authServerType 是 HWMOpenAuthServerType 鉴权服务器类型 表5 枚举HWMOpenAuthServerType说明 值 描述 HWMOpenAuthServerTypeOauth2 单点登录 返回值 参考:表登录返回HWMLoginResult 示例代码 1 2 3 4 5 6 7 8 91011121314 /// SSO 登录接口- (void)login { HWMSSOLoginParam *param = [[HWMSSOLoginParam alloc] init]; param.domain = domain; param.code = code; param.authServerType = HWMOpenAuthServerTypeOauth2; [[HWMSdk getOpenApi] loginBySSO:param callback:^(NSError * _Nullable error, HWMLoginResult * _Nullable result) { if (error == nil) { NSLog(@"登录成功"); }else{ NSLog(@"登录失败"); } }];}
  • login:password: 接口描述 该接口用于通过账号密码鉴权登录。 注意事项 创建会议,被邀入会等功能只有在登录后才能使用,若不登录,将无法体验完整会议功能。 回调error表示错误信息,nil表示成功。 方法定义 1 - (void)login:( NSString * _Nonnull )account password:( NSString * _Nonnull )password callback:(_Nonnull HWMSDKLoginCompleteHandler)callback;
  • 3类接口描述 iOS SDK的接口分为同步Api、异步Api、全局回调。 同步Api:App主动调用SDK的接口,用于完成某项任务。比如初始化接口initWithConfig。 异步Api:调用SDK接口的时候都会以callback回调方式请求结果。 全局回调:由华为云会议服务端或SDK内部触发的事件通知,SDK以 消息通知 接口的形式通知给App。比如会议来电通知onConfStatusChanged。
  • 示例代码 1 2 3 4 5 6 7 8 910 /// 退出登录- (void)logout { [[HWMSdk getOpenApi] logout:^(NSError * _Nullable error, HWMLogoutResult * _Nullable result) { if (error == nil) { NSLog(@"登出成功"); } else { NSLog(@"登出失败"); } }];}
  • 示例代码 1 2 3 4 5 6 7 8 910111213141516 /// 加入会议- (void)joinMeeting { HWMJoinConfParam *param = [[HWMJoinConfParam alloc] init]; param.confId = @"989156631"; param.password = getPassword(); param.nickname = @"杭州会场"; param.isCameraOn = NO; param.isMicOn = YES; [[HWMSdk getOpenApi] joinConf:param callback:^(NSError * _Nullable error, id _Nullable result) { if (error) { NSLog(@"入会失败%@", error.localizedDescription); } else { NSLog(@"入会成功"); } }];} 在未登录状态下调用该接口时,nickname参数必填。
  • 示例代码 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930 /// 创建会议- (void)creatMeeting { HWMCreateConfParam *param = [[HWMCreateConfParam alloc] init]; param.subject = @"会议标题"; param.isCameraOn = YES;// 是否打开摄像头, 默认关闭 param.isMicOn = YES;// 是否打开麦克风, 默认打开 param.isAutoRecord = NO;// 是否打开会议录制, 默认关闭 param.callInRestrictionType = HWMJoinConfRestrictionAll;// 允许入会范围 // 与会者列表 if (self.selectedMemebrs) { __block NSMutableArray *members = [[NSMutableArray alloc] init]; [self.selectedMemebrs enumerateObjectsUsingBlock:^(HWMContactSelectedModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { HWMAttendeeInfo *member = [[HWMAttendeeInfo alloc] init]; member.accountId = obj.accountId; member.number = obj.number; member.name = obj.name; member.thirdUserId = obj.thirdUserId; [members addObject:member]; }]; param.members = members; } [[HWMSdk getOpenApi] createConf:param callback:^(NSError * _Nullable error, HWMCreateConfResult * _Nullable result) { [self hideLoading]; if (error) { NSLog(@"创会失败%@", error.localizedDescription); }else{ NSLog(@"创会成功"); } }];} 与会者列表可以携带与会者创建会议,创建会议成功后服务端会呼叫携带的与会人入会,不需要可以不传。
  • changeVmrInfo 接口描述 该接口用于修改云会议室信息。 注意事项 尽量只修改来宾密码 方法定义 1 - (void)changeVmrInfo:(HWMModifyVMRParam *)info callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 HWMModifyVMRParam参数说明 参数 是否必须 类型 描述 vmrId 是 NSString * 云会议室唯一ID guestPwd 是 NSString * 来宾密码 chairPwd 是 NSString * 主持人密码 vmrName 是 BOOL 云会议室名称 allowGuestStartConf 是 BOOL 是否允许来宾提前启动会议 confAllowJoinUser 否 HWMJoinConfRestrictionType 允许入会范围 isOpenWaitingRoom 否 BOOL 是否启用等候室 表2 枚举HWMJoinConfRestrictionType说明 参数 描述 HWMJoinConfRestrictionAll 所有用户 HWMJoinConfRestrictionCompany 企业内用户 HWMJoinConfRestrictionInvited 被邀请用户 示例代码 1 2 3 4 5 6 7 8 910111213141516 /// 修改云会议信息- (void)changeVmrInfo { HWMModifyVMRParam * vmrInfo = [[HWMModifyVMRParam alloc] init]; vmrInfo.guestPwd = getGuestPwd(); vmrInfo.chairPwd = getChairPwd(); vmrInfo.vmrName = @"云会议室名称" vmrInfo.vmrId = @"8a8d0d8a718d87d50171a9f6b8de0f40"; vmrInfo.allowGuestStartConf = YES; [[HWMBizSdk getBizOpenApi] changeVmrInfo:vmrInfo callback:^(NSError * _Nullable error, id _Nullable result) { if (error) { NSLog(@"%@", error.localizedDescription); } else { NSLog(@"修改成功"); } }];}
  • Init 接口描述 用于启动并且初始化SDK。 注意事项 调用该接口之前请先修改HwmSdk文件夹下HwmSdk.exe文件的名称。 该接口用于启动并初始化SDK,在调用其他接口之前必须先调用该接口并等待初始化回调结果。 每次调用初始化接口会重新启动SDK,之前所有设置与操作将不复存在。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode Init(HwmInitInfo *initInfo);
  • 参数描述 表1 结构体HwmConfIncomingInfo参数说明 参数 类型 描述 state HwmConfComingState 来电状态。 mediaType HwmMediaType 会议媒体类型。 confId char[] 会议id。 vmrId char[] VMR会议id。 isP2PConf bool 是否立即会议。 thirdUserId char[] 与会者三方账号,appId登录时使用。 表2 枚举HwmConfComingState说明 枚举值 描述 HWM_CONF_COMING_STATE_START 初始状态,来电振铃中。 HWM_CONF_COMING_STATE_ACCEPT 接听状态,已接听来电。 HWM_CONF_COMING_STATE_REJECT 拒绝状态,已拒绝来电。 HWM_CONF_COMING_STATE_TIMEOUT 未响应状态,呼叫超时或者主叫已挂断。 表3 枚举HwmMediaType说明 枚举值 描述 HWM_MEDIA_TYPE_AUDIO 音频。 HWM_MEDIA_TYPE_VIDEO 视频。
  • 参数描述 表1 结构体HwmConfStateInfo参数说明 参数 类型 描述 state HwmState 会议状态。 reason HwmConfEndReason 离会原因。 isP2PConf bool 是否立即会议。 表2 枚举HwmState说明 枚举值 描述 HWM_STATE_OFF 会议未开始或已离开状态。 HWM_STATE_ON 会议已开始状态。 表3 枚举HwmConfEndReason说明 枚举值 描述 HWM_CONF_END_REASON_LEAVE_CONF_HANGUP 离开会议。 HWM_CONF_END_REASON_STOP_CONF_HANGUP 会议已结束。 HWM_CONF_END_REASON_CHAIR_HANGUP 被主持人移出会场。 HWM_CONF_END_REASON_SESSION_TIMER_TIMEOUT 网络中断。 HWM_CONF_END_REASON_NOSTREAM_HANGUP 网络异常。 HWM_CONF_END_REASON_CORP_CONFERENCE_RESOURCE_HAS_BEEN_RUN_OUT 企业资源已达上限。 HWM_CONF_END_REASON_CONF_ONLY_SAME_ENTERPRISE 只允许企业内用户加入会议 HWM_CONF_END_REASON_CONF_ONLY_INVITED 只允许被邀请者加入会议 HWM_CONF_END_REASON_CONF_IS_LOCKED 会议被锁定 HWM_CONF_END_ERR_VMR_NOT_BEEN_HOLD VMR会议来宾不允许激活会议 HWM_CONF_END_REASON_VMR_CONF_CONFLICT VMR会议冲突 HWM_CONF_END_REASON_SERVER_ERROR 服务器异常 HWM_CONF_END_REASON_NUM_OF_PAR_EXCEEDS_UPPER_LIMIT 与会方超出专用VMR套餐的最大与会人数 HWM_CONF_END_REASON_CONF_NUM_OVER_MAX_ALLOWED = 111071116 超出最大在线会议数限制 HWM_CONF_END_MANAGER_SHARE_VMR_NOT_ENOUGH = 111071151 无共享云会议室资源 HWM_CONF_END_REASON_OVER_MAX_PARTICIPANT_NUMBER = 111072101 超过设置的会议方数 HWM_CONF_END_REASON_PARTICIPANT_REACH_MAX_NUM = 111072504 达到系统单个会议人数上限 HWM_CONF_END_REASON_PARTICIPANT_CONF_NOT_EXIST = 111081002 会场所在会议不存在或已结束 HWM_CONF_END_MANAGER_NO_UPSCALE_VMR = 112030001 无高档可用的VMR资源 HWM_CONF_END_REASON_END_EXPIRATION = 414100069 用户,企业或SP失效 HWM_CONF_END_REASON_SDK_CHAIR_END_CONF = 414100074 主持人结束会议 HWM_CONF_END_REASON_SDK_TIMEOVER_END_CONF = 414100075 会议到时间结束会议 HWM_CONF_END_REASON_CALLEE_REFUSED_END_CONF = 414100076 被叫拒接 HWM_CONF_END_REASON_CALLEE_TIMEOUT_END_CONF = 414100077 被叫超时 HWM_CONF_END_FORCE_OPEN_CAMERA_HANGUP = 414100078 强制视频会议挂断 HWM_CONF_END_REASON_RTC_SDK_NETWORK_FAILED = 990000053 网络问题
  • SetLanguageWithCode 接口描述 该接口用于自定义设置SDK国际化语言。默认是中文。 注意事项 实现自定义语言,要求在 \HwmSdk\sdkResources\language\ 目录下创建对应的国际化文件。如新增阿拉伯语则可以创建 \ar\temp.js,通过该接口设置的语言应与系统当前语言保持一致 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode SetLanguageWithCode(HwmLanguage language, const char* languageCode);
  • 参数描述 表1 结构体HwmRecvShareStateInfo参数说明 参数 类型 描述 state HwmState 共享状态。 name char[] 共享者名称。当state为HWM_STATE_ON时才有数据。 number char[] 共享者号码。当state为HWM_STATE_ON时才有数据。 表2 枚举HwmState说明 枚举值 描述 HWM_STATE_OFF 接收的共享已关闭。 HWM_STATE_ON 开始接收到共享。
  • 开发环境准备 在开发的过程中请满足如下环境要求。 表1 环境要求 环境和工具名称 版本要求 说明 操作系统 Windows 10/11专业版 硬件要求: CPU:i5-2400四核 3.1GHz及以上。 内存:4GB及以上。 Microsoft Visual Studio Visual Studio 2017 安装时需要勾选“使用 C++ 的桌面开发”,“用于 x86 和 x64 的 Visual C++ MFC”,“Windows 10 SDK (10.0.15063.0)” 测试资源及App ID申请 - 请参见“开发前准备”。
  • 参数描述 表1 结构体HwmShareStateInfo参数说明 参数 类型 描述 state HwmState 共享状态。 name char[] 共享者名称。当state为HWM_STATE_ON时才有数据。 number char[] 共享者号码。当state为HWM_STATE_ON时才有数据。 shareType HwmShareType 共享类型。 monitor HwmMonitor 共享显示器类型(主屏、副屏)。 appHandle HWND 程序句柄。 stopShareReason HwmStopShareReason 停止共享原因。 表2 枚举HwmState说明 枚举值 描述 HWM_STATE_OFF 共享已关闭。 HWM_STATE_ON 共享已开启。 表3 枚举HwmShareType说明 枚举值 描述 HWM_SHARE_TYPE_MONITOR 屏幕共享。 HWM_SHARE_TYPE_APP 程序共享。 HWM_SHARE_TYPE_WHITE_BOARD 白板共享。 表4 枚举HwmMonitor说明 枚举值 描述 HWM_MONITOR_MAIN 主显示器。 HWM_MONITOR_SECONDARY 副显示器。 表5 枚举HwmStopShareReason说明 枚举值 描述 HWM_STOP_SHARE_BY_NORMAL 正常停止共享。 HWM_STOP_SHARE_BY_REJOIN_CONF MMR迁移。
  • 参数描述 表1 结构体HwmCorpConfigInfo参数说明 参数 类型 描述 enablePstn bool 是否支持手机呼叫。 enableSms bool 是否支持短信通知。 enableRecord bool 是否支持会议录制。 allowGuestStartConf bool 是否允许来宾提前启动会议。 allowGuestStartConfTime unsigned int 允许来宾提前入会时间范围(单位:分钟) :0-随时,n-提前n分钟启动会议。 enableShowAddressBookStructure bool 是否支持通讯录显示。 corpEnableSummary bool 是否支持会议纪要。 corpEnableForbidScreenShots bool 是否支持禁止截屏。
  • StopShare 接口描述 该接口用于结束会中共享。SDK的UI已经实现了“停止共享”功能,如果第三方App不需要通过程序控制停止共享,则不用调用该接口。 注意事项 不在共享中不应调用此接口。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode StopShare(); 回调函数 1 virtual void OnStopShareResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 无。 返回值 表1 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9101112 /*** 结束共享*/void demoConfCtrlDlg::OnBnClickedButtonStopShare(){ //结束共享 int ret = hwmsdkagent::StopShare(); if (hwmsdk::HWM_COMMON_SUC CES S != ret) { AfxMessageBox(_T("StopShare error")); }}
  • 参数描述 表1 参数说明 参数 类型 描述 updateType HwmConflistUpdateType 更新类型。 confInfoList HwmConfListInfo* 会议列表参数信息。 confInfoLen unsigned int 会议列表参数信息的长度。 表2 枚举HwmConflistUpdateType说明 枚举值 描述 CONFLIST_UPDTAE_ALL 会议列表全量更新。 CONFLIST_UPDATE_ADD 会议列表有增加或者修改。编辑会议导致会议列表变更会上报该值。 CONFLIST_UPDATE_DELETE 会议列表有删除。 表3 结构体HwmConfListInfo参数说明 参数 类型 描述 confId char[] 会议ID。 confSubject char[] 会议主题。 chairmanPwd char[] 主持人密码。 guestPwd char[] 来宾密码。 audiencePwd char[] 观众密码。 startTimeStamp long long 会议开始时间,UTC时间戳,精度秒。 endTimeStamp long long 会议结束时间,UTC时间戳,精度秒。 timeZone char[] 时区码 mediaType HwmMediaType 媒体类型 表2。 scheduserName char[] 会议预定者名称。 vmrConferenceId char[] 用于云会议显示的ID。 chairJoinUri char[] 主持人加入会议uri链接 guestJoinUri char[] 来宾加入会议uri链接 audienceJoinUri char[] 观众加入会议的链接 confStateType HwmConfState 会议状态 isWebinar bool 是否是网络研讨会 selfConfRole HwmConfRole 本人在会议中的角色表5。 customInfo char[] 自定义扩展信息 表4 枚举HwmConfState说明 枚举值 描述 HWM_CONF_STATE_SCHEDULE 预定状态。 HWM_CONF_STATE_CREATING 正在创建状态。 HWM_CONF_STATE_GOING 会议已经开始。 HWM_CONF_STATE_DESTROYED 会议已经关闭
  • JoinConfByRandom 接口描述 通过邮件会议通知中的会议链接入会时(会议链接如:https://bmeeting.huaweicloud.com/#/j/981924330/e11ddec62ee760734fcf2ba55b79937eac2aa68677caf659),链接里面的是会议ID(即举例中的981924330)和会议的Random码(即举例中的e11ddec62ee760734fcf2ba55b79937eac2aa68677caf659)。第三方App需要调用本接口加入会议。 如果预约会议时选择没有来宾密码,会议链接只有会议ID,没有Random码。 注意事项 在登录和未登录状态下都可以调用该接口。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode JoinConfByRandom(HwmJoinConfByRandomInfo *joinConfByRandomInfo); 回调函数 1 virtual void OnJoinConfByRandomResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 结构体HwmJoinConfByRandomInfo参数说明 参数 是否必须 类型 描述 confId 是 char[] 会议ID。 random 否 char[] 48位会议密码映射值。来源于分享会议信息中的会议链接尾部。会议不要求来宾密码时,可以为空字符串。 name 否 char[] 会议昵称。在已登录状态下可为空,已登录时为空将使用登录的用户名作为会场名。匿名入会必须传该名字或者提前设置会场名。 domain 否 char[] 域名。离线入会时使用。 isCloseSpk 否 bool 是否关闭扬声器,true关闭扬声器;false不关闭扬声器。 返回值 表2 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9101112131415161718 // 通过会议ID和Random加入会议int demoJoinConfByRandomDlg::clickJoinConfByRandom(){ // 填写会议ID和密码映射值等;Random入会时,支持配置会场名称 hwmsdkagent::HwmJoinConfByRandomInfo data; memset(&data, 0, sizeof(hwmsdkagent::HwmJoinConfByRandomInfo)); strncpy_s(data.confId, GetMeetingID().c_str(), HWM_MAX_CONF_ID_LEN); strncpy_s(data.random, GetAccessCode().c_str(), HWM_MAX_RANDOM_LEN); strncpy_s(data.name, GetParticipantName().c_str(), HWM_MAX_DISPLAY_NAME_LEN); data.isCloseSpk = false; // 设置麦克风和摄像头开关 int ret = EnableFeature(hwmsdkagent::HWM_ENABLE_FEATURE_TYPE_MIC_SWITCH, true); ret = EnableFeature(hwmsdkagent::HWM_ENABLE_FEATURE_TYPE_CAM_SWITCH, false); ret = hwmsdkagent::JoinConfByRandom(&data); return ret;} 在加入会议前可通过调用EnableFeature修改麦克风、摄像头状态。
  • SetWaterMark 接口描述 该接口用于设置水印自定义内容注入,若未进行设置,将默认使用内部优先级来展示水印内容。 图1 自定义水印 注意事项 该接口必须在会前调用,会中调用不会即时生效。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 企业级水印开关未打开的场景下,水印自定义内容注入也不会生效。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode SetWaterMark(const HwmWaterMarkInfo * wtInfo); 回调函数 1 virtual void OnSetWaterMarkInjectInfoResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 参数说明 参数 是否必须 类型 描述 wtInfo 是 HwmWaterMarkInfo 设置水印注入信息。 表2 结构体HwmWaterMarkInfo参数说明 参数 类型 描述 content char[] 设置用户自定义水印注入内容。 color HwmWaterMarkColorType 设置水印字体颜色。 表3 枚举HwmWaterMarkColorType说明 枚举值 描述 HWM_WATERMARK_COLOR_TYPE_LIGHT 浅色 #CCCCCC。 HWM_WATERMARK_COLOR_TYPE_STANDARD 标准色 #999999。 HWM_WATERMARK_COLOR_TYPE_DARKER 深色 #666666。 返回值 表4 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 910111213141516 /*** 设置水印*/void demoWaterMarkInfoDlg::OnBnClickedSetWaterMarkInjectInfo(){ unsigned int color = hwmsdkagent::HWM_WATERMARK_COLOR_TYPE_LIGHT; hwmsdkagent::HwmWaterMarkInfo injectInfo = {0}; strncpy_s(injectInfo.content, GetContent().c_str(), HWM_MAX_WATERMARK_CONTENT_LEN); injectInfo.color = (hwmsdkagent::HwmWaterMarkColorType)color; int ret = hwmsdkagent::SetWaterMark(&injectInfo); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("SetWaterMark inject info failed")); }}
  • Config 接口描述 Windows SDK中已经提供了会议中的界面,界面上的部分元素是可以自定义的。可以自定义的界面元素如下: 会议窗口名称 会议开始后,在Windows任务栏上会生成一个会议的图标,鼠标指向该图标时会显示会议的缩略窗口,该窗口的名称可以自定义。 图1 会议窗口名称 会议窗口的图标,可以替换HwmSdk\sdkResources\nativeimg目录下的video.ico图标文件。 会议信息及会议链接前缀 会议链接的域名前缀默认是https://bmeeting.huaweicloud.com/(如https://bmeeting.huaweicloud.com/#/j/982989574),如果入会Portal是第三方自己开发的,这个前缀需要自定义。 整个会议信息也可以自定义显示或者隐藏。 图2 会议信息 来电窗口 会议来电窗口默认在收到来电时弹出,可配置成隐藏,在收到来电通知时调用会议来电应答接口来应答: 图3 来电窗口 会控按钮 删除或者修改SDK中自带的会控按。具体可以删除和修改的按钮见按钮ID定义表。 自定义新增按钮。具体用例见自定义会控按钮。 图4 底部工具栏和更多菜单 图5 共享工具栏和更多菜单 图6 自定义子菜单项: 自定义会议信息窗口 图7 自定义会议信息框 图8 状态工具栏 图9 与会者详情头像点击 自定义会议信息窗口请参考“显示会议信息框”和“销毁会议信息框”。 注意事项 只有需要更改会议界面默认显示样式时,才需要调用该接口,若默认样式已满足要求,可以不调用该接口。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode Config(char uiConfig[HWM_MAX_CONFIG_LEN]);
  • 参数描述 表1 结构体HwmConfInfo参数说明 参数 类型 描述 url char[] 当前会议链接,可以分享通过浏览器打开进行入会。 confId char[] 会议id。 role HwmConfRole 会议角色。主持人、普通与会者等。 chairmanPwd char[] 会议主持人密码。 generalPwd char[] 会议来宾密码。 subject char[] 会议主题。 isOtherCorpConf bool 是否是外部企业的会议。如果是加入外部企业的会议或者匿名入会是true,否则是false。 isCreator bool 是否是会议预订者。 isInBreakoutSubConf bool 是否在讨论组中。 customInfo char[] 自定义扩展信息 表2 枚举HwmConfRole说明 枚举值 描述 HWM_CONF_ROLE_ATTENDEE 普通与会者。 HWM_CONF_ROLE_CHAIRMAN 主持人。 HWM_CONF_ROLE_AUDIENCE 观众。 HWM_CONF_ROLE_COHOST 联席主持人。 HWM_CONF_ROLE_WAITING 等候室成员。
  • GetVmrList 接口描述 该接口用于获取VMR列表。 注意事项 该接口在已登录状态下才能调用。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode GetVmrList(); 回调函数 该接口已废弃,请参考新回调OnGetVmrInfoListResult 1 virtual void OnGetVmrListResult(hwmsdk::HwmErrCode ret, const char* reason, const HwmVmrInfo* vmrInfoList, unsigned int listLen) {}; 新回调 1 virtual void OnGetVmrInfoListResult(hwmsdk::HwmErrCode ret, const char* reason, const HwmVmrListInfo* vmrListInfo) {}; 参数描述 无。 返回值 表1 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 表2 结构体HwmVmrInfo参数说明 参数 类型 描述 vmrConferenceId char[] 云会议室上的固定会议ID。 vmrId char[] 云会议室唯一ID。 chairmanPwd char[] 云会议室主持人密码。 guestPwd char[] 云会议室来宾密码。 type HwmVmrIdType 云会议室类型。 maxParties int 云会议室最大方数。 name char[] 会议室名称。 allowGuestStartConf bool 是否允许来宾提前启动会议。 joinConfRestrictionType HwmJoinConfPermissionType 允许入会范围限制。 isOpenWaitingRoom bool 等候室开启开关。 表3 枚举HwmVmrIdType说明 枚举值 描述 PERSONAL_MEETING_ID 个人会议ID。 CLOUD_MEETING_ROOM_ID 云会议室ID。 表4 结构体HwmVmrListInfo参数说明 参数 类型 描述 numOfVmrs unsigned int 云会议室个数。 vmrs HwmVmrInfo 云会议室信息。 isEnableShareVmr bool 是否开启共享vmr。 示例代码 1 2 3 4 5 6 7 8 91011 /*** 获取Vmr列表*/void demoBookConfDlg::GetVmrList(){ int ret = hwmsdkagent::GetVmrList(); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("GetVmrList error")); }}
  • 常见错误码 表1 HwmErrCode枚举说明 变量 值 描述 HWM_COMMON_ERR_FAILED 1 通用错误。 HWM_COMMON_ERR_PA RAM _ERROR 2 参数错误。 HWM_ LOG IN_ERR_ACCOUNT_OR_PASSWORD_ERROR 10006 账号或密码错误。 HWM_LOGIN_ERR_ACCOUNT_LOCKED 10007 账号被锁定。 HWM_LOGIN_ERR_IP_OR_DEVICE_FORBIDDEN 10008 IP或设备被禁止接入。 HWM_LOGIN_ERR_ACCOUNT_OR_ENTERPRISE_NOT_ACTIVE 10009 账号或企业未激活。 HWM_LOGIN_ERR_AUTH_INFO_TIMEOUT 10011 鉴权信息过期(是否使用UTC时间,是否经过校准)。 HWM_LOGIN_ERR_ACCOUNT_STOPED 10013 账号被停用 HWM_CONF_ERR_CONF_ID_OR_PASSWORD_ERROR 20001 会议id或密码错误。 HWM_CONF_ERR_CONF_LOCKED 20002 会议被锁定。 HWM_CONF_ERR_NOT_IN_CONF 20003 不在会议中,接口调用非法。 HWM_CONF_ERR_VMR_NOT_BEEN_HOLD 20004 VMR会议,来宾不允许激活会议 HWM_CONF_ERR_SHARE_LOCKED 20005 共享被锁定 HWM_CONF_ERR_NOT_IN_DATA_CONF 20006 不在数据会议中 HWM_CONF_ERR_CONF_ONLY_SAME_ENTERPRISE 20007 只允许企业内用户加入会议 HWM_CONF_ERR_CONF_ONLY_INVITED 20008 只允许被邀请者加入会议 HWM_CALL_ERR_THIRD_USER_ID_NO_EXIST 20009 发起呼叫的第三方账号不存在 HWM_ERR_NOT_IN_CONF_OR_CALL 20010 不在会议或呼叫中 HWM_ERR_ALREADY_EXIST_CONF_OR_CALL 20011 已存在一路会议或呼叫 HWM_CONF_ERR_PASSWORD_ERROR_LOCKED 20012 多次输入密码错误导致会议暂时被锁定 HWM_CONF_ERR_CONF_ENDED 20013 会议已结束 HWM_CONF_ERR_SAME_PWD_WITH_CHAIR 20014 来宾密码与主持人密码相同 HWM_CONF_ERR_NUM_OF_PAR_EXCEEDS_UPPER_LIMIT 20015 与会方超出专用VMR套餐的最大与会人数 HWM_CONF_ERR_CONF_NOT_ON_LOCAL_STATION 20016 会议不在本站点 HWM_CONF_ERR_ENTERPRISE_CONCURRENCY_RESOURCE_NOT_ENOUGH 115022001 企业并发资源不足 HWM_CONF_ERR_CONF_DATA_NOT_FOUND 111070005 会议不存在 HWM_CONF_ERR_VMR_DATA_NOT_FOUND 111070006 个人云会议室不存在 HWM_CONF_ERR_CONF_ROLE_AUTHENTICATION_FAILED 111070010 权限不足,无法查看会议 HWM_CONF_ERR_VMR_CONF_CONFLICT 111071106 VMR会议冲突 HWM_CONF_ERR_MODIFY_FAIL_AS_CONF_ALREADY_STARTED 111071065 正在召开会议,无法编辑会议详情 HWM_ORG_CONCURRENT_PARTICIPANTS_NUMBER_IS_ZERO 111071060 企业未配置并发会议资源,无法使用个人会议ID和随机会议ID发起会议 HWM_CONF_USER_NOT_VMR_OWNER 111071063 非云会议室拥有者 HWM_CONF_ERR_CANCEL_FAIL_AS_CONF_STARTED 111071067 会议正在召开中,不允许取消会议 HWM_CONF_ERR_START_TIME_LESS_THAN_CURRENT_TIME 111071013 开始时间早于当前时间 HWM_CONF_ERR_START_TIME_OVER_MAX_SCHEDULE_TIME 111071014 会议开始时间超出最大预订时间范围 HWM_CONF_ERR_VMR_PWM_SAME_AS_MEETING_ID 201080017 来宾密码不能和会议ID相同 HWM_CONF_ERR_PARTICIPANT_CONF_NOT_SUPPORT 111084013 不支持该会议 HWM_CONF_ERR_ATTENDEES_NUMBER_EXCEED_LIMIT 111071066 与会方数量超出上限 HWM_CONF_ERR_VMR_DATA_STATUS_ILLEGAL 111073007 VMR套餐状态非法 HWM_CONF_ERR_WAIT_APPLY_RESOURCE 115029006 等待申请资源中 HWM_CONF_ERR_SDK_SVN_DETECT_FAILE 411000017 svn端口探测不通 HWM_CONF_ERR_RTC_NOT_SUPPORT_STG 411000019 RTC不支持STG模式 HWM_CONF_ERR_OVER_MAX_PARTICIPANT_NUMBER 111072101 超过设置的会议方数 HWM_CONF_ERR_AUDIENCE_VMR_LOGIC_RESOURCE_NOT_ENOUGH 111072202 观众数超过VMR套餐中的观众最大并发资源数 HWM_CONF_ERR_PARTICIPANT_VMR_LOGIC_RESOURCE_NOT_ENOUGH 111072203 主持人与嘉宾超过VMR套餐中的最大并发资源数 HWM_CONF_ERR_PARTICIPANT_CONF_NOT_EXIST 111081002 会场所在会议不存在或已结束 HWM_VMR_RESOURCE_UNAVAILABLE 201080000 云会议资源不可用 HWM_LOGIN_ERR_ACCOUNT_IS_UNBOUND 206010075 账号已经解绑 HWM_CONF_ERR_SERVER_ERROR 990000018 连接不上服务器 HWM_CONF_ERR_JOIN_ROOM_FAIL 990000019 无法加入会议 HWM_CONF_ERR_SERVER_BUSY 990000020 服务器繁忙 HWM_CONF_ERR_RTC_JOIN_ROOM_AUTH_FAIL 990000022 会议鉴权信息校验失败 HWM_CONF_ERR_SERVER_CONNECTION_ERROR 990000025 服务器连接异常 HWM_LOGIN_ERR_CA_VERIFY_FAILED 412100012 服务器CA证书校验失败 HWM_LOGIN_ERR_CURLE_EXTERN_CONNECT_TIMEOUT 412100017 代理通信超时,tcp建链失败,大概率是代理配置错误 HWM_LOGIN_ERR_CURLE_EXTERN_CLOSED_BY_PROXY 412100018 链接被代理断开,大概率是服务器地址配置错误 HWM_LOGIN_ERR_CURLE_COULDNT_RESOLVE_PROXY 412100024 proxy域名解析失败 HWM_LOGIN_ERR_CURLE_COULDNT_RESOLVE_HOST 412100025 服务器域名解析失败 HWM_LOGIN_E_ERR_MNG_FAILED 412100044 管理面故障 HWM_AGENT_ERR_CALLBACK_TIMEOUT 90001 等待回调超时 HWM_AGENT_ERR_IN_PROCESS 90002 接口正在处理中 HWM_AGENT_ERR_NOT_LOGIN 90003 未登录,接口调用非法。 HWM_AGENT_ERR_NOT_INITED_END 90004 未初始化或初始化尚未完成 HWM_AGENT_ERR_NOT_SUPPORT_END 90005 此版本不支持 HWM_AGENT_ERR_OPERATION_INTERRUPT 90012 操作中断 父主题: 错误码参考
  • SetConfIncomingAnswerResult 接口描述 该接口用于收到会议来电时设置应答。一般用于设置会议来电的自动拒绝或者自动接听。 注意事项 只有在收到会议来电后才能调用该接口(在通知接口OnConfIncoming中调用),其他情况不应调用该接口。 调用该接口设置应答类型:弹窗选择、拒绝、接听。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 如果是自动拒接来电,需要在Init初始化成功后,需要调用Config接口将isHideConfIncomingWindow设置成TRUE。 需要拒接时SetCallIncomingAnswerResult的参数传HWM_INCOMING_ANSWER_DECLINE,需要正常弹窗接听时传HWM_INCOMING_ANSWER_NORMAL。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode type(HWMInComingAnswerType type); 回调函数 1 virtual void OnSetConfIncomingAnswerResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 枚举HWMInComingAnswerType说明 枚举值 描述 HWM_INCOMING_ANSWER_NORMAL 来电时应答采用原始体验弹窗选择。 HWM_INCOMING_ANSWER_DECLINE 来电时拒接 HWM_INCOMING_ANSWER_ANSWER 来电时接听 返回值 表2 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9101112 /*** 收到会议来电后拒接来电*/void demoConfCtrlDlg::OnBnClickedSetConfIncomingAnswerResult(){ hwmsdkagent::HWMInComingAnswerType type = HWM_INCOMING_ANSWER_DECLINE; int ret = hwmsdkagent::SetConfIncomingAnswerResult(type); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("SetConfIncomingAnswerResult error")); }}
  • 70.4.5更新内容 1.预约会议接口添加返回值参数说明,具体请见表3 2.sdk初始化约束,限制初始化必须在Application的OnCreate主线程中执行 3.新增获取用户当前状态接口,具体请见获取用户状态 4.会中新增主持人邀请他人共享,主持人也可快速取消共享 5.移动端的前后摄像头切换按钮放到主界面上 6.会议日志大小优化 7.libs文件夹中aar文件整合,使用时需先清空之前历史版本文件,重新导入 父主题: 版本更新内容
  • producer使用建议 同步复制客户端需要配合使用:acks=all 配置发送失败重试:retries=3 发送优化:对于时延敏感的信息,设置linger.ms=0。对于时延不敏感的信息,设置linger.ms在100~1000之间。 生产端的JVM内存要足够,避免内存不足导致发送阻塞。 时间戳设置为与当地时间一致,避免时间戳为未来时间导致消息无法老化。 尽量复用producer,不要频繁创建producer。当producer开启幂等时(生产者客户端3.0及之后的版本默认开启幂等),生产消息会在服务端创建生产者状态对象,若频繁创建producer,会导致服务端创建大量生产者状态对象后无法及时回收,服务端内存占用飙升,进而导致服务端性能急剧下降。如果不需要使用幂等功能,请将“enable.idempotence”设置为“false”。
  • consumer使用建议 consumer的owner线程需确保不会异常退出,避免客户端无法发起消费请求,阻塞消费。 确保处理完消息后再做消息commit,避免业务消息处理失败,无法重新拉取处理失败的消息。 通常不建议对每条消息都进行commit,如果对每条消息都进行了commit,会导致OFFSET_COMMIT请求过多,进而导致CPU使用率过高。例如:如果一个消费请求拉取1000条消息,每条都commit,则commit请求TPS是消费的1000倍,消息体越小,这个比例越大。建议隔一定条数或时间,批量commit,或打开enable.auto.commit,这样设置会存在一个缺点,即在客户端故障时,可能丢失一部分缓存的消费进度,导致重复消费。请根据业务实际情况,设置批量commit。 consumer不能频繁加入和退出group,频繁加入和退出,会导致consumer频繁做rebalance,阻塞消费。 同一消费组内consumer数量不能超过该消费组订阅的分区总数,否则会有consumer拉取不到消息。 consumer需周期poll,维持和server的心跳,避免心跳超时,导致consumer频繁加入和退出,阻塞消费。 consumer拉取的消息本地缓存应有大小限制,避免OOM(Out of Memory)。 consumer session设置为30秒,session.timeout.ms=30000。 Kafka不能保证消费重复的消息,业务侧需保证消息处理的幂等性。 消费线程退出要调用consumer的close方法,避免同一个组的其他消费者阻塞session.timeout.ms的时间。 消费组名称开头不使用特殊字符(如#),使用特殊字符可能会导致 云监控 无法展示此消费组的监控数据。
  • 迁移准备 配置网络环境。 Kafka实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生成与消费客户端需要有公网访问权限,并配置如下安全组。 表1 安全组规则 方向 协议 端口 源地址 说明 入方向 TCP 9094 Kafka客户端所在的IP地址或地址组 通过公网访问Kafka(明文接入)。 入方向 TCP 9095 Kafka客户端所在的IP地址或地址组 通过公网访问Kafka(密文接入)。 创建目标Kafka实例。 目标Kafka的规格不能低于原业务使用的Kafka规格。具体请参考购买Kafka实例。 在目标Kafka实例中创建Topic。 在目标Kafka实例上创建与原Kafka实例相同配置的Topic,包括Topic名称、副本数、分区数、消息老化时间,以及是否同步复制和落盘等。具体请参考创建Kafka Topic。
  • 迁移方案三:先迁消费,再迁生产 指首先通过Smart Connect同步两个Kafka的消息,其次将消费端迁移到新Kafka,最后将生产端迁移到新Kafka。 本方案依赖于Smart Connect,Smart Connect实时同步源端和目标端的数据,但是消费进度是通过批处理同步的,可能会导致源端和目标端每个分区的消费进度存在0-100之间的差异,存在少量重复消费问题。此场景适用于生产端不可停止,端到端有时延要求,但是可以兼容少量重复消费的业务。 创建Kafka数据复制的Smart Connect任务,用于同步两个Kafka的消息。具体步骤请参见配置Kafka间的数据复制。 在Kafka控制台的“消息查询”页面,查看两个Kafka的最新消息是否一致,确认两个Kafka的同步进度是否一致。具体步骤请参见查看Kafka消息。 是,执行3。 否,在监控页面查看两个Kafka的“Kafka每分钟同步数据量”是否正常,如果正常,先等待两个Kafka的同步进度一致,然后执行3。 将消费客户端的Kafka连接地址修改为新Kafka实例的连接地址。 重启消费业务,使得消费者从新Kafka实例中消费消息。 观察消费者是否能正常从新Kafka实例中获取数据。 修改生产客户端,Kafka连接地址改为新Kafka实例的连接地址。 重启生产客户端,将生产业务迁移到新Kafka实例中。 生产业务迁移后,观察连接新Kafka实例的消费业务是否正常。 迁移结束。
  • 迁移方案二:同时消费,后迁生产 指消费者业务启用多个消费客户端,分别向原Kafka和新Kafka实例消费消息,然后将生产业务切到新Kafka实例,这样能确保所有消息都被及时消费。 本方案中消费业务会在一段时间内同时消费原Kafka和新Kafka实例。由于在迁移生产业务之前,已经有消费业务运行在新Kafka实例上,因此不会存在端到端时延的问题。但在迁移生产的开始阶段,同时消费原Kafka与新Kafka实例,会导致部分消息之间的生产顺序无法保证,存在消息乱序的问题。此场景适用于对端到端时延有要求,却对消息顺序不敏感的业务。 启动新的消费客户端,配置Kafka连接地址为新Kafka实例的连接地址,消费新Kafka实例中的数据。 原有消费客户端需继续运行,消费业务同时消费原Kafka与新Kafka实例的消息。 修改生产客户端,Kafka连接地址改为新Kafka实例的连接地址。 重启生产客户端,将生产业务迁移到新Kafka实例中。 生产业务迁移后,观察连接新Kafka实例的消费业务是否正常。 等待原Kafka中数据消费完毕,关闭原有消费业务客户端。 迁移结束。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全