华为云用户手册

  • 快速入门 在将Electron SDK集成到第三方应用中前,请先按照“跑通Electron Demo”中的指导熟悉Electron客户端中集成华为云会议Electron SDK的基本流程。 将华为云会议Electron SDK集成到第三方的Electron客户端的步骤如下: 下载Electron SDK。 解压Electron SDK,得到如下目录及文件: 图1 SDK包目录结构 1. 如果是mac平台,必须在mac电脑上解压Electron SDK,否则会造成framework损坏,导致无法使用。 拷贝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,Intel芯片版,执行步骤1中解压目录下的run_demo_mac.sh 如果平台是mac,M系列芯片版,执行步骤1中解压目录下的run_demo_mac_arm64.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增加依赖。 123 "dependencies": { "electron": "^13.6.7"}, 通过import方式,引用Electron sdk的接口文件所在目录,初始化UISDKService对象,同时设置node路径加载sdk 参考demo中的AppService.js/NotifyService.js代码。 1 2 3 4 5 6 7 8 91011121314151617181920 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 9101112131415161718192021222324252627 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 91011121314151617181920212223242526 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 9101112 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
  • 示例代码 1 2 3 4 5 6 7 8 91011121314 /*** 退出登录*/async Logout(){ const apiService = new ApiService(); let setResult = await apiService.logout(); if(setResult.ret === 0){ console.log("logoutresult:", setResult.logoutResult); window.sessionStorage.setItem("confListInfo", ""); this.props.history.push('/'); }else{ window.electron.ipcRenderer.send("show-error-alert", "logout error = " + setResult.ret); }}
  • setNetworkMode 接口描述 如华为云会议的媒体节点下沉部署到企业,并且管理节点也是通过企业内的代理访问,需要将网络模式设置成“企业内外接入”。 企业内的App无法直接访问公网(即媒体节点下沉和管理节点代理下沉场景)的情况下才需要调用该接口。 注意事项 该接口非必需调用,若不设置,则使用默认模式。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 IHwmNetwork.getInstance().setNetworkMode(networkInfo) 参数描述 表1 NetWorkModeInfo说明 参数 是否必须 类型 描述 networkInfo 是 NetWorkModeInfo 网络模式信息 表2 结构体NetWorkModeInfo参数说明 参数 是否必须 类型 描述 accessType 是 NetWorkAccessType 网络接入类型 表3 枚举NetworkAccessType参数说明 值 描述 AC CES S_TYPE_AUTO 默认值,目前和企业外网接入模式一致。 ACCESS_TYPE_INNER 企业内网接入,用于媒体和信令下沉场景,app从内网接入,信令/媒体消息走代理服务器才能访问云会议服务端。 ACCESS_TYPE_OUTER 企业外网接入,用于非媒体和信令下沉场景,互联网接入,信令/媒体信息可以直接访问云会议服务端 表4 返回值 值 描述 int 成功返回0,其他值表示失败。 示例代码 123 NetWorkModeInfo netWorkModeInfo = new NetWorkModeInfo();netWorkModeInfo.setAccessType(NetworkAccessType.enumOf(NetworkAccessType.ACCESS_TYPE_AUTO));NativeSDK.getNetworkApi().setNetworkMode(netWorkModeInfo);
  • UploadSelfAvatar 接口描述 该接口用于上传当前自己的头像到会议服务器的通讯录。 注意事项 请在已登录状态下调用。 上传的图片文件格式仅支持jpg/png格式,大小需要限制在200KB以下。 为保证头像展示效果,建议图片宽高比为1:1 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode UploadSelfAvatar(const HwmSelfAvatarInfo *selfAvatarInfo);
  • 70.13.5更新内容 1.OnLoginResult、OnLoginBySSOResult回调增加HwmLoginResult参数;OnLogoutResult回调增加HwmLogoutResult参数,接口详见账号操作。如果是老版本升级到70.13.5版本,需要修改回调函数的定义。 2.修改winUI日志后缀名为txt,修改了四个日志命名:hwm_winconfui.txt,hwmSdk.txt,hwmSdkAgent.txt,hwmSdkAgent32.txt 3.Config接口中新增配置项:isUploadKeyLog 是否自动收集日志的开关,接口详见7.5.3.1-界面配置 4.Init接口HwmInitInfo参数新增字段:preferredCamera 优选摄像头列表参数,接口详见7.5.1.1-初始化 5.新增接口AVDeviceCtrl音视频设备控制和结果回调OnAVDeviceCtrlResult,接口详见音视频设备控制;新增对应通知OnAVDeviceCtrlStateChanged音视频设备状态,通知详见音视频设备状态 6.Config接口配置自定义按钮,支持动态刷新底部/共享工具栏,接口详见界面配置 父主题: 版本更新内容
  • editCycleConf 接口描述 该接口用于编辑周期会议。 注意事项 该接口在已登录状态下才能调用。 所有字段必填,编辑修改的字段可来源于用户输入,其他不想修改的属性一定要取会议详情对应字段来赋值。 方法定义 1 - (void)editCycleConf:(HWMOrderCycleConfParam *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback 参数描述 表1 HWMOrderCycleConfParam参数说明 参数 是否必须 类型 描述 orderConfParam 是 HWMOrderConfParam 普通会议参数 cycleParam 是 HWMSDKCycleConfParamModel 周期会议参数 示例代码 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435 /// 编辑周期会议- (void)editCycleConf{ HWMOrderCycleConfParam * cycleConfParam = [[HWMOrderCycleConfParam alloc] init]; cycleConfParam.orderConfParam.confSubject = @"我的预约会议"; cycleConfParam.orderConfParam.confType = OrderConfTypeVideo; cycleConfParam.orderConfParam.isNeedConfPwd = YES; cycleConfParam.orderConfParam.isAutoRecord = YES; cycleConfParam.orderConfParam.isRecordOn = YES; cycleConfParam.orderConfParam.startTime = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间 cycleConfParam.orderConfParam.duration = 30; //会议持续时长(分钟) cycleConfParam.orderConfParam.timeZone = 56; cycleConfParam.orderConfParam.callInRestrictionType = HWMJoinConfRestrictionAll; HWMAttendeeInfo * attendeeInfo = [[HWMAttendeeInfo alloc] init]; attendeeInfo.name = @"Mike"; attendeeInfo.number = @"+991116003543"; attendeeInfo.isMute = YES; cycleConfParam.orderConfParam.attendee = @[attendeeInfo]; HWMSDKCycleConfParamModel * cycleConfParamModel = [[HWMSDKCycleConfParamModel alloc] init]; cycleConfParamModel.startDate = 1633017600; //utc时间戳,单位秒,如果获取的时间是本地时间,需要转换成utc时间; cycleConfParamModel.endDate = 1636560000; cycleConfParamModel.cycleType = HWMSDKCycleTypeWeek; cycleConfParamModel.preRemindDays = 1; cycleConfParam.cycleParam = cycleConfParamModel; [[HWMBizSdk getBizOpenApi] editCycleConf:cycleConfParam callback:^(NSError * _Nullable error, id _Nullable result) { if (!error) { NSLog(@"book cycle conf success"); [UIUtil showMessage:@"编辑周期会议会议成功"]; }else{ NSLog(@"book cycle conf fail errorCode : %zd",error.code); [UIUtil showMessage:[NSString stringWithFormat:@"编辑周期会议失败:%zd %@", error.code, error.localizedDescription]]; } }];}
  • 业务流程 使用SDK实现“邀请”功能时,在SDK初始化完成后先调用config接口,然后处理接口回调函数onConfigResult。会议中,在“邀请”按钮单击后,再处理订阅的消息通知onClickInjectBtnNotify。 接口调用 组装包含配置信息的字符串和接口回调函数onConfigResult。 调用config接口,第1步中的数据作为参数。 处理回调函数 处理回调函数onConfigResult。 处理消息通知 当“邀请”按钮单击后,再处理订阅的消息通知onClickInjectBtnNotify
  • 70.16.5更新内容 1.新增周期会议相关接口,接口详见预约周期会议,编辑周期会议,取消周期会议,编辑周期子会议,取消周期子会议 2.加入会议接口HwmJoinConfByIdInfo参数新增字段:isStopConflictConf强制结束和当前VMR会议资源冲突的会议,接口详见加入会议 3.Config接口配置自定义按钮,支持增加二级菜单,接口详见界面配置 4.新增错误码,详见常见错误码 5.Config接口菜单按钮新增 共享画面质量策略:清晰度优先、流畅度优先 "share_strategy"、共享时隐藏视频窗口"share_hide_video"、共享时包含电脑声音"share_audio"配置可隐藏。复制会议信息"copy_conf_info"按钮支持配置可注入,详见界面配置和HwmClickInjectBtn说明 6.会议角色HwmConfRole新增枚举值HWM_CONF_ROLE_AUDIENCE观众,HWM_CONF_ROLE_COHOST联席主持人和HWM_CONF_ROLE_WAITING等候室成员,详见HwmConfRole说明 父主题: 版本更新内容
  • 70.16.5更新内容 新增周期会议相关接口,具体请见预约周期会议、编辑周期会议、取消周期会议、编辑周期子会议、取消周期子会议 入会参数PasswordJoinConfParam 新增 isStopConflictConf字段,能够强制结束和当前VMR会议资源冲突的会议,具体请见 表3 会议通知栏支持在来电时可配置是否显示通知,具体请见 表2 sso 登录接口调整,具体请见 loginBySSO 错误码整改,新版本错误码描述请见 表1 表1 新旧版本错误码对应关系 70.14.6 版本及之前的错误码 70.16.5 版本之后的错误码 新版本错误描述 -1 430100001 Common Error.:通用错误 500 430200001 unlogin.:未登录 12 430200002 Repeated login.:重复登录 10001 412100001 The message processing thread is not initialized.:消息处理线程未初始 10001 412100004 Memory allocation error.:分配内存错误 10001 412100005 XML parsing error.:XML解析出错 10001 412100009 Server error.:服务器异常 10001 412100014 Server redirect.:服务器返回重定向地址 10001 412100016 JSON parsing error.:JSON解析失败 10001 412200001 Internal error.:内部错误 10002 412100002 Parameter error.:参数错误 10002 412200002 Parameter error.:参数错误 10003 412100003 Timeout.:超时 10004 412100006 DNS resolution error.:DNS解析异常 10004 412100007 Request message failed.:请求消息异常 10004 412100013 Network error.:网络异常 10004 412200004 Network Error.:网络错误 201 430200003 SIP connection timeout.:SIP连接超 35 430400001 Password required to join the meeting.:加入会议需要密码 2 430200004 Invalid login password.:用于登录的密码参数不合法 420010001 430100003 SIP connection check failed.:SIP连接检查失败 10006 206010000 User name or password error.:用户名或密码错误 10006 206030000 The user does not exist.:系统中不存在该用户 10006 206010025 APPID verification failed.:APPID校验失败 10007 412100010 Account is locked.:账号被锁定 10007 206030015 The user is locked and will be locked in 60s.:用户已被锁定,请60秒后重试 父主题: 版本更新内容
  • 80.7.5更新内容 1. 新增显示设置界面接口showSettingWindow,接口详见显示设置窗口。 2. 会议信息通知OnConfInfoNotify新增参数isOtherCorpConf,具体详见会议信息通知。 3. 与会者列表子项注入点击通知OnClickInjectParticipantItemBtnNotify新增与会者详情按钮类型HWM_CLICK_INJECT_PARTICIPANT_ITEM_BTN_PARTICIPANT_DETAIL,新增华为云会议账号参数accountId ,具体详见与会者列表子项注入点击通知。 4. Config接口新增字段participant_detail,支持与会者头像点击注入,详见界面配置json说明。 父主题: 版本更新内容
  • disableVoicePrompts: 接口描述 禁用会议提示音。 注意事项 该接口非必需调用,若不设置,则使用默认模式。 返回值只代表接口是否调用成功。 方法定义 1 - (HWMSDKERR)disableVoicePrompts:(HWMSDKVoicePromptsModel *)voicePrompts; 参数描述 表1 HWMSDKVoicePromptsModel说明 参数 是否必须 类型 描述 disableMutePrompt 是 BOOL 主持人静音与会者提示音 返回值 接口是否调用成功 示例代码 123 HWMSDKVoicePromptsModel * model = [[HWMSDKVoicePromptsModel alloc] init];model.disableMutePrompt = YES;[[HWMBizSdk getBizOpenApi] disableVoicePrompts:model];
  • DisableVoicePrompts 接口描述 禁用提示音。 注意事项 该接口非必需调用,如不调用,则默认播放会中提示音。 该接口为异步接口,返回值只代表接口是否调用成功,实际业务处理结果在对应的回调函数中返回。 方法定义 1 HWM_SDK_AGENT_API hwmsdk::HwmErrCode DisableVoicePrompts(const HwmVoicePromptsInfo* voicePromptsInfo); 回调函数 1 virtual void OnDisableVoicePromptsResult(hwmsdk::HwmErrCode ret, const char* reason) {}; 参数描述 表1 参数说明 参数 是否必须 类型 描述 voicePromptsInfo 是 HwmVoicePromptsInfo 语音提示信息。 表2 结构体HwmVoicePromptsInfo参数说明 参数 是否必须 类型 描述 isDisableMutePrompt 是 bool 是否禁用静音提示。 返回值 表3 返回值 类型 描述 HwmErrCode 成功返回0,其他值表示失败。失败返回值见错误码参考。 示例代码 1 2 3 4 5 6 7 8 910111213141516 /*** 禁用提示音*/void demoDisableVoicePromptsDlg::DisableVoicePrompts(){ hwmsdkagent::HwmVoicePromptsInfo info{}; info.isDisableMutePrompt = true; int ret = hwmsdkagent::DisableVoicePrompts(&info);; if (hwmsdk::HWM_COMMON_SUCCESS != ret) { AfxMessageBox(_T("disable voice prompts error")); return; } CDialogEx::OnOK();}
  • 80.9.5更新内容 1. Mac补充获取会议详情、编辑会议接口新增参数allowLive,具体详见获取会议详情、编辑会议。 2. 新增周期会议相关接口,具体详见预约周期会议、编辑周期会议、编辑周期子会议、取消周期会议、取消周期子会议。 3. 功能配置开关接口新增分组讨论功能开关枚举值HWM_CAPABILITY_BREAKOUT_CONF,具体请见功能配置开关。 4. 会议信息通知新增参数isInBreakoutSubConf,具体详见会议信息通知。Mac在下个版本支持。 5. Electron SDK补充常见错误码,具体详见常见错误码。 父主题: 版本更新内容
  • 80.9.5更新内容 1. 会议详情HWMConfDetail.h、编辑会议HWMOrderConfParam.h新增字段isRecordOn、isLiveOn,具体详见HWMConfDetail参数说明、HWMOrderConfParam参数说明。 2. 开启功能接口enableSDKCapability新增分组讨论枚举值HWMSDKCapabilitySuportBreakoutConf,具体详见HWMSDKCapabilitySuport参数说明。 3. 取消周期子会议CancelSubCycleConf中字段subConfUUID改成subConfID,具体详见HWMSDKCancelSubCycleConfParamModel参数说明。 4. 预约周期会议和编辑周期会议接口,HWMCycleConfParam.h中cycleCount字段废弃,具体详见HWMCycleConfParam参数说明。 父主题: 版本更新内容
  • setShareScreenPermission 接口描述 该接口用于设置共享权限。 注意事项 该接口返回值只代表接口是否调用成功。 方法定义 1 - (BOOL)setShareScreenPermission:(BOOL)isPermission; 参数描述 表1 参数说明 参数 是否必须 类型 描述 isPermission 是 bool 是否允许。 返回值 表2 返回值 类型 描述 BOOL 接口调用成功返回YES,失败返回NO。 示例代码 12 /// 设置共享权限[[HWMSdk getOpenApi] setShareScreenPermission:isPermission];
  • 开启共享声音功能 配置开启共享时包含电脑声音功能,调用enableSDKCapability接口 示例代码 /// 开启共享声音[[HWMBizSdk getBizOpenApi] enableSDKCapability:HWMSDKCapabilitySuportShareAudio]; 配置开启共享时包含电脑声音功能后,用户发起共享时,在开始共享窗口会显示【共享时包含电脑声音】选项。若未配置开启该功能,则窗口上不显示该选项。如下图: 取消 App Sandbox 功能 SDK 自动安装音频驱动插件需要关闭 App Sandbox 功能,并获取 root 权限。 在 App 的 entitlements 描述文件中,删除 App Sandbox 条目。如下图: 取消 App Sandbox 功能后,首次点击勾选【共享时包含电脑声音】选项时,会获取 root 权限。在用户单击【好】后,开始自动安装音频驱动插件。如下图: 若未取消 App Sandbox 功能,首次点击勾选【共享时包含电脑声音】选项时,会弹框提示到官网下载。在用户单击【下载】后,会跳转到官网。如下图: 下载链接可通过initWithConfig接口中的appUrl字段配置,该接口用于启动并初始化SDK,参考初始化。若未配置appUrl,则不显示下载。 App Sandbox 功能取消后,App 内获取到的用户路径会发生变化,App 会无法上架到 Mac App Store。
  • 开启隐藏非视频与会者功能 示例代码 /// 开启显示隐藏非视频与会者选项[[HWMBizSdk getBizOpenApi] enableSDKCapability:HWMSDKCapabilitySuportHideNoCameraView]; 开启后,在会议设置中可以看到隐藏非视频与会者选项: 示例代码 /// 关闭隐藏非视频与会者选项[[HWMBizSdk getBizOpenApi] disableSDKCapability:HWMSDKCapabilitySuportHideNoCameraView]; 关闭后,会议设置不显示隐藏非视频与会者选项。
  • enableSDKCapability 接口描述 用于开启特性支持。 方法定义 1 - (void)enableSDKCapability:(HWMSDKCapabilitySuport)type; 参数描述 表1 HWMSDKCapabilitySuport说明 参数 类型 描述 HWMSDKCapabilitySuportVideoHD NSUInteger 开启720P高清视频,默认360P。 HWMSDKCapabilitySuportShareAudio NSUInteger 开启显示共享时包含电脑声音选项,默认不开启。 HWMSDKCapabilitySuportHideNoCameraView NSUInteger 开启显示隐藏非视频与会者选项,默认开启。 HWMSDKCapabilitySuportBreakoutConf NSUInteger 开启分组会议,默认开启。 HWMSDKCapabilitySuportConfirmRecord NSUInteger 录制安全提示,默认不开启。
  • setLocalRecordPath 接口描述 用于自定义本地录制文件的存储路径。 注意事项 如果用户调用该接口指定了录制文件夹,则开启沙盒后不能重新创建,会写到默认路径。 方法定义 1 - (void)setLocalRecordPath:(NSURL *)url; 示例代码 123456789 NSOpenPanel *select = [NSOpenPanel openPanel]; select.canChooseFiles = NO; select.canChooseDirectories = YES; select.prompt = @"确定"; [select beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse result) { if (result == 1) { [[HWMSdk getOpenSDK] setLocalRecordPath:select.URL]; } }];
  • editSubCycleConf 接口描述 该接口用于编辑周期子会议。 注意事项 该接口在已登录状态下才能调用。 方法定义 1 - (void)editSubCycleConf:(HWMSDKModifySubCycleConfParamModel *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 HWMSDKModifySubCycleConfParamModel参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议id subConfID 是 NSString * 子会议唯一标识UUID confMediaType 否 HWMConfMediaType 会议媒体类型 startTime 否 NSInteger 会议开始时间(UTC时间),单位为秒 说明: UTC时间与UTC偏移量(转换为秒)的差值,如东八区为 UTC时间戳 - (8 * 60 * 60)。 confLen 否 NSUInteger 会议持续时长,单位分钟 isAutoRecord 否 BOOL 会议开始后是否自动开启录制 recordAuthType 否 NSUInteger 录播鉴权方式 0:可通过连接观看/下载(不拼接nonce)1:企业用户可观看/下载 2:与会者可观看/下载 callInRestriction 否 HWMConfAllowJoinUserType 呼入限制 allowGuestStartConf 否 BOOL 允许来宾启动会议 allowGuestStartConfTime 否 NSInteger 允许来宾提前入会时间范围(单位:分钟) 0-随时,n-提前n分钟启动会议 表2 枚举HWMConfAllowJoinUserType说明 值 描述 HWMConfAllowJoinUserTypeAnyone 任何人 HWMConfAllowJoinUserTypeLoginedUser 已登录用户 HWMConfAllowJoinUserTypeInCompanyUser 企业内用户 HWMConfAllowJoinUserTypeInvitedUser 被邀请用户 示例代码 1 2 3 4 5 6 7 8 91011121314151617181920 /// 编辑周期会议- (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) { [UIUtil showMessage:@"编辑周期子会议会议成功"]; }else{ [UIUtil showMessage:[NSString stringWithFormat:@"编辑周期子会议失败:%zd %@", error.code, error.localizedDescription]]; } }];}
  • 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 91011 /// 取消周期子会议- (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]; }];}
  • cancelCycleConf 接口描述 该接口用于取消至少还有一场子会议未开始的周期会议。 注意事项 该接口在登录状态下才能调用。 最后一场子会议未开始前可以调用接口,开始后调用则无效。 方法定义 1 - (void)cancelCycleConf:(NSString *_Nonnull)confId callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议id 示例代码 12345678 /// 取消周期会议- (void)cancelCycleConf { NSString *confId = "989156631"; [[HWMBizSdk getBizOpenApi] cancelCycleConfWithParam:cancelParam callback:^(NSError * _Nullable error, id _Nullable result) { NSString *tips = !error ? @"取消周期会议成功" : @"取消周期会议失败"; NSLog(@"%@",tips); }];}
  • 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时间),单位为秒 说明: UTC时间与UTC偏移量(转换为秒)的差值,如东八区为 UTC时间戳 - (8 * 60 * 60) 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 910111213141516171819 /*** 编辑周期子会议接口*/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 910111213141516 /***初始化接口,拉起应用*/async goToInit() { let param = { exePath: "E:\\Hello_World\\debug\\win32\\HwmSdk\\MySdk.exe",// 只有windows 64位平台需要设置sdk路径,假设HwmSdk目录在E:\\Hello_World\\debug\\win32\\,假设exe文件名称为MySdk.exe(路径需要utf8编码) logPath: "E:\\Hello_World\\debug\\win32\\MySdk\\log\\",// 指定日志路径(路径需要utf8编码) userDataPath: "E:\\Hello_World\\debug\\win32\\MySdk\\UserData\\", // 指定数据路径(路径需要utf8编码) appId: getAppId() }; const apiService = new ApiService(); let setResult = await apiService.init(param); if (setResult != 0) { window.electron.ipcRenderer.send("show-error-alert", "init error = " + setResult.ret); }} 123456789 /*** ApiService中init定义*/init(initInfo) { console.log("init, in param = ", initInfo); let ret = this.uisdkService.init(initInfo); console.log("init, out data = ", ret); return ret;} 典型场景和接口参考中的示例代码仅作为示例用的伪代码,不能直接使用。
  • 业务流程 SDK初始化时,如果是windows 64位平台,先修改HwmSdk文件夹下HwmSdk.exe文件的名称,其他平台不涉及;再调用init同步接口。 修改exe文件名称(仅针对windows 64位平台,其他平台不涉及) 修改HwmSdk文件夹下HwmSdk.exe文件名称为MySdk.exe。 接口调用 构建数据结构InitInfo。 调用Init接口,完成配置初始化,第1步中的数据作为参数。
  • windows平台编译.node文件时遇Could not find any Visual Studio installation to use的错误提示 客户案例: windows平台,在编译.node文件时提示Could not find any Visual Studio installation to use。 原因分析: Visual Studio没安装好或者环境变量GYP_MSVS_VERSION和安装的Visual Studio版本不配套 解决方案: 重新安装Visual Studio或者修改环境变量GYP_MSVS_VERSION为对应的Visual Studio的版本 父主题: Electron SDK
  • mac平台环境安装时遇permission denied的错误提示 客户案例: 某客户集成了会议Electron Sdk,在安装所需环境时提示permission denied。 原因分析: 文件权限问题。 解决方案: 使用chmod命令修改对应报错文件的权限,如:chmod 777 XXX;或者在安装对应依赖包时添加参数:--unsafe-perm=true --allow-root, 如 npm install -electron@13.6.7 –g --unsafe-perm=true --allow-root 父主题: Electron SDK
  • Web SDK下载 SDK下载后可参考3.4章节进行包完整性校验。 表1 Web UI SDK资源下载路径 版本 日期 资源 下载链接 说明 1.0.16 2024-12-17 Web UI SDK hwmsdk-webrtc-1.0.16.zip 完整性校验 hwmsdk-webrtc-1.0.16-sha256 - 2024-12-17 Web UI SDK npm包 hwmeeting-1.0.16.tgz 完整性校验 hwmeeting-1.0.16-sha256 - 1.0.15 2024-10-11 Web UI SDK hwmsdk-webrtc-1.0.15.zip 完整性校验 hwmsdk-webrtc-1.0.15-sha256 - 2024-10-11 Web UI SDK npm包 hwmeeting-1.0.15.tgz 完整性校验 hwmeeting-1.0.15-sha256 - 1.0.13 2024-07-12 Web UI SDK hwmsdk-webrtc-1.0.13.zip 完整性校验 hwmsdk-webrtc-1.0.13-sha256 - Web UI SDK npm包 hwmeeting-1.0.13.tgz 完整性校验 hwmeeting-1.0.13-sha256 - 1.0.12 2024-05-17 Web UI SDK hwmsdk-webrtc-1.0.12.zip 完整性校验 hwmsdk-webrtc-1.0.12-sha256 - Web UI SDK npm包 hwmeeting-1.0.12.tgz 完整性校验 hwmeeting-1.0.12-sha256 - 1.0.11 2023-12-19 Web UI SDK hwmsdk-webrtc-1.0.11.zip 完整性校验 hwmsdk-webrtc-1.0.11-sha256 - Web UI SDK npm包 hwmeeting-1.0.11.tgz 完整性校验 hwmeeting-1.0.11-sha256 - 1.0.10 2023-07-06 Web UI SDK hwmsdk-webrtc-1.0.10.zip - Web UI SDK npm包 hwmeeting-1.0.10.tgz 1.0.9 2023-01-06 Web UI SDK hwmsdk-webrtc-1.0.9.zip - Web UI SDK npm包 hwmeeting-1.0.9.tgz 1.0.8 2022-11-05 Web UI SDK hwmsdk-webrtc-1.0.8.zip - Web UI SDK npm包 hwmeeting-1.0.8.tgz 1.0.7 2022-06-29 Web UI SDK hwmsdk-webrtc-1.0.7.zip - Web UI SDK npm包 hwmeeting-1.0.7.tgz 1.0.6 2022-05-05 Web UI SDK hwmsdk-webrtc-1.0.6.zip 第一个商用版本 Web UI SDK npm包 hwmeeting-1.0.6.tgz 父主题: SDK下载
  • 70.14.5更新内容 1. 预约云会议室时支持选择预约固定云会议室ID或随机云会议室ID,具体请见 HWMVmrConfIdType说明。 3. 预约、编辑会议支持设置“来宾在主持人之前加入会议”,并可设置提前入会时间(allowGuestStartConf、allowGuestStartConfTime),具体参数请见 HWMOrderConfParam参数说明 。 4. APPID登录支持指定部门ID,具体请见 HWMAppIDLoginParam参数说明。 5. 新增设置网络模式接口,具体请见网络模式设置 父主题: 版本更新内容
  • 自定义会控按钮 自定义新增按钮。底部工具栏按钮、共享工具栏和更多菜单中的按钮支持第三方开发者自定义添加。目前底部工具栏和共享工具栏限制自定义按钮个数为1,超出的自定义按钮会移入更多菜单,自定义底部/共享工具栏按钮的顺序固定在“更多”按钮前;自定义更多菜单按钮会在底部和共享工具栏更多按钮中同时生效,底部工具栏的更多菜单中自定按钮添加在菜单栏最后,共享工具栏的更多菜单中自定按钮添加在“离开”按钮前。 删除自定义按钮。通过Config接口删除customButton中的按钮配置,关于清空自定义按钮操作,若赋值customButton:[],则清空全量自定义按钮;若customButton下未配置某位置下的自定义按钮,则清空该位置下的自定义按钮。 自定义按钮子菜单功能说明: 当 subMenu 为空时,点击按钮通知对应按钮 id 被点击; 当 subMenu 不为空时,点击按钮显示 subMenu 二级菜单,并且不通知; 通过Config接口增删改自定义按钮时,需要传对应位置的全量自定义按钮,支持动态刷新底部/共享工具栏,更多菜单不支持,而是在重新生成时刷新。刷新单个自定义按钮请参考刷新自定义按钮配置。 增加自定义按钮 以添加自定义带子菜单的底部工具栏按钮、共享工具栏按钮和更多菜单按钮为例: { "frame":{ "confMenu":{ "toolBar":{ "customButton": [ { "id": "customMenu","title": "自定义按钮", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 1, "subMenu":[ { "id": "customSecondMenu", "title": "二级菜单", "buttonImg": "D:/demoResource/icon-whiteboard.svg" } ] }, { "id": "customMore", "title": "自定义更多", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 0 }, { "id": "customShare", "title": "自定义共享", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 2 } ] } } }} 更新自定义按钮 注意确保id和buttonPos正确,修改按钮的其他信息。以重命名底部工具栏按钮为例: { "frame":{ "confMenu":{ "toolBar":{ "customButton": [ { "id": "customMenu","title": "重命名按钮", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 1, "subMenu":[ { "id": "customSecondMenu", "title": "二级菜单", "buttonImg": "D:/demoResource/icon-whiteboard.svg" } ] }, { "id": "customMore", "title": "自定义更多", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 0 }, { "id": "customShare", "title": "自定义共享", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 2 } ] } } }} 删除部分自定义按钮 customButton删除对应按钮,同时需要保留其他自定义按钮。以删除底部工具栏自定义按钮为例: { "frame":{ "confMenu":{ "toolBar":{ "customButton": [ { "id": "customMore","title": "自定义更多", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 0 }, { "id": "customShare", "title": "自定义共享", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 2 } ] } } }} 清空某个位置下的自定义按钮 customButton中删除该位置下的所有自定义按钮即可,若customButton下未配置某位置下的自定义按钮,则会清空该位置下的自定义按钮。以清空底部工具栏自定义按钮为例: { "frame":{ "confMenu":{ "toolBar":{ "customButton": [ { "id": "customMore", "title": "自定义更多", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 0 }, { "id": "customShare", "title": "自定义共享", "buttonImg": "D:/demoResource/icon-whiteboard.svg", "buttonPos": 2 }, ] } } }} 清空全量自定义按钮 customButton传入空数组,会清空所有位置下自定义按钮。清空示例如下: { "frame":{ "confMenu":{ "toolBar":{ "customButton": [ ] } } }} 父主题: 界面定制
共99354条