云服务器内容精选

  • 接口参考 请求消息的Body体参数如下: 表1 请求消息数据结构 参数 类型 描述 appID String 配置项中“订阅者ID”。 timestamp Integer 消息时间戳,单位毫秒。 nonce String 随机生成字符串。 signature String 消息体签名,算法hmacSHA256(appID + timestamp +nonce+ eventInfo,appkey),其中appkey是企业推送开通配置项中的密码。企业开发者可根据这个签名来做数据完整性校验。 说明:签名算法中的eventInfo为事件信息对象转json字符串。 eventInfo EventInfo 事件信息 表2 EventInfo数据结构 参数 类型 描述 event String 事件类型。取值范围: meeting.verify: 启用验证事件 meeting.started: 会议开始事件 meeting.end: 会议结束事件 meeting.conclude: 会议关闭事件 record.finish: 录制结束事件 meeting.create: 预约事件 meeting.modify: 编辑事件 meeting.cancel: 取消事件 meeting.join: 用户入会事件 meeting.left: 用户离会事件 timestamp Integer 事件时间戳,单位毫秒 payload Payload 事件内容 表3 Payload数据结构 参数 类型 描述 meetingInfo MeetingInfo 事件内容 attendeeInfo AttendeeInfo 与会者信息 表4 MeetingInfo数据结构 参数 类型 描述 meetingID String 会议id meetingUUID String 会议uuid meetingCycleSubID String 周期子会议uuid 表5 AttendeeInfo数据结构 参数 类型 描述 userUUID String 用户UUID userAgent String 用户客户端类型 account String 账号 participantID String 会场ID displayName String 显示名称 joinTime Integer 入会时间(时间戳,单位毫秒) leftTime Integer 离会时间(时间戳,单位毫秒) role String 会中角色 callNumber String 呼叫号码 响应消息的Body体参数如下: 表6 响应数据消息结构 参数 类型 描述 event String 事件类型。“启用验证”的响应中填meeting.verify nonce String “启用验证”的响应中填请求中获取的nonce值 启用验证事件 会议开始事件 会议结束事件 会议关闭事件 录制结束事件 预约会议事件 编辑会议事件 取消会议事件 用户入会事件 用户离会事件 父主题: 企业级会议事件推送
  • 概述 购买了华为云会议旗舰版后,华为云会议将支持开通企业会议事件订阅能力。开通后,华为云会议服务端会主动把该企业的会议事件推送给企业开发者的回调服务地址。 当前已支持的推送会议事件包括: 会议开始 会议结束 会议关闭 录制结束 预约会议 编辑会议 取消会议 用户入会 用户离会 免费试用企业无法开通“会议事件推送”,请联系华为销售人员,并提供华为云会议企业ID,将企业升级为旗舰版。 第三方开发者如果使用SP模式,需要在华为云会议后台开通“会议事件推送”,请联系华为销售人员,并提供华为云会议SP ID。 给指定的回调地址推送事件时,如果推送失败时,间隔30秒后再重试。重试3次失败后,间隔30分钟再重试,一共重试24小时。24小时后将推送不成功的事件丢弃。 父主题: 企业级会议事件推送
  • 启用验证示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2019 09:32:47 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "1988692299", "timestamp": 1629183619116, "nonce": "85262798", "signature": "262ccb5f8854f824c41ea5854ba1798bfa850706fbc85b2be9fd7535ed6b8ff3", "eventInfo": { "event": "meeting.verify", "timestamp": 1629183619116 } } 响应消息 HTTP/1.1 200 Date: Tue, 17 Dec 2019 09:32:47 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "event":"meeting.verify", "nonce":"85262798" } 响应消息中的nonce必须跟请求消息中的nonce相同,否则会导致启动失败。
  • 请求参数 表2 参数说明 参数 是否必须 类型 位置 描述 confUUID 是 String Query 会议UUID(通过查询录制列表获取)。 offset 否 Integer Query 查询偏移量。默认为0。 limit 否 Integer Query 查询数量。默认是20,最大500条。 X-Access-Token 是 String Header 授权令牌。获取“执行App ID鉴权”响应的accessToken。 X-Authorization-Type 否 String Header 标识是否为第三方portal过来的请求。 说明: 该参数将废弃,请勿使用。 X-Site-Id 否 String Header 用于区分到哪个HCSO站点鉴权。 说明: 该参数将废弃,请勿使用。
  • 响应参数 表4 响应参数 参数 类型 描述 recordUrls Array of DownloadInfo objects 会议录制文件下载链接信息。 表5 DownloadInfo数据结构 参数 类型 描述 confUuid String 会议UUID。 urls Array of UrlInfo objects 下载链接信息。 表6 UrlInfo数据结构 参数 类型 描述 token String 下载鉴权token,下载文件时,使用该token鉴权。(一小时内有效,使用后立即失效)。 fileType String 文件类型。 Aux:辅流(会议中的共享画面;分辨率为720p) Hd:高清(会议中的视频画面;分辨率和会议中视频画面的分辨率一致,1080p或者720p) Sd:标清(会议中视频画面和共享画面的合成画面,视频画面是大画面,共享画面是小画面,共享画面布局在右下方;分辨率为4CIF) 说明: 单会议录制时长超过3小时将拆分成多个文件,有多个下载链接(旧版录制文件仍按1GB拆分)。 url String 文件下载url,最大1000个字符。
  • 请求消息示例 GET /v1/mmc/management/record/downloadurls?confUUID=51adf610220411eaaae03f22d33cc26b Connection: keep-alive X-Access-Token: stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC user-agent: WeLink-desktop Host: api.meeting.huaweicloud.com User-Agent: Apache-HttpClient/4.5.3 (Java/1.8.0_191)
  • 响应消息示例 HTTP/1.1 200 Date: Wed, 18 Dec 2019 06:20:40 GMT Content-Type: application/json;charset=UTF-8 Content-Length: 505 Connection: keep-alive Expires: 0 Pragma: No-cache Cache-Control: no-cache http_proxy_id: 4556e88832e5990723d1712395f5bee8 Server: api-gateway X-Request-Id: 629891c82bb852d8796e2f6acc74721e { "recordUrls": [ { "confUuid": "ef67f6ada67e11eba6374db4b9a61d2c", "urls": [ { "token": "f8fe906eaa6d690ef72bc831df54ffd9fc906412aefd329ace96d100cf1bc4be", "fileType": "Aux", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoAux/0_0.mp4" }, { "token": "ad8a6f6e009d643ca21f8be306e9e2cadd726360236f07bd176c1b85423b7136", "fileType": "Hd", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoHD/0_0.mp4" }, { "token": "fe7a59c69e3f97e831c83d55193a061e5e33e019f4704e5eb441c7f1fa629ad2", "fileType": "Sd", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoSD/0_0.mp4" }, { "token": "38e6b3fe7f7c62dd2141a408f4f64b911d1b58a5e04a4f6e0cfd2602181a8ad3", "fileType": "Aux", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoAux/0_1.mp4" }, { "token": "843731642aba1ebb720195a7c44f3f1e32ab409d29b2ecd1c58f30ee269f6da6", "fileType": "Hd", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoHD/0_1.mp4" }, { "token": "9fd3471e9dc047c3c345308f0cbed005f227bf48aa47875c7fe752c5a817cbd9", "fileType": "Sd", "url": "https://100.85.230.37/download/typeThree/video/resource/00037/00037ed2-351a-4741-8ce6-a2078f21ba6b/videoSD/0_1.mp4" } ] } ] }
  • 下载示例 通过调用接口,获取到下载链接和鉴权token后,可以通过以下示例代码(Java)下载录制文件: /** * 录制文件下载 * * @param downloadUrl 录制文件下载链接 * @param localPath 本地保存路径 * @param token 下载鉴权token */ public static void httpDownload(String downloadUrl, String localPath, String token) { int byteRead; try { URL url = new URL(downloadUrl); HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); // 请求头域中携带下载鉴权token connection.setRequestProperty("Authorization", token); connection.setHostnameVerifier(new HostnameVerifier() { @Override public Boolean verify(String hostname, SSLSession sslSession) { return true; } }); TrustManager[] trustManagers = new TrustManager[]{ new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } } }; SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, trustManagers, null); connection.setSSLSocketFactory(ctx.getSocketFactory()); // 获取文件流 InputStream inStream = connection.getInputStream(); // 保存到本地路径下 FileOutputStream fs = new FileOutputStream(localPath); byte[] buffer = new byte[1024]; while ((byteRead = inStream.read(buffer)) != -1) { fs.write(buffer, 0, byteRead); } inStream.close(); fs.close(); } catch (IOException | KeyManagementException | NoSuchAlgorithmException e) { e.printStackTrace(); } }
  • CURL命令示例 curl -k -i -X GET -H 'X-Access-Token:stbX5ElstO5QwOwPB9KGQWUZ1DHoFrTsQjjC' 'https://api.meeting.huaweicloud.com/v1/mmc/management/record/downloadurls?confUUID=51adf610220411eaaae03f22d33cc26b'
  • 推送编辑会议事件示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "123456789", "timestamp": 1671523596351, "nonce": "60426560", "signature": "e3945cab9c583f394ae5e4957b83905e779cacaa2377d9542e19e011cc60a139", "eventInfo": { "event": "meeting.modify", "timestamp": 1671523596351, "payload": { "meetingInfo": { "meetingID": "987446316", "meetingUUID": "0307e0400f0a11eca58a9fcb8e69dde8" } } } } 响应消息: 响应: HTTP/1.1 200 Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290
  • 推送预约会议事件示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "123456789", "timestamp": 1671523596351, "nonce": "60426560", "signature": "e3945cab9c583f394ae5e4957b83905e779cacaa2377d9542e19e011cc60a139", "eventInfo": { "event": "meeting.create", "timestamp": 1671523596351, "payload": { "meetingInfo": { "meetingID": "987446316", "meetingUUID": "0307e0400f0a11eca58a9fcb8e69dde8" } } } } 响应消息: 响应: HTTP/1.1 200 Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290
  • 推送用户入会事件示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "123456789", "timestamp": 1671523596351, "nonce": "60426560", "signature": "e3945cab9c583f394ae5e4957b83905e779cacaa2377d9542e19e011cc60a139", "eventInfo": { "event": "meeting.join", "timestamp": 1671523596351, "payload": { "meetingInfo": { "meetingID": "987446316", "meetingUUID": "0307e0400f0a11eca58a9fcb8e69dde8" }, "attendeeInfo":{ "userUUID":"f39228ec18ed4ff88afa754a69832952", "userAgent":"WeLink-desktop", "account":"yangtest01", "participantID":"ebbe4e6cdc6111ee960a91a270e1373e", "displayName":"yangtest01", "joinTime":1709802363369, "leftTime":0, "role":"CHAIR", "callNumber":"+86571264265330456" } } } } 响应消息: 响应: HTTP/1.1 200 Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290
  • 推送取消会议事件示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "123456789", "timestamp": 1671523596351, "nonce": "60426560", "signature": "e3945cab9c583f394ae5e4957b83905e779cacaa2377d9542e19e011cc60a139", "eventInfo": { "event": "meeting.cancel", "timestamp": 1671523596351, "payload": { "meetingInfo": { "meetingID": "987446316", "meetingUUID": "0307e0400f0a11eca58a9fcb8e69dde8" } } } } 响应消息: 响应: HTTP/1.1 200 Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290
  • 推送用户离会事件示例 请求消息: POST /openapi/meetingevent Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive Pragma: No-cache Cache-Control: no-cache X-Request-ID: 539e8b710378987ffc5eb844b5e5c290 { "appID": "123456789", "timestamp": 1671523596351, "nonce": "60426560", "signature": "e3945cab9c583f394ae5e4957b83905e779cacaa2377d9542e19e011cc60a139", "eventInfo": { "event": "meeting.left", "timestamp": 1671523596351, "payload": { "meetingInfo": { "meetingID": "987446316", "meetingUUID": "0307e0400f0a11eca58a9fcb8e69dde8" }, "attendeeInfo":{ "userUUID":"f39228ec18ed4ff88afa754a69832952", "userAgent":"WeLink-desktop", "account":"yangtest01", "participantID":"ebbe4e6cdc6111ee960a91a270e1373e", "displayName":"yangtest01", "joinTime":1709802363369, "leftTime":1709802399449, "role":"CHAIR", "callNumber":"+86571264265330456" } } } } 响应消息: 响应: HTTP/1.1 200 Date: Tue, 17 Dec 2022 16:06:36 GMT Content-Type: application/json;charset=UTF-8 Connection: keep-alive X-Request-ID: 539e8b710378987ffc5eb844b5e5c290
  • SDK概述 华为云会议服务为开发者提供Windows、Android、iOS、Mac、Electron、Web的客户端SDK,方便开发者将华为云会议的音频会议、视频会议、桌面共享能力快速集成到自己的应用中。 华为云会议的客户端SDK已经实现了会议中UI界面,包括会场画面显示,会议控制功能,桌面共享等,开发者只需要调用少量接口即可完成华为云会议能力的集成。客户端SDK已经提供的主要UI如下(以Windows SDK为例,其他平台的SDK能力相同,只是界面布局有差异。Web客户端SDK的能力差异较大,详细功能点对比请参考“Android/iOS/Windows/Mac/Web SDK功能对比”)。 会议中的主界面 图1 会中主界面 桌面共享界面 图2 桌面共享界面 会议来电界面 图3 会议来电界面 来电通知界面只有在应用进程没有被系统终止的情况下才能收到来电通知,移动端SDK并不提供VoIP Push能力。 Web端只能主动加入会议,不能被邀请加入会议。 Android/iOS/Windows/Mac/Web SDK功能对比如下: 表1 Android/iOS/Windows/Mac/Web SDK功能对比 分类 功能项 Windows Mac Android iOS Web桌面版 备注 会议管理 会议预约 √ √ √ √ x 接口 创建立即会议 √ √ √ √ x 接口 编辑会议 √ √ √ √ x 接口 取消会议 √ √ √ √ x 接口 会议列表 √ √ √ √ x 接口 查询会议详情 √ √ √ √ x 接口 查询云会议室 √ √ √ √ x 接口 修改云会议室信息 √ √ √ √ x 接口 加入会议 通过会议ID加入会议 √ √ √ √ √ 接口 通过会议链接(Random码)加入会议 √ √ √ √ √ 接口 被邀加入会议 √ √ √ √ x UI 与会者会控 自己麦克风静音 √ √ √ √ √ UI 自己扬声器闭音 √ √ √ √ √ UI 音频设备切换 √ √ √ √ √ UI 摄像头切换 √ √ √ √ √ UI 修改会场名称 √ √ √ √ √ UI 举手 √ √ √ √ √ UI 选看 √ √ √ √ √ UI 离开会议 √ √ √ √ √ UI 主持人会控 全场静音 √ √ √ √ √ UI 静音其他与会者 √ √ √ √ √ UI 移除与会者 √ √ √ √ √ UI 转移主持人 √ √ √ √ √ UI 结束会议 √ √ √ √ √ UI 启动录制 √ √ √ √ √ UI 锁定会议 √ √ √ √ √ UI 锁定共享 √ √ √ √ √ UI 广播单画面 √ √ √ √ √ UI 广播多画面 √ x x x x UI 设置联席主持人 √ √ √ √ x UI 画面布局 桌面:演讲者模式 √ √ - - √ UI 桌面:画廊模式 25画面 25画面 - - 6画面 UI 桌面:画中画模式 √ √ - - x UI 移动:大画面 - - √ √ - UI 移动:均分画面 - - √ √ - UI 语音激励 √ √ √ √ √ UI 视频分辨率 发送最高分辨率 1080P(默认720P) 720P(默认360P) 720P 720P 360P UI 接收最高分辨率 1080P(默认720P) 720P(默认360P) 720P 720P 720P UI 桌面共享分辨率 发送最高分辨率 4K 1080P 4K 4K 1080P UI 接收最高分辨率 4K 1080P 4K 4K 1080P UI 会议共享 发起屏幕共享 √ √ √ √ √ UI 观看屏幕共享 √ √ √ √ √ UI 发起白板共享 √ √ x x x UI 观看白板共享 √ √ √ √ √ UI 发起程序共享 √ √ x x √ UI 观看程序共享 √ √ √ √ √ UI 标注 √ √ √ √ x UI 远程控制 √ √ x x x UI 聊天 聊天窗口 √ √ √ √ √ UI 弹幕 √ √ √ √ √ UI 点对点通话 视频通话 √ √ √ √ x UI 音频通话 √ x √ √ x UI 其他 美颜 √ x √ √ x UI 虚拟背景 √ √ x √ x UI 说明: Windows、Mac、iOS SDK支持虚拟背景 其他端Android SDK需要集成虚拟背景功能,请联系华为销售人员。 语音会议 √ √ √ √ x UI AI字幕 √ √ x x x UI 投票 √ √ √ √ x UI Web SDK仅支持桌面版(Windows和Mac的Chrome浏览器和Safari浏览器),不支持手机版(Android和iOS)。 集成Web SDK时如果需要使用“会议管理”功能,请在服务后台调用服务端API的“会议管理”接口。 Electron SDK的功能与Windows和Mac SDK功能相同。