华为云用户手册

  • setNetworkModeWithNetworkInfo: 接口描述 如华为云会议的媒体节点下沉部署到企业,并且管理节点也是通过企业内的代理访问,需要将网络模式设置成“企业内外接入”。 企业内的App无法直接访问公网(即媒体节点下沉和管理节点代理下沉场景)的情况下才需要调用该接口。 注意事项 该接口非必需调用,若不设置,则使用默认模式。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 - (HWMSDKERR)setNetworkModeWithNetworkInfo:(HWMSDKNetWorkModeInfoModel *)networkInfo; 参数描述 表1 HWMSDKNetWorkModeInfoModel说明 参数 是否必须 类型 描述 accessType 是 HWMNetworkAccessType 网络类型 表2 枚举HWMNetworkAccessType说明 值 描述 HWMSDKAccessTypeAuto 默认值 HWMSDKAccessTypeInner 内网接入 HWMSDKAccessTypeOuter 外网接入 返回值 无 示例代码 1 2 3 HWMSDKNetWorkModeInfoModel *networkInfo = [[HWMSDKNetWorkModeInfoModel alloc] init]; networkInfo.accessType = HWMSDKAccessTypeAuto; HWMSDKERR ret = [[HWMSDKNetworkService shareInstance] setNetworkModeWithNetworkInfo:networkInfo];
  • 示例代码 1 2 3 4 5 6 7 8 9 10 /** * 退出sdk */ async exitSdk(){ const apiService = await new ApiService(); let setResult = await apiService.exit(); if(setResult != 0){ window.electron.ipcRenderer.send("show-error-alert", "exit error = " + setResult); } }
  • editCycleConf 接口描述 该接口用于编辑周期会议。 注意事项 该接口在已登录状态下才能调用。 所有字段必填,编辑修改的字段可来源于用户输入,其他不想修改的属性一定要取会议详情对应字段来赋值。 方法定义 1 - (void)editCycleConf:(HWMBookCycleConfParam *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback 参数描述 表1 HWMBookCycleConfParam参数说明 参数 是否必须 类型 描述 confParam 是 HWMOrderConfParam 普通会议参数 cycleConfParam 是 HWMCycleConfParam 周期会议参数 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /// 编辑周期会议 - (void)editCycleConf{ HWMOrderConfParam * orderConfParam = [[HWMOrderConfParam alloc] init]; orderConfParam.confSubject = @"我的预约会议"; orderConfParam.isAutoRecord = YES; orderConfParam.startTime = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间 orderConfParam.duration = 30; //会议持续时长(分钟) orderConfParam.timeZone = 56; orderConfParam.callInRestrictionType = HWMCallRestrictionAll; HWMAttendeeInfo * attendeeInfo = [[HWMAttendeeInfo alloc] init]; attendeeInfo.name = @"Mike"; attendeeInfo.number = @"+991116003543"; attendeeInfo.isMute = YES; orderConfParam.attendee = @[attendeeInfo]; HWMCycleConfParamModel * cycleConfParamModel = [[HWMCycleConfParamModel alloc] init]; cycleConfParamModel.startDate = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间; cycleConfParamModel.endDate = 1636560000; cycleConfParamModel.cycleType = HWMSDKCycleTypeWeek; cycleConfParamModel.preRemindDays = 1; HWMBookCycleConfParam *param = [[HWMBookCycleConfParam alloc] init]; param.confParam = orderConfParam; param.cycleConfParam = cycleConfParamModel; [[HWMBizSdk getBizOpenApi] editCycleConf:param callback:^(NSError * _Nullable error, id _Nullable result) { if (!error) { NSLog(@"book cycle conf success"); }else{ NSLog(@"book cycle conf fail errorCode : %zd",error.code); } }]; }
  • bookCycleConf 接口描述 该接口用于预约周期会议。 注意事项 不在登录状态下,不应调用该接口。 会议开始时间必须晚于当前时间,会议时长应大于15分钟。 个人会议或者云会议室的时候要传入vmrId。 携带与会者入会的时候需要传入attendees。 周期会议最大跨度一年,会议数量不超过50,超过则只预约前50个会议 callback中的result返回会议详情信息(HWMConfDetail) 方法定义 1 - (void)bookCycleConf:(HWMBookCycleConfParam *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 HWMBookCycleConfParam参数说明 参数 是否必传 类型 描述 confParam 是 HWMOrderConfParam 预约会议参数 cycleConfParam 是 HWMCycleConfParam 周期子会议参数 表2 HWMCycleConfParam参数说明 参数 是否必须 类型 描述 startDate 是 NSTimeInterval 开始日期-时间戳,精度秒(0时区) endDate 是 NSTimeInterval 结束日期-时间戳,精度秒(0时区) cycleMode 是 HWMCycleMode 周期类型 interval 是 NSUInteger 周期区间。 1、周期类型选择了按天,表示每几天召开一次,取值范围[1,15]; 2、周期类型选择了Week,表示每几周召开一次,取值范围[1,5]; 3、周期类型选择了Month,interval表示隔几月,取值范围[1,3] listPoints 是 NSString * 周期内的会议召开点。仅当按周和月时有效。数据格式(中间用逗号隔开):1,3,5,7 preRemindDays 是 NSUInteger 周期子会议提前通知天数。 表3 枚举HWMCycleMode说明 值 说明 HWMCycleModeDay 以天为周期 HWMCycleModeWeek 以周为周期 HWMCycleModeMonth 以月为周期 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 /// 预约周期会议 - (void)bookCycleConf{ HWMOrderConfParam * orderConfParam = [[HWMOrderConfParam alloc] init]; orderConfParam.confSubject = @"我的预约会议"; orderConfParam.isAutoRecord = YES; orderConfParam.startTime = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间 orderConfParam.duration = 30; //会议持续时长(分钟) orderConfParam.timeZone = 56; orderConfParam.callInRestrictionType = HWMCallRestrictionAll; HWMAttendeeInfo * attendeeInfo = [[HWMAttendeeInfo alloc] init]; attendeeInfo.name = @"Mike"; attendeeInfo.number = @"+991116003543"; attendeeInfo.isMute = YES; orderConfParam.attendee = @[attendeeInfo]; HWMCycleConfParamModel * cycleConfParamModel = [[HWMCycleConfParamModel alloc] init]; cycleConfParamModel.startDate = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间; cycleConfParamModel.endDate = 1636560000; cycleConfParamModel.cycleType = HWMSDKCycleTypeWeek; cycleConfParamModel.preRemindDays = 1; HWMBookCycleConfParam *param = [[HWMBookCycleConfParam alloc] init]; param.confParam = orderConfParam; param.cycleConfParam = cycleConfParamModel; [[HWMBizSdk getBizOpenApi] bookCycleConf:param callback:^(NSError * _Nullable error, id _Nullable result) { if (!error) { NSLog(@"book cycle conf success"); }else{ NSLog(@"book cycle conf fail errorCode : %zd",error.code); } }]; }
  • EditConf 接口描述 该接口用于编辑已预约的会议。 注意事项 该接口在已登录状态下才能调用。 调用该接口时,仅能编辑尚未开始的会议,若会议已召开,接口将返回失败。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 所有字段必填,编辑会议前需要查询会议详情,不需要变更的数据请使用查询会议详情返回的数据赋值。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode EditConf(const HwmEditConfParam *confParam); 回调函数 1 virtual void OnEditConfResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 结构体HwmEditConfParam参数说明 参数 是否必须 类型 描述 confId 是 char[] 会议ID。 subject 是 char[] 会议主题。 startTime 是 long long 会议开始时间时间戳(utc时间),second。 duration 是 int 会议时长,minute。 confType 是 HwmConfMediaType 会议类型。默认视频会议。 isNeedConfPwd 是 bool 是否需要密码。默认不需要密码。 isRecordOn 是 bool 录制会议开关。(字段即将废弃,不建议使用) isLiveOn 否 bool 保留。编辑会议时透传会议详情此字段。 isAutoRecordOn 是 bool 会议自动录制开关。 timeZone 是 int 时区码,请参考时区表。 vmrFlag 是 bool 是否是vmr会议。不可修改,填入会议详情返回值 vmrId 否 char[] 云会议室唯一ID。不可修改,填入会议详情返回值 joinConfRestrictionType 是 HwmJoinConfPermissionType 允许入会范围限制。默认所有用户。 isSmsOn 是 bool 发送短信通知开关,企业配置里面需要开启,否则不生效。 isMailOn 是 bool 发送邮件通知开关。 isEmailCalendarOn 是 bool 发送邮件日历开关。 attendees 是 HwmAttendeeInfo* 与会者列表。 attendeeLen 是 unsigned int 与会者列表长度。 vmrConfIdType 是 HwmVmrConfIdType 云会议室的会议ID类型。不可修改,会议详情中vmrConferenceId非空,填入HWM_VMR_CONF_ID_TYPE_FIXED;会议详情中vmrConferenceId为空,填入HWM_VMR_CONF_ID_TYPE_RANDOM isOpenWaitingRoom 否 bool 等候室开启开关 说明: 需要等候室功能开通后才能生效 allowGuestStartConf 否 bool 是否允许来宾提前启动会议。 说明: 仅针对随机会议ID的会议生效。 固定会议ID的会议,请使用修改云会议室信息接口设置。 allowGuestStartConfTime 否 unsigned int 允许来宾提前入会时间范围(单位:分钟) :0-随时,n-提前n分钟启动会议。 concurrentParticipants 否 unsigned int 会议方数,会议最大与会人数限制。 注:不填则不限制 customInfo 否 char[] 自定义扩展信息 返回值 表2 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /** * 编辑会议接口 */ int demoEditConfDlg::EditConf() { hwmsdkagent::HwmConfDetail confDetail{0}; //从缓存中得到会议详情数据赋予confDetail hwmsdkagent::HwmEditConfParam editConfParam{ 0 }; //根据实际需求拷贝confDetail的数据 strncpy_s(editConfParam.confId, confDetail.confListInfo.confId, HWM_MAX_CONF_ID_LEN); editConfParam.vmrFlag = confDetail.vmrFlag; strncpy_s(editConfParam.vmrId, confInfo.vmrId, HWM_MAX_VMR_CONF_ID_LEN); // 此处省略部分赋值代码 editConfParam.timeZone = 56; // 本地时区,用户依据自身情况自己调整,56东八区 editConfParam.isRecordOn = false; editConfParam.isAutoRecordOn = false; editConfParam.startTime = 1598398920; //utc时间戳 editConfParam.duration = 0 * 60 + 30;//会议时长 editConfParam.joinConfRestrictionType = hwmsdkagent::HwmJoinConfPermissionType::RESTRICTION_CALL_IN_ALL; //取编辑会议上面的允许入会用户类型 // vmrConferenceId非空是固定ID,为空则是随机id editConfParam.vmrConfIdType = (strlen(confInfo.confListInfo.vmrConferenceId) != 0) ? hwmsdkagent::HwmVmrConfIdType::HWM_VMR_CONF_ID_TYPE_FIXED : hwmsdkagent::HwmVmrConfIdType::HWM_VMR_CONF_ID_TYPE_RANDOM; return hwmsdkagent::EditConf(&editConfParam); }
  • 集成虚拟背景 使用场景 集成完虚拟背景后在会中可以开启该功能,不仅可以虚化、修改背景,还支持自定义背景图。 实现步骤 将virtualbackgroundlibs文件夹中的HWMVirtualBackground-release.aar拷贝到工程目录的libs文件夹下 图1 虚拟背景aar 在app/build.gradle中添加依赖: 1 implementation(name: 'HWMVirtualBackground-release', ext: 'aar') 若已使用自定义菜单功能,请在对应的位置添加虚拟背景按钮: confMenus.add(new VirtualBackgroundMenu()) 父主题: 基础配置
  • 注意事项 1 收到该通知的前提需要打开 7.5.3.1 表2 frame对象介绍 中的isUseExternalConfInfoWnd开关为true。 2 通知方法OnShowExternalConfInfoWnd中添加线程切换,抛到用户自己线程中,再显示用户自定义的 会议信息框(会议信息框显示需做置顶操作)。 3 显示用户自定义的会议信息框接口中,需要添加定时器检测(2s): 鼠标若未移入自定义会议信息框区域,定时器时间到则销毁会议信息框。 鼠标若移入自定义会议信息框区域,则待鼠标移出信息框区域直接销毁会议信息框。 (若未添加3处理,无法覆盖所有的场景销毁会议信息框)
  • 业务流程 接口调用 创建入会参数JoinConfParam。 会议id加入会议使用PasswordJoinConfParam。 会议random加入会议使用RandomJoinConfParam。 1 2 3 4 5 6 7 //加入会议对象 PasswordJoinConfParam passwordJoinConfParam = new PasswordJoinConfParam() .setConfId(getConfId()) //加入会议ID .setNickname(getNickname()) //设置昵称 .setCameraOn(true) //是否开启摄像头 .setMicOn(true); //是否开启麦克风 .setPassword(true) //入会密码 调用joinConf接口加入会议,第1步中的数据作为参数。 处理回调 处理回调中的结果。
  • setWaterMark 接口描述 该接口用于自定义共享时的水印。 方法定义 1 - (void)setWaterMark:(nullable NSAttributedString *)waterMarkString; 参数描述 水印要展示的内容。 返回值 无 示例代码 NSAttributedString *waterMarkString = [[NSAttributedString alloc] initWithString:@"水印内容"]; [[HWMSdk getOpenApi] setWaterMark:waterMarkString];
  • ModifySubCycleConf 接口描述 该接口用于编辑周期子会议。 注意事项 该接口在已登录状态下才能调用。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode ModifySubCycleConf(const HwmModifySubCycleConfParam *modifySubCycleConfParam); 回调函数 1 virtual void OnModifySubCycleConfResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 结构体HwmModifySubCycleConfParam参数说明 参数 是否必须 类型 描述 confId 是 char[] 会议id subConfID 是 char[] 子会议唯一标识UUID confMediaType 否 HwmConfMediaType 会议媒体类型 startTime 否 long long 会议开始时间(UTC时间),单位为秒 confLen 否 unsigned int 会议持续时长,单位分钟 isAutoRecord 否 bool 会议开始后是否自动开启录制 recordAuthType 否 unsigned int 录播鉴权方式 0:可通过连接观看/下载(不拼接nonce)1:企业用户可观看/下载 2:与会者可观看/下载 callInRestriction 否 HwmJoinConfPermissionType 呼入限制 allowGuestStartConf 否 bool 允许来宾启动会议 allowGuestStartConfTime 否 unsigned int 允许来宾提前入会时间范围(单位:分钟) 0-随时,n-提前n分钟启动会议 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /** * 编辑周期子会议接口 */ int demoConfListDlg::ModifySubCycleConf() { hwmsdkagent::HwmModifySubCycleConfParam SubCycleConfParam{}; strcpy_s(SubCycleConfParam.confId, sizeof(SubCycleConfParam.confId), confId.c_str()); strcpy_s(SubCycleConfParam.subConfID, sizeof(SubCycleConfParam.subConfID), subConfUuid.c_str()); SubCycleConfParam.confMediaType = 1; SubCycleConfParam.startTime = 1633017600; SubCycleConfParam.confLen = 60; SubCycleConfParam.isAutoRecord = false; SubCycleConfParam.callInRestriction = 0; SubCycleConfParam.allowGuestStartConf = false; SubCycleConfParam.allowGuestStartConfTime = 0; return hwmsdkagent::ModifySubCycleConf(&SubCycleConfParam); }
  • 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /// 预约会议 - (void)bookConf { HWMOrderConfParam * param = [[HWMOrderConfParam alloc] init]; param.confSubject = @"会议名称"; param.startTime = 1598759580; param.duration = 15; param.confType = HWMConfTypeVideo; param.isNeedConfPwd = YES; param.isRecordOn = NO; param.timeZone = 56; param.vmrId = @""; param.callInRestrictionType = HWMJoinConfRestrictionAll; [[HWMBizSdk getBizOpenApi] bookConf:param callback:^(NSError *_Nullable error, id _Nullable result) { if (error) { NSLog(@"预约会议失败:%@", error.localizedDescription); } else { NSLog(@"预约会议成功"); } }]; }
  • 获取SDK版本号 接口描述 调用此接口,可以获取到当前SDK使用的版本号 方法定义 1 getSdkVersion():string 参数描述 无 返回值 表1 返回值 类型 描述 string sdk版本号 示例代码 const sdkVersion = HWMeeting.getVersion(); // 显示结果 console.log("getSdkVersion", sdkVersion ); 父主题: 基础配置
  • editSubCycleConf 接口描述 该接口用于编辑周期子会议。 注意事项 该接口在已登录状态下才能调用。 方法定义 1 - (void)editSubCycleConf:(HWMSDKModifySubCycleConfParamModel *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 HWMSDKModifySubCycleConfParamModel参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议id subConfID 是 NSString * 子会议唯一标识UUID confMediaType 否 HWMConfMediaType 会议媒体类型 startTime 否 NSInteger 会议开始时间(UTC时间),单位为秒 confLen 否 NSInteger 会议持续时长,单位分钟 isAutoRecord 否 BOOL 会议开始后是否自动开启录制 recordAuthType 否 NSUInteger 录播鉴权方式 0:可通过连接观看/下载(不拼接nonce)1:企业用户可观看/下载 2:与会者可观看/下载 callInRestriction 否 HWMConfAllowJoinUserType 呼入限制 allowGuestStartConf 否 BOOL 允许来宾启动会议 allowGuestStartConfTime 否 NSInteger 允许来宾提前入会时间范围(单位:分钟) 0-随时,n-提前n分钟启动会议 表2 枚举HWMConfMediaType说明 枚举 值 说明 HWMConfMediaTypeAudio 0 音频会议 HWMConfMediaTypeVideo 1 视频会议 表3 枚举HWMConfAllowJoinUserType说明 值 描述 HWMConfAllowJoinUserTypeAnyone 任何人 HWMConfAllowJoinUserTypeLoginedUser 已登录用户 HWMConfAllowJoinUserTypeInCompanyUser 企业内用户 HWMConfAllowJoinUserTypeInvitedUser 被邀请用户 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 /// 编辑周期会议 - (void)editSubCycleConf{ HWMSDKModifySubCycleConfParamModel * modifySubCycleConfParamModel = [[HWMSDKModifySubCycleConfParamModel alloc] init]; modifySubCycleConfParamModel.confId = confId; modifySubCycleConfParamModel.subConfID = subConfID; modifySubCycleConfParamModel.confMediaType = HWMConfMediaTypeVideo; modifySubCycleConfParamModel.startTime = 1633017600; modifySubCycleConfParamModel.confLen = 60; modifySubCycleConfParamModel.isAutoRecord = NO; modifySubCycleConfParamModel.callInRestriction = HWMConfAllowJoinUserTypeAnyone; modifySubCycleConfParamModel.allowGuestStartConf = NO; modifySubCycleConfParamModel.allowGuestStartConfTime = 0; [[HWMBizSdk getBizOpenApi] editSubCycleConf:modifySubCycleConfParamModel callback:^(NSError * _Nullable error, id _Nullable result) { if (!error) { NSLog(@"编辑周期子会议会议成功"); }else{ NSLog(@"编辑周期子会议失败:%zd %@", error.code, error.localizedDescription); } }]; }
  • 示例代码 1 2 3 4 5 6 7 8 9 10 11 /** * 配置邀请按钮 */ int hwmSDKConfigUI::hwmSDKStartUIConfig() { //配置“邀请”按钮 CS tring inviteBtn = ("{\"frame\":{\"confMenu\" : {\"toolBar\":{\"button\":[{\"id\":\"invite\",\"showAsAction\" : \"ifRoom\",\"isCustomizedClick\" : true}]}}}}"); string uiConfig CTools::UNICODE2UTF(inviteBtn); ret = hwmsdkagent::Config(uiConfig); return ret; } 1 2 3 4 5 6 7 8 9 10 11 /** * 配置接口回调 */ void demoCallbackProc::OnConfigResult(hwmsdk::HwmErrCode ret, const char* msg) { CString codeStr; codeStr.Format(_T("%d"), ret); string msgStr = CTools::UTF82MultiByte(msg); CString tips = _T("OnConfigResult code:") + codeStr + _T(", msg:") + CString(msgStr.c_str()); AfxMessageBox(tips); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 /** * 按钮点击 消息通知 */ void notifyProc::OnClickInjectBtn(hwmsdkagent::HwmClickInjectBtn injectBtn, void* data, const char* id) { INT_PTR nRes; switch (injectBtn) // “邀请”按钮点击消息通知 case hwmsdkagent::HWM_CLICK_INJECT_BTN_INVITE: { // 显示带通讯录的邀请与会人界面 hwm_ui_demo_inviteDlg inviteDlg; nRes = inviteDlg.DoModal(); break; } }
  • 业务流程 使用SDK实现“邀请”功能时,在SDK初始化完成后先调用Config接口,然后处理回调函数OnConfigResult。会议中,在“邀请”按钮单击后,再处理消息通知OnClickInjectBtn。 接口调用 在SDK初始化后,调用Config进行“邀请”按钮的定制。 处理回调函数 处理回调函数OnConfigResult。 处理消息通知 当“邀请”按钮单击后,再处理消息通知OnClickInjectBtn
  • 清除界面配置 设置相关的代理后如果需要清除对应代理,可以置为nil,根据需求在对应位置设置。 1 2 3 4 [HWMSdk getSdkConfig].socialShareHandler = nil; [HWMSdk getSdkConfig].confUIHandler = nil; [HWMSdk getSdkConfig].contactUIHandler = nil; [HWMSdk getSdkConfig].headPortraitApiHandler = nil; 父主题: 界面定制
  • 快速入门 在将Electron SDK集成到第三方应用中前,请先按照“跑通Electron Demo”中的指导熟悉Electron客户端中集成华为云会议Electron SDK的基本流程。 将华为云会议Windows SDK集成到第三方的Electron客户端的步骤如下: 下载Electron SDK。 解压Electron SDK,得到如下目录及文件: 图1 SDK包目录结构 拷贝Electron SDK文件 1. 如果已经安装node,请先确定自己node版本是32位还是64位,可以执行cmd/shell命令查看node版本的位数,结果:x64为64位, ia32为32位。 $ node -p "process.arch" 2. 如果没有安装node,可到nodejs官网下载对应版本。 如果平台是windows,node版本是32位,执行步骤1中解压目录下的run_demo_win32.bat 如果平台是windows,node版本是64位,执行步骤1中解压目录下的run_demo_x64.bat 如果平台是mac,执行步骤1中解压目录下的run_demo_mac.sh bat或sh脚本的作用: 编译ts接口,生成js和types文件。 将对应平台的的SDK文件拷贝到对应的目录下("sdk/win32"、"sdk/x64"、"sdk/mac")。 运行Demo。 复制js和types目录及其下的子目录和文件、根目录下面的package.json到项目的某个目录下(如果项目使用的是TypeScript,则复制ts目录及其下的子目录和文件)。 第三方应用需要调用的JavaScript接口都在js文件夹中,入口文件为js\index.js(如果项目使用的是TypeScript,入口文件为ts\index.ts)。 增加依赖 参考demo中package.json增加依赖。 1 2 3 "dependencies": { "electron": "^13.6.7" }, 通过import方式,引用Electron sdk的接口文件所在目录,初始化UISDKService对象,同时设置node路径加载sdk 参考demo中的AppService.js/NotifyService.js代码。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import UISDKService from 'hwmsdk-electron'; const os = window.require('os'); const platform = os.platform(); const arch = os.arch(); const path = window.require("path"); let instance = null; export default class ApiService { constructor() { if (!instance) { instance = this; // node路径请根据实际的路径传入UISDKService构造函数 let _path = (platform == 'darwin' ? './../sdk/mac/' : arch == 'x64' ? './../sdk/x64/' : './../sdk/win32/'); let nodePath = path.join(window.__dirname, (_path + "HwmUisdk.node")); console.log("ApiService nodePath", nodePath); this.uisdkService = new UISDKService(nodePath); } return instance; } } 接口调用 华为云会议的接口调用和消息通知的处理时序请参考“典型场景接口调用概览”。 第三方应用可以调用的JavaScript接口都在js/api/中,可以参考Demo中的AppService/ApiService.js,调用这些接口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import UISDKService from 'hwmsdk-electron'; const os = window.require('os'); const platform = os.platform(); const arch = os.arch(); const path = window.require("path"); let instance = null; export default class ApiService { constructor() { if (!instance) { instance = this; // node路径请根据实际的路径传入UISDKService构造函数 let _path = (platform == 'darwin' ? './../sdk/mac/' : arch == 'x64' ? './../sdk/x64/' : './../sdk/win32/'); let nodePath = path.join(window.__dirname, (_path + "HwmUisdk.node")); console.log("ApiService nodePath", nodePath); this.uisdkService = new UISDKService(nodePath); } return instance; } init(initInfo) { console.log("init, in param = ", initInfo); let ret = this.uisdkService.init(initInfo); console.log("init, out data = ", ret); return ret; } } 订阅事件通知 订阅第三方可以收到的通知JavaScript接口也都在js/api/中,可以参考Demo中的AppService/NotifyService.js,订阅这些通知。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import UISDKService from 'hwmsdk-electron'; const os = window.require('os'); const platform = os.platform(); const arch = os.arch(); const path = window.require("path"); export default class NotifyService { static setNotifyFunc() { let _path = (platform == 'darwin' ? './../sdk/mac/' : arch == 'x64' ? './../sdk/x64/' : './../sdk/win32/'); let nodePath = path.join(window.__dirname, (_path + "HwmUisdk.node")); console.log("NotifyService nodePath", nodePath); let uisdkService = new UISDKService(nodePath); uisdkService.getConfMgrApi().setOnConfListChangedCB(NotifyService.handleOnConfListChanged); } static handleOnConfListChanged(confListInfo) { console.log('OnConfListChanged', ', confListInfo = ', confListInfo); let _confListInfo = window.sessionStorage.getItem("confListInfo"); _confListInfo = _confListInfo ? JSON.parse(_confListInfo) : []; console.log("sessionStorage confList:", _confListInfo); let conflistNew = confListInfo.confListItem; let _data = JSON.stringify(conflistNew ? conflistNew : []); window.sessionStorage.setItem("confListInfo", _data); } } 使用Electron sdk提供的枚举(可选) 第三方可以直接使用Electron sdk提供的枚举定义,拷贝packages/hwmsdk-electron/js/Api/enum.js和packages/hwmsdk-electron/types/Api/enum.d.ts到项目的某个目录下,参考Demo中的packages/hwmsdk-electron-demo/src/Constants/typeOption.js,使用这些枚举定义。 1 2 3 4 5 6 7 8 9 10 11 12 import { MediaType } from "./enum"; export const MediaTypeOptions = [ { value: MediaType.HWM_MEDIA_TYPE_AUDIO, label: "Audio", }, { value: MediaType.HWM_MEDIA_TYPE_VIDEO, label: "Video", } ]; 父主题: Electron SDK
  • 自定义会中UI行为通知 在OpenSDKConfig中配置会议UI页面变更相关的通知监听 入会的时候UI创建,离会的时候销毁UI 使用场景 入会场景:onConfDetailNotify 离会场景:onConfEnded、onLeaveConf 弱网提示:onPoorNetworkQualityInfoNotify 立即会议通话记录通知:onP2PConfRecord 注意事项 SDK初始化的时候必须传入这个配置sdkConfig才会生效 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class CustomNotifyHandler implements CLMNotifyHandler { @Override public void onConfDetailNotify(ConfInfo confInfo) { Log.i(TAG, "confInfo: confId" + confInfo.getConfId() + ", Subject:" + confInfo.getConfSubject()); } @Override public void onPoorNetworkQualityInfoNotify(PoorNetWorkQualityInfo poorNetWorkInfo) { Log.i(TAG, " poorNetWorkInfo : " + poorNetWorkInfo.getUserId() + " , " + " , " + poorNetWorkInfo.getIsLocal() + " , " + poorNetWorkInfo.getVideoStatus() + " , " + poorNetWorkInfo.getAudioStatus() + " , " + poorNetWorkInfo.getShareStatus()); DemoUtil.showToast("CLMNotifyHandler 事件: onPoorNetworkQualityInfoNotify "); } /** * 会议结束后,会收到通知 * @param result 会议结束后的错误码 */ @Override public void onConfEnded(ConfEndedReason result) { Log.i(TAG, "会议已结束"); } @Override public void onLeaveConf(int result) { Log.i(TAG, "您已离开会议"); } } sdkConfig.setNotifyHandler(new CustomNotifyHandler()); 离开会议通知 会议结束通知 会议详情通知 会议弱网提示通知 立即会议通话记录通知 父主题: 通知参考
  • CancelSubCycleConf 接口描述 该接口用于取消未开始的周期子会议。 注意事项 该接口在登录状态下才能调用。 子会议未开始前可以调用接口,开始后调用则无效。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode CancelSubCycleConf(const HwmCancelSubCycleConfParam *cancelSubCycleConfParam); 回调函数 1 virtual void OnCancelSubCycleConfResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 结构体HwmCancelCycleConfParam参数说明 参数 是否必须 类型 描述 confId 是 char[] 会议id subConfID 是 char[] 子会议唯一标识UUID endOnlineConf 是 bool 是否需要结束在线会议 示例代码 1 2 3 4 5 6 7 8 9 10 11 /** * 取消周期子会议接口 */ int demoSubCycleConfList::CancelSubCycleConf() { hwmsdkagent::HwmCancelSubCycleConfParam subCycleConfParam{}; strcpy_s(subCycleConfParam.confId, sizeof(subCycleConfParam.confId), m_confInfo.confListInfo.confId); strcpy_s(subCycleConfParam.subConfID, sizeof(subCycleConfParam.subConfID), m_subCycleConfID.c_str()); subCycleConfParam.endOnlineConf = true; hwmsdkagent::CancelSubCycleConf(&subCycleConfParam); }
  • 会议详情通知 接口描述 获取会议详情收到该通知,入会的时候会收到一次。 方法定义 1 2 3 4 5 6 /** * 会议详情的上报 * * @param confInfo */ void onConfDetailNotify(ConfInfo confInfo); 参数描述 表1 参数说明 参数 是否必须 类型 描述 confInfo 是 ConfInfo 会议信息 返回值 无。 参数拓展 表2 ConfInfo参数说明 参数 是否必须 类型 描述 confSubject 是 String 会议主题 confId 是 String 会议ID vmrConferenceId 是 String 个人会议ID confPwd 否 String 入会密码 confAccessNum 是 String 接入号 confChairPwd 是 String 主持人密码 confGuestUri 是 String guest入会uri confStartTime 是 String 会议开始时间 confEndTime 是 String 会议结束时间 confScheduserName 是 String 创建者名字 confOrgId 是 String 判断是否外部用户 mediaType 是 int 会议类型 CONF_MEDIA_TYPE_AUDIO = 1; 音频 CONF_MEDIA_TYPE_VIDEO = 2; 视频 CONF_MEDIA_TYPE_HDVIDEO = 4; 高清视频 CONF_MEDIA_TYPE_DATA = 16; 数据 父主题: 自定义会中UI行为通知
  • EndConf 接口描述 该接口用于结束会议。 注意事项 不在会议中不应调用此接口。 调用该接口,会议将结束,无法再次加入该会议。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode EndConf(); 回调函数 1 virtual void OnEndConfResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 无。 返回值 表1 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9 10 11 /** * 结束会议 */ void demoConfCtrlDlg::OnBnClickedButtonStopConf() { int ret = hwmsdkagent::EndConf(); if (hwmsdk::HWM_COMMON_SUC CES S != ret) { AfxMessageBox(_T("EndConf error")); } }
  • LeaveConf 接口描述 该接口用于离开会议。 注意事项 不在会议中不应调用此接口。 调用该接口离开会议,会议不会结束,在会议存在期间可以再次入会。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode LeaveConf(); 回调函数 1 virtual void OnLeaveConfResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 无。 返回值 表1 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9 10 11 /** * 离开会议 */ void demoConfCtrlDlg::OnBnClickedButtonLeaveConf() { int ret = hwmsdkagent::LeaveConf(); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("LeaveConf error")); } }
  • GetMainWindowInfo 接口描述 该接口用于获取主窗口信息。 注意事项 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode GetMainWindowInfo(); 回调函数 1 virtual void OnGetMainWindowInfoResult(hwmsdk::HwmErrCode ret, const char* reason, const HwmMainWindowInfo *mainWindowInfo) {}; 参数描述 表1 结构体HwmMainWindowInfo参数说明 参数 类型 描述 x int 窗口相对于屏幕左侧的偏移量。 y int 窗口相对于屏幕顶端的偏移量。 width int 窗口的宽度。 height int 窗口的高度。 表2 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 HwmMainWindowInfo 主窗口信息。 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 /** * 获取主窗口信息 */ void demoGetMainWindowInfoDlg::OnBnClickedOk() { int ret = hwmsdkagent::GetMainWindowInfo(); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("get mainwindow info error")); return; } }
  • getMainWindowInfo 接口描述 该接口用于获取主窗口信息。 方法定义 1 - (HWMUISDKMainWindowInfoModel *)getMainWindowInfo; 参数描述 无 返回值 表1 HWMUISDKMainWindowInfoModel参数说明 参数 类型 描述 x NSInteger 窗口相对于屏幕左侧的偏移量。 y NSInteger 窗口相对于屏幕顶端的偏移量。 width NSInteger 窗口的宽度。 height NSInteger 窗口的高度。 示例代码 1 HWMUISDKMainWindowInfoModel * info = [[HWMBizSdk getBizOpenApi] getMainWindowInfo];
  • JoinConfById 接口描述 该接口用于通过会议ID和密码加入已经存在的会议。 注意事项 在登录和未登录状态下都可以调用该接口。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode JoinConfById(HwmJoinConfByIdInfo *joinConfByIdInfo); 回调函数 1 virtual void OnJoinConfByIdResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 结构体HwmJoinConfByIdInfo参数说明 参数 是否必须 类型 描述 confId 是 char[] 会议ID。 password 否 char[] 会议密码。若希望以主持人身份入会,必须传入主持人密码。若希望以来宾身份入会,会议要求来宾密码时,必现传入来宾密码,会议不要求来宾密码时,可以为空字符串。 name 否 char[] 会议昵称。在已登录状态下可为空,已登录时为空将使用登录的用户名作为会场名。匿名入会必须传该名字或者提前设置会场名 isCloseSpk 否 bool 是否关闭扬声器,true关闭扬声器;false不关闭扬声器。 isStopConflictConf 否 bool 强制结束和当前VMR会议资源冲突的会议(必需是vmr资源的拥有者才有权限,否则无效) 返回值 表2 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 通过会议ID加入会议 int demoJoinConfByIdDlg::clickJoinConfById() { // 填写会议ID和会议密码;未登录场景下加入会议时,也可以配置本会场的会场名称 string meetingID = CTools::UNICODE2UTF(CString("989156631")); string accessCode = CTools::UNICODE2UTF(CString("******")); string participantName = CTools::UNICODE2UTF(CString("杭州会场")); hwmsdkagent::HwmJoinConfByIdInfo data; memset(&data, 0, sizeof(hwmsdkagent::HwmJoinConfByIdInfo)); strncpy_s(data.confId, meetingID.c_str(), HWM_MAX_CONF_ID_LEN); strncpy_s(data.password, accessCode.c_str(), HWM_MAX_PASSWORD_LEN); strncpy_s(data.name, participantName.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::JoinConfById(&data); return ret; } 在加入会议前可通过调用EnableFeature修改麦克风、摄像头状态。
  • cancelSubCycleWithParam: 接口描述 该接口用于取消未开始的周期子会议。 注意事项 该接口在登录状态下才能调用。 子会议未开始前可以调用接口,开始后调用则无效。 方法定义 1 - (void)cancelSubCycleWithParam:(HWMSDKCancelSubCycleConfParamModel *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback 参数描述 表1 HWMSDKCancelSubCycleConfParamModel参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议id subConfID 是 NSString * 子会议id endOnlineConf 是 BOOL 是否需要结束在线会议 示例代码 1 2 3 4 5 6 7 8 9 10 11 /// 取消周期子会议 - (void)confirmCancelSubConf { HWMSDKCancelSubCycleConfParamModel *cancelParma = [[HWMSDKCancelSubCycleConfParamModel alloc] init]; cancelParma.confId = confId; cancelParma.subConfID = subConfID; cancelParma.endOnlineConf = YES; [[HWMBizSdk getBizOpenApi] cancelSubCycleWithParam:cancelParma callback:^(NSError * _Nullable error, id _Nullable result) { NSString *tips = !error ? @"取消会议成功" : @"取消会议失败"; [UIUtil showMessage:tips error:error]; }]; }
  • 自定义视频会议来电时接听方式按钮 接口描述 该接口用于自定义视频会议来电时接听按钮。默认情况下视频会议来电时有视频接听和语音接听两种方式,可以通过该接口配置成只显示一种接听方式。 图1 会议来电接听方式按钮自定义 示例代码 1 2 3 4 5 6 7 8 9 10 public class MyUiStrategyWhenConfIncoming implements IUiStrategyWhenConfIncoming { @Override public AnswerBtnShowType getVideoConfIncomingAnswerBtnShowType() { // return AnswerBtnShowType.AnswerBtnShowTypeOnlyVideo; 只显示视频接听按钮 // return AnswerBtnShowType.AnswerBtnShowTypeOnlyAudio; 只显示语音接听按钮 // return AnswerBtnShowType.AnswerBtnShowTypeAll; 语音接听视频接听按钮都显示 return AnswerBtnShowType.AnswerBtnShowTypeAll; } sdkConfig.setUiStrategyWhenConfIncoming(new MyUiStrategyWhenConfIncoming()); 父主题: 界面定制
  • DisableVoicePrompts 接口描述 禁用提示音。 注意事项 该接口非必需调用,如不调用,则默认播放会中提示音。 该接口为同步接口,返回值以错误码形式返回 方法定义 1 SDKERR disableVoicePrompts(VoicePrompts voicePrompts); 参数描述 表1 参数说明 参数 是否必须 类型 描述 voicePrompts 是 VoicePrompts 语音提示信息。 表2 结构体VoicePrompts 参数说明 参数 是否必须 类型 描述 disableMutePrompt 是 boolean 是否禁用静音提示,true表示禁用,false表示不禁用。 返回值 示例代码 1 2 3 4 VoicePrompts voicePrompts = new VoicePrompts(); voicePrompts.setDisableMutePrompt(true); SDKERR result = HWMBizSdk.getBizOpenApi().disableVoicePrompts(voicePrompts); Log.i(TAG, "result code:" + result.getValue() + " desc:" + result.getDescription());
  • GetErrorMessage 接口描述 该接口用于获取错误提示。 注意事项 该接口为同步接口,返回值代表接口是否调用成功。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode GetErrorMessage(int errorCode, OUT HwmErrorMessageInfo *errorMessageInfo); 参数描述 表1 参数说明 参数 类型 描述 errorCode int 错误码。 表2 结构体HwmErrorMessageInfo参数说明 参数 类型 描述 errorMessage char[] 错误提示,注:UTF8编码。 表3 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 HwmErrorMessageInfo 错误提示。 示例代码 1 2 3 4 5 6 7 8 9 10 11 12 13 /** * 获取错误提示 */ void demoGetErrorMessageDlg::OnBnClickedOk() { hwmsdkagent::HwmErrorMessageInfo info{}; int ret = hwmsdkagent::GetErrorMessage(hwmsdk::HWM_AGENT_ERR_IN_PROCESS, &info); if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("get error message error")); return; } }
  • getVideoConfIncomingAnswerBtnShowType 接口描述 该接口用于自定义视频会议来电时接听按钮。默认情况下视频会议来电时有视频接听和语音接听两种方式,可以通过该接口配置成只显示一种接听方式。 图1 会议来电接听方式按钮自定义 注意事项 RTC会议时,禁止语音接通。 方法定义 1 - (HWMAnswerBtnShowType)getVideoConfIncomingAnswerBtnShowType; 参数描述 表1 枚举HWMAnswerBtnShowType说明 参数 描述 HWMAnswerBtnShowTypeAll 全部显示 HWMAnswerBtnShowTypeOnlyAudio 只显示音频接听 HWMAnswerBtnShowTypeOnlyVideo 只显示视频接听 示例代码 1 2 3 4 /// 视频会议来电时按钮显示状态 - (HWMAnswerBtnShowType)getVideoConfIncomingAnswerBtnShowType { return HWMAnswerBtnShowTypeAll; }
共100000条