华为云用户手册

  • 变更实例规格的影响 变更实例规格的时长和代理数量有关,单个代理的变更时长一般在5~10分钟,代理数量越多,规格变更时间越长。 表2 变更实例规格的影响 变更配置类型 影响 基准带宽/代理数量 扩容基准带宽/代理数量不会影响原来的代理,业务也不受影响。 扩容基准带宽/代理数量时,系统会根据当前磁盘大小进行相应比例的存储空间扩容。例如扩容前实例的代理数为3,每个代理的磁盘大小为200GB,扩容后实例的代理数为10,此时代理的磁盘大小依旧为200GB,但是总磁盘大小为2000GB。 新创建的Topic才会分布在新代理上,原有Topic还分布在原有代理上,造成分区分布不均匀。通过修改分区平衡,实现将原有Topic分区的副本迁移到新代理上。 存储空间 扩容存储空间有次数限制,只能扩容20次。 扩容存储空间不会影响业务。 代理规格 若Topic为单副本,扩容/缩容期间无法对该Topic生产消息或消费消息,会造成业务中断。 若Topic为多副本,扩容/缩容代理规格不会造成服务中断,但可能会导致消费的分区消息发生乱序,请谨慎评估业务影响,建议您在业务低峰期扩容/缩容。 扩容/缩容代理规格的过程中,节点滚动重启造成分区Leader切换,会发生秒级连接闪断,在用户网络环境稳定的前提下,Leader切换时长一般为1分钟以内。多副本的Topic需要在生产客户端配置重试机制,方法如下: 生产客户端为Kafka开源客户端时,检查是否配置retries参数,建议此参数值设置为3~5。 生产客户端为Flink客户端时,检查是否配置重启策略,配置重启策略可以参考如下代码。 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3, Time.seconds(20))); 若实例已创建的分区数总和大于待缩容规格的实例分区数上限,此时无法缩容。不同规格配置的实例分区数上限不同,具体请参见产品规格。 例如:kafka.4u8g.cluster*3的实例,已创建800个分区,您想把此实例的规格缩容为kafka.2u4g.cluster*3,kafka.2u4g.cluster*3规格的实例分区数上限为750,此时无法缩容。
  • 带宽限制值估算方法 带宽限制值受分区平衡任务执行时间、分区副本Leader/Follower分布情况以及消息生产速率等因素影响,具体分析如下。 带宽限制值作用范围为整个Broker,对该Broker内所有副本同步的分区进行带宽限流。 带宽限制会将分区平衡后新增的副本视为Follower副本限流,分区平衡前的Leader副本视为Leader副本限流,Leader副本的限流和Follower副本限流分开计算。 带宽限制不会区分是正常的生产消息造成的副本同步还是分区平衡造成的副本同步,因此两者的流量都会被限流统计。 假设分区平衡任务需要在200s内完成,每个副本的数据量为100MB,在以下几种场景中,估算带宽限制值。 场景一:Topic1有2分区2副本,Topic2有1分区1副本,所有Leader副本在同一个Broker上,Topic1和Topic2分别需要新增1个副本 表3 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1 Topic1 1 0 0,2 Topic2 0 0 0 表4 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,1,2 Topic1 1 0 0,1,2 Topic2 0 0 0,2 图7 场景一分区平衡图 如图7所示,有3个副本需要从Broker 0拉取数据,Broker 0中每个副本的数据量为100MB,Broker 0中只有Leader副本,Broker 1和Broker 2中只有Follower副本,由此得出以下数据: Broker 0在200s内完成分区平衡所需的带宽限制值=(100+100+100)/200=1.5MB/s Broker 1在200s内完成分区平衡所需的带宽限制值=100/200=0.5MB/s Broker 2在200s内完成分区平衡所需的带宽限制值=(100+100)/200=1MB/s 综上所述,若想要在200s内完成分区平衡任务,带宽限制值应设为大于等于1.5MB/s。由于控制台的带宽限制只能是整数,因此带宽限制值应设为大于等于2MB/s。 场景二:Topic1有2分区1副本,Topic2有2分区1副本,Leader副本分布在不同Broker上,Topic1和Topic2分别需要新增1个副本 表5 分区平衡前Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0 Topic1 1 1 1 Topic2 0 1 1 Topic2 1 2 2 表6 分区平衡后Topic分区的副本分布 Topic名称 分区名称 Leader副本所在Broker Follower副本所在Broker Topic1 0 0 0,2 Topic1 1 1 1,2 Topic2 0 1 1,2 Topic2 1 2 2,0 图8 场景二分区平衡图
  • 基本概念 账号 用户注册时的账号,账号对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。由于账号是付费主体,为了确保账号安全,建议您不要直接使用账号进行日常管理工作,而是创建用户并使用他们进行日常管理工作。 用户 由账号在 IAM 中创建的用户,是云服务的使用人员,具有身份凭证(密码和访问密钥)。 在我的凭证下,您可以查看账号ID和用户ID。通常在调用API的鉴权过程中,您需要用到账号、用户和密码等信息。 区域(Region) 从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 详情请参见区域和可用区。 可用区(AZ,Availability Zone) 一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个集群。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 项目 华为云的区域默认对应一个项目,这个项目由系统预置,用来隔离物理区域间的资源(计算资源、存储资源和网络资源),以默认项目为单位进行授权,用户可以访问您账号中该区域的所有资源。如果您希望进行更加精细的权限控制,可以在区域默认的项目中创建子项目,并在子项目中购买资源,然后以子项目为单位进行授权,使得用户仅能访问特定子项目中资源,使得资源的权限控制更加精确。 图1 项目隔离模型 在我的凭证下,您可以查看项目ID。 git 分布式版本管理软件,最初由Linus Torvalds创作。 分支(Branching) 在版本控制与软件配置管理中,分支是由某个版本的程式码或软件物件中建立复制版本,在分支出来后的两个版本,可以独立进行修改。分支会形成树状结构,也被称为trees,streams或codelines。原始的版本,称为父分支(parent branch)或是上游分支(upstream branch)。分支出来的复本,称为子分支(Child branches)。作为最源头,没有父分支的分支,称为主干(trunk)或主线(mainline)。 修订标签 / 标签(revision tag / tag) 在版本控制系统中,对应某一项目特定修订版本的文本标签。可以让使用者针对项目的某一特定状态给予有意义的名称。一些版本控制系统的指令可以用修订标签代替修订版本标识符。在软件开发过程中,可以用修订标签来标示软件特定的软件版本周期,例如“1.2版”。 分叉(复刻/fork) 一个软件工程名词,发生在当开发人员从一个软件包拷贝了一份源代码然后在其上进行独立的开发,创建不同的软件。这个术语不只意味着版本控制上的分支,同时也意味着开发者社区的分割,是一种形式的分裂。 在Github出现之后,fork成为常态,再加上合并请求的机制,事实上社区并未分裂,却变得更加繁荣了。 合并请求(Pull requests/merge request) 用户可以将自己的代码(在fork仓库中编写,或者在某个新的分支中编写),提出合并请求,由代码仓库的管理审核,并合入。 父主题: 使用前必读
  • 结构定义 表1 请求Body参数 参数 是否必选 参数类型 描述 etag 是 String 参数说明:Map消息的etag,格式为:地图来源_格式标准_标准对应的版本_扩展说明_时间。仅允许数字、大小写字母及下划线(_)的组合。 mapParts 是 Array of UploadMapPart objects 参数说明:高精地图的区域列表。 表2 UploadMapPart 参数 是否必选 参数类型 描述 referencePoints 是 Array of UploadMapReferencePoint objects 当前区域的分割参考点,即当前区域地图数据需下发的目标设备 nodes 是 Array of UploadMapNode objects 基于V2X MAP消息集定义的node节点,单一分片地图暂定最大63个node partNo 否 Integer 参数说明:地图分片编号。当“referencePoints”中的“deviceType”为“OBU”时为必须填。 最小值:1 最大值:65535 表3 UploadMapReferencePoint 参数 是否必选 参数类型 描述 deviceType 是 String 参考点设备的设备类型。 deviceId 是 String 参考点设备的设备id, 若设备类型为RSU则为rsu_id,若设备类型为Edge则为v2x_edge_id,若设备类型为OBU则为"all"。设备id为36位小写字母、数字及中划线(-)的组合",或者是"all"。 表4 UploadMapNode 参数 是否必选 参数类型 描述 name 否 String 参数说明:节点属性名称。仅允许小写字母、大写字母、数字、下划线(_)及中划线(-)的组合。 最小长度:1 最大长度:256 id 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 refPos 是 UploadMapPosition3D object 参数说明:位置信息。 inLinks 否 Array of UploadMapLink objects 参数说明:节点上下游路段集合。 zone 否 Array of UploadMapZone objects 参数说明:特殊区域,如导流线,禁停区等。 表5 UploadMapPosition3D 参数 是否必选 参数类型 描述 lat 是 Number 参数说明:定义纬度数值,北纬为正,南纬为负,单位为:1°,精确到小数点后7位; 最小值:-90 最大值:90 lon 是 Number 参数说明定义经度数值。东经为正,西经为负,单位为:1°,精确到小数点后7位; 最小值:-180 最大值:180 ele 否 Number 参数说明:定义车辆海拔高程,可选,单位为分米。数值-4096 表示无效数值。 最小值:-4096 最大值:61439 表6 UploadMapLink 参数 是否必选 参数类型 描述 name 否 String 参数说明:路段名称。仅允许小写字母、大写字母、数字、下划线(_)及中划线(-)的组合。 最小长度:1 最大长度:256 upstreamNodeId 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 speedLimits 否 Array of UploadMapSpeedLimit objects 参数说明:限速列表,最大9个。 linkWidth 是 Integer 参数说明:车道宽度,单位cm。 最小值:0 最大值:400 points 否 Array of UploadMapPosition3D objects 参数说明:路段中心点,数量范围(2~31)。 movements 否 Array of UploadMapMovement objects 参数说明:下游信息,最大32个。 lanes 是 Array of UploadMapLane objects 参数说明:路段包含的车道,最大32个。 stopLine 否 Array of UploadMapPosition3D objects 参数说明:道路停止线,一般在红绿灯路口定义多个坐标点连接成为一条线,通常为两点连接为一条直线,也可以是一条折线,数量范围(2-32)。 表7 UploadMapMovement 参数 是否必选 参数类型 描述 remoteIntersection 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 phaseId 否 Integer 参数说明:信号灯相位ID,数值0表示无效ID。 最小值:0 最大值:255 表8 UploadMapLane 参数 是否必选 参数类型 描述 laneId 是 Integer 参数说明:车道ID。车道定义在每一条有向路段上,同一条有向路段上的每个车道,都拥有一个单独的ID。以该车道行驶方向为参考,自左向右从1开始编号 最小值:0 最大值:20 laneWidth 是 Integer 参数说明:车道宽度,单位cm。 最小值:0 最大值:400 laneAttributes 是 UploadMapLaneAttributes object 参数说明:定义车道属性。包括车道共享情况以及车道本身所属的类别特性。 maneuvers 否 Array of strings 参数说明:车道所允许的行驶方向。 取值范围: straightAllowed:允许直行 leftAllowed:允许左转向 rightAllowed:允许右转向 uTurnAllowed:允许掉头转向 leftTurnOnRedAllowed:红灯情况下允许左转向 rightTurnOnRedAllowed:红灯情况下允许右转向 laneChangeAllowed:允许变道 noStoppingAllowed:不允许停车 yieldAllWaysRequired:非保护车道状态,如永久黄灯状态 goWithHalt:停车,再前行 caution:小心前行 connectsTo 否 Array of UploadMapConnection objects 参数说明:车道与下游路段车道的连接关系列表。 speedLimits 否 Array of UploadMapSpeedLimit objects 参数说明:限速列表,最大9个。 points 是 Array of UploadMapPosition3D objects 参数说明:车道中间点列表。 parkingSlots 否 Array of UploadMapParkingSlot objects 参数说明:路边停车位。 表9 UploadMapLaneAttributes 参数 是否必选 参数类型 描述 shareWith 否 Array of strings 参数说明:定义车道被共享的情况。在已有的车道属性定义基础上,该数据表示此车道还会有其他的交通参与者出现,并可能拥有相同的路权。 取值范围: overlappingLaneDescriptionProvided:当存在其他车道时,描述重叠共享车道的路径。不适用简单交叉车道。 multipleLanesTreatedAsOneLane:当车道对象的路径和宽度细节表示多个车道的情况下,使用该参数判断是否为多个车道。各种模式和交通类型都可以共享该车道。 otherNonMotor:其他非机动车类型的共享车道情况。 individualMotorizedVehicle:个人机动车共享车道情况。 bus:公交车共享车道情况。 taxi:出租车共享车道情况。 pedestrians:人群共享车道情况。 cyclistVehicle:自行车共享车道情况。 trackedVehicle:履带车共享车道情况。 pedestrian:行人共享车道情况。 laneType 是 UploadMapLaneTypeAttributes object 参数说明:道路属性,根据道路类型定义其具体的属性。该属性包含多个子属性,对于一条车道,只有一个属性会生效,正常情况下只携带一个子属性。如果携带了多个子属性,属于异常情况,取第一个携带的子属性。 leftBoundary 是 UploadMapLaneBoundary object 参数说明:定义车道线属性。 rightBoundary 是 UploadMapLaneBoundary object 参数说明:定义车道线属性。 hovTimes 否 Array of UploadMapHovTime objects 参数说明:hov(多成员车道,High-Occupancy Vehicle Lane)生效时间。 busTimes 否 Array of UploadMapBusTime objects 参数说明:公交车道生效时间生效时间。 prohibitInfos 否 Array of UploadMapProhibitInfo objects 参数说明:禁行信息。 表10 UploadMapLaneTypeAttributes 参数 是否必选 参数类型 描述 vehicle 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable ramp hovLaneOnly busOnly taxiOnly publicUseOnly emergency permissionOnRequest crosswalk 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable bicyleAllowed xWalkFlyOver fixedCycleTime biDirectionalCycleTimes hasPushWalkButton audioSupport rfSignalRequestPresent unsignalizedSegmentsPresent bikeLane 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable pedestrianAllowed bikeFlyOver fixedCycleTime biDirectionalCycleTimes isolatedByBarrier unsignalizedSegmentsPresent sidewalk 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable bicyleAllowed sidewalkFlyOver walkBikes median 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable median whiteLineHashing stripedLines doubleStripedLines trafficCones constructionBarrier trafficChannels lowCurbs highCurbs striping 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable drawOnLeft drawOnRight connectingLanesLeft connectingLanesRight connectingLanesAhead trackedVehicle 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable commuterRailRoad lightRailRoad heavyRailRoad otherRailType parking 否 Array of strings 参数说明:表达车道相关属性。最大个数:16 取值范围: revocable parallelParking headInParking notParkZone parkingForBus parkingForTaxi noPublicParking 表11 UploadMapLaneBoundary 参数 是否必选 参数类型 描述 type 是 String 参数说明:车道线类型。 取值范围: singleSolidLine: 单实线 doubleSolidLine: 双实线 singleDashedLine: 单虚线 doubleDashedLine: 双虚线 dashedSolidLine: 虚实线(内虚,外实) solidDashedLine: 实虚线(内实,外虚) curbside: 路牙 railing: 栏杆 wall: 墙 color 否 String 参数说明:车道线颜色。 取值范围: white: 白色 yellow: 黄色 width 否 Integer 参数说明:车道线宽度,单位:厘米 最小值:0 最大值:100 表12 UploadMapHovTime 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表13 UploadMapBusTime 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表14 UploadMapProhibitInfo 参数 是否必选 参数类型 描述 startTime 是 Integer 参数说明:生效开始时间,定义为一天的分钟数。 最小值:0 最大值:1440 endTime 是 Integer 参数说明:生效结束时间,定义为一天的分钟数。 最小值:0 最大值:1440 vehicleType 是 Integer 参数说明:车辆类型,参考车辆基本类型。 最小值:0 最大值:100 validType 否 String 参数说明:生效日期类型。 取值范围: allDate: 所有日期 holiday: 节假日 exceptHoliday: 节假日除外 weekend: 周末 exceptWeekend: 周末除外 表15 UploadMapConnection 参数 是否必选 参数类型 描述 remoteIntersection 是 UploadMapNodeReferenceId object 参数说明:地图节点ID。 connectingLane 否 UploadMapConnectingLane object 参数说明:用于定位上游车道转向连接的下游车道。包括下游车道 ID 以及该转向的允许行驶行为下游车道 ID 的作用范围是该车道所在的路段。 phaseId 否 Integer 参数说明:定义信号灯相位ID。数值0表示无效。 最小值:0 最大值:255 表16 UploadMapNodeReferenceId 参数 是否必选 参数类型 描述 region 否 Integer 参数说明:所在区域在地图中的编号,数值0仅用于测试。 最小值:0 最大值:65535 id 是 Integer 参数说明:节点编号。路网最基本的构成即节点和节点之间连接的路段。节点可以是路口,也可以是一条路的端点。一个节点的ID在同一个区域内是唯一的。 数值0~255预留为测试使用。 最小值:0 最大值:65535 表17 UploadMapConnectingLane 参数 是否必选 参数类型 描述 laneId 是 Integer 参数说明:车道定义在每一条有向路段上,同一条有向路段上的每个车道,都拥有一个单独的ID。车道号以该车道行驶方向为参考,自左向右从1开始编号。 最小值:1 最大值:255 maneuvers 否 Array of strings 参数说明:车道所允许的行驶方向。 取值范围: straightAllowed:允许直行 leftAllowed:允许左转向 rightAllowed:允许右转向 uTurnAllowed:允许掉头转向 leftTurnOnRedAllowed:红灯情况下允许左转向 rightTurnOnRedAllowed:红灯情况下允许右转向 laneChangeAllowed:允许变道 noStoppingAllowed:不允许停车 yieldAllWaysRequired:非保护车道状态,如永久黄灯状态 goWithHalt:停车,再前行 caution:小心前行 表18 UploadMapSpeedLimit 参数 是否必选 参数类型 描述 type 是 String 参数说明:限速类型。 取值范围: unknown: 未知 maxSpeedInSchoolZone: 学校区域的最大速度 maxSpeedInSchoolZoneWhenChildrenArePresent: 学校区域存在学生时的最大速度 maxSpeedInConstructionZone: 建筑区的最大速度 vehicleMinSpeed: 汽车最小速度 vehicleMaxSpeed: 汽车最大速度 vehicleNightMaxSpeed: 汽车夜间行驶最大速度 truckMinSpeed: 卡车最小速度 truckMaxSpeed: 卡车最大速度 truckMinSpeed: 卡车最小速度 truckNightMaxSpeed: 卡车夜间行驶最大速度 vehiclesWithTrailersMinSpeed: 拖车最小速度 vehiclesWithTrailersMaxSpeed: 拖车最大速度 vehiclesWithTrailersNightMaxSpeed: 拖车夜间行驶最大速度 speed 是 Integer 参数说明:限速大小,单位为0.02m/s。数值8191表示无效数值。 最小值:0 最大值:8191 表19 UploadMapParkingSlot 参数 是否必选 参数类型 描述 polygon 是 Array of UploadMapPosition3D objects 参数说明:停车位区域边界,通过坐标点顺序连接构成的多边形,一般是四边形,最大32个点。 lat 是 Number 参数说明:定义纬度数值,北纬为正,南纬为负,单位为:1°,精确到小数点后7位; 最小值:-90 最大值:90 lon 是 Number 参数说明定义经度数值。东经为正,西经为负,单位为:1°,精确到小数点后7位; 最小值:-180 最大值:180 side 是 Integer 参数说明:停车位与lane的方位关系。左侧:left(0),右侧:right(1),不使用:not used(2) 最小值:0 最大值:2 poiId 是 Integer 参数说明:停车位id。最大为65535。 最小值:0 最大值:65535 表20 UploadMapZone 参数 是否必选 参数类型 描述 type 是 String 参数说明: 区域类型。 取值范围: crosswalk:人行横道 constructionIsolation:施工隔离 guideLine:导流线区域 speedBump:减速带 gridLine:方格线区域 regionalBoundary 是 Array of UploadMapPosition3D objects 参数说明:通过坐标点顺序连接构成的多边形,最大32个点。
  • 注册设备 在专业版管理控制台左侧菜单栏选择“设备管理”。 进入“设备列表”页面。 单击“注册设备”。 进入“注册设备”页面。 填写注册信息,单击右下角的“确认”。 基本信息 图1 基本信息 表1 注册设备基础信息 参数 说明 设备名称 设备注册时使用的名称,批量注册时使用该名称作为前缀。仅允许中文字符、英文字母、数字、下划线、中划线且长度不超过64。 描述 设备描述。不允许输入*~#等特殊字符且长度为0-255。 标签 设备标签。 单击“创建标签”,添加标签,在输入框中依次填写标签键和标签值。 只允许大小写字母、数字、下划线和中划线,不允许为空。标签键不允许重复,最大长度为36个字符,标签值最大长度为43个字符。 最多可添加20组标签。 单击,删除标签。 部署方式 当前仅支持注册“HiLens”类型设备。 设备类型 选择待注册的设备类型,包括“Atlas 500”、“Atlas 800”、“通用ARM设备”、“通用x86设备” 等设备类型。 本样例选择“Windows”。 高级设置 图2 高级设置 参数 说明 开启AI加速卡 AI加速卡开关。 批量注册 批量注册开关。如果开启,选择注册设备的数量。 输入值范围必须在1~100000。 IAM用户名 由帐号在IAM中创建的用户,如果没有IAM账户时,填写华为云帐号名。相关概念请参见IAM基本概念。 工作空间 选择设备注册的工作空间。默认帐号的默认工作空间,可自定义选择。 事件有效时间 如果您在设备离线时进行操作,则操作将保留在待执行的事件列表中,待设备上线后执行。 日志设置 配置日志的“日志存储时间”、“日志等级”,设置“LTS日志上传”开关。 图3 应用日志 表2 注册设备日志设置 参数 说明 日志存储时间 日志存储时长,单位为天。输入值范围必须在1~30。 日志等级 选择日志等级,可选“Error(错误)”、“Warning(警告)”、“Info(信息)”、“Debug(调试)”。 本地日志设置 大小限制 对该注册设备的日志大小限制,默认为50MB,不可自定义。 日志滚动数量 每隔 {0} 天,对本地日志根据数量对日志进行一次日志滚动,删除最旧的日志文件。每个日志文件固定10M。 LTS 云日志 设置 日志上传 日志上传开关。系统日志与应用日志默认在本地存储,如果要上传至云日志服务(LTS),可开启“日志上传”开关。 开关开启后,选择日志等级,仅对应等级的日志上传至LTS。
  • 检测算法中的难例图片判断 对检测结果进行判断。 接口调用 hard_sample_detection_filter(inputs) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 inputs 是 list 检测框,例如[bbox1, bbox2, bbox3,....],,其中bbox = [xmin, ymin, xmax, ymax, score, label],,其中xmin,、ymin、xmax、 ymax、 score为float类型,score取值范围为[0,1],label为int类型。 返回值 返回Bool值,True或False,True表示是难例,False表示不是难例。 父主题: 难例上传模块
  • 获取难例配置 读取难例配置文件,难例配置文件路径为相应技能“data”目录,如“/home/hilens/skills/***skill_path/data/hardsample_config.json”。 接口调用 hilens.get_hard_sample_config() 返回值 json格式的难例配置。样例如下。 { "hard_sample_setting" : [ { "camera_names" :["123"], "data_count" : 100, "datacur_count" : 100, "dataset_name" : "dataset-a3ae", "dataset_path" : "https://a.b.csss.obs.cn-north-7.ulanqab.huawei.com/nali/", "model_algorithm" : "image_classification", "model_id" : "073c4c8674164307ae300b713a4a050c", "model_name" : "model-framework5", "setting_config" : { "thr" : 0.5 } } ] } 表1 参数说明 参数名 描述 camera_names 摄像头名称。可在上传的时候区分不同摄像头的数据。 data_count 总上传图片数。 datacur_count 已经上传的图片数。 dataset_name 要上传到的数据集名称。 dataset_path 要上传的路径,对应的是数据集的url。 model_algorithm 模型的算法类别,一般为分类或检测。 model_id 模型ID。 model_name 模型名称。可在上传的时候区分不同模型的数据。 setting_config 其他设置。可以自定义一些配置,比如下面的阈值。 thr 阈值,可以通过难例上传配置页面下发阈值实现不同场景使用不同的阈值。 父主题: 难例上传模块
  • HiLens Framework_Python简介 HiLens Framework通过封装底层接口、实现常用的管理功能,让开发者可以在华为HiLens管理控制台上方便地开发技能,培育AI生态。 HiLens Framework的分层结构如图1所示,HiLens Framework封装了底层的多 媒体处理 库(摄像头/麦克风驱动模块Media_mini),以及D芯片相关的图像处理库(DVPP)和模型管理库(ModelManager),另外开发者也可以使用熟悉的视觉处理库OpenCV。在此之上,HiLens Framework提供了以下6个模块供开发者使用,方便开发诸如人形检测、疲劳驾驶检测等技能,模块说明如表1所示。用户可以开发Python版本的技能并在HiLens Kit上运行。 图1 HiLens Framework框架 表1 模块说明 序号 模块 功能 1 Input Manager 输入模块:负责视频、音频等输入数据的接入管理。 2 Media Processor 预处理模块:负责视频、音频等媒体数据的处理。 3 Model Manager 模型管理模块:负责模型的初始化与推断任务。 4 Output Manager 输出模块:负责流、文件、 消息通知 等输出任务的管理。 5 Resource Manager 资源管理模块:负责文件、图片、模型等资源的路径管理。 6 Logging System 日志模块:负责日志系统管理。
  • 初始化HiLens Framework 该接口用于初始化HiLens Framework。在调用HiLens Framework的其他接口之前,需要先做全局初始化。 接口调用 hilens.init(verify) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 verify 是 字符串 长度0到128的字符串。 应与华为HiLens管理控制台上新建技能时,所填写的“基本信息”中的“检验值”一致。如果不一致,HiLens Framework会强制技能停止。 图1 新建技能 返回值 0为HiLens Framework初始化成功,其他为失败。 该方法还可以用来验证技能是否损坏或被篡改。如果想要使用该功能,参数verify应该是开发者编写的一个函数的返回值,该返回值是实时计算要验证的文件的hash值。开发者在完成技能的开发后,用同样的hash方法计算出hash值,填入控制台新建技能的校验值。如下所示: #! /usr/bin/python3.7 import hilens def verify(): # 开发者需要实现一个方法,来验证程序身份(以防被损坏、篡改) # 例如可以计算技能包中重要文件的Hash值,verify应当返回一个字符串(1~128字节)。 # 在HiLens平台,技能开发中填入此Hash值。调用init方法后,技能会自动将此Hash值发送到平台上进行比对,并验证技能的使用许可。 # 调试期间,开发者可以考虑使用一个固定的字符串来进行校验,以便于修改代码。 # 因为Python脚本源码下发到设备上较容易篡改,对于商用技能,建议开发者使用C++进行开发。 # 注意:正式发布的技能不应使用硬编码的字符串来校验! return "hello" def main(): # 初始化HiLens rc = hilens.init(verify()) # 如果在技能开发调试阶段不想用此功能,那么直接填写一个静态字符串即可 # 如: hilens.init("hello") if rc != 0: hilens.error("Failed to initialize HiLens") return # 业务代码 pass # 完成后,清理资源 hilens.terminate() if __name__ == '__main__': main() 父主题: 初始化
  • 示例-EIServices模块 EIServices模块输出示例代码如下: import hilens import cv2 import numpy as np import base64 import json def run(): # 使用图片作为输入 f=open('/tmp/dengchao.jpg','rb') base_f=base64.b64encode(f.read()) f_string=base_f.decode('utf-8') # 使用Mat格式或者直接从摄像头输入 #img = cv2.imread("/tmp/dengchao.jpg") cap = hilens.VideoCapture() frame = cap.read() img = cv2.cvtColor(frame, cv2.COLOR_YUV2BGR_NV21) img_str = cv2.imencode('.jpg', img)[1].tostring() # 将图片编码成流数据,放到内存缓存中,然后转化成string格式 b64_code = base64.b64encode(img_str) # 编码成base64 f_string1=b64_code.decode('utf-8') headers = hilens.EIHeaders() body = {"image_base64": f_string} json_str = json.dumps(body) response5 = hilens.EIServices.Request(hilens.POST, "hilens-api.cn-north-4.myhuaweicloud.com", "/v1/human-detect", "", json_str, headers) print(response5.requestState) print(response5.responseBody) body1 = {"face_set_name": "ei_test"} json_str1 = json.dumps(body1) response6 = hilens.EIServices.Request(hilens.POST, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets", "", json_str1, headers) print(response6.requestState) print(response6.responseBody) response7 = hilens.EIServices.AddFace("ei_test", f_string, "") print(response7.requestState) print(response7.responseBody) response8 = hilens.EIServices.SearchFace("ei_test", f_string, 1, 0.93, "") print(response8.requestState) print(response8.responseBody) response9 = hilens.EIServices.Request(hilens.POST, "face.cn-north-4.myhuaweicloud","/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test/search", "", json_str, headers) print(response9.requestState) print(response9.responseBody) response10 = hilens.EIServices.Request(hilens.DELETE, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test", "", "", headers) print(response10.requestState) print(response10.responseBody) response11 = hilens.EIServices.Request(hilens.GET, "face.cn-north-4.myhuaweicloud.com", "/v1/fc3bc995e9c441369d71159c67404e88/face-sets/ei_test", "", "", headers) print(response11.requestState) print(response11.responseBody) if __name__ == '__main__': hilens.init("hello") run() hilens.terminate() 父主题: EIServices模块
  • 音频采集器 该接口用于构造一个音频采集器,从本地麦克风获取音频或者本地音频文件获取音频数据。 接口调用 1.0.8及以上固件版本 hilens.AudioCapture(file_path) 1.1.2及以上固件版本 hilens.AudioCapture(sample_rate, bit_width, nSamples, sound_mode) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 file_path 否 字符串 音频文件路径,从该文件获取音频数据,构造一个音频文件数据的采集器。 sample_rate 否 整型 采样率,本地麦克风录音参数。默认值为“AUDIO_SAMPLE_RATE_44100”,可取值: AUDIO_SAMPLE_RATE_8000 AUDIO_SAMPLE_RATE_12000 AUDIO_SAMPLE_RATE_11025 AUDIO_SAMPLE_RATE_16000 AUDIO_SAMPLE_RATE_22050 AUDIO_SAMPLE_RATE_24000 AUDIO_SAMPLE_RATE_32000 AUDIO_SAMPLE_RATE_44100 AUDIO_SAMPLE_RATE_48000 AUDIO_SAMPLE_RATE_64000 AUDIO_SAMPLE_RATE_96000 bit_width 否 整型 位宽,本地麦克风录音参数。默认值为“AUDIO_BIT_W IDT H_16”。 nSamples 否 整型 每帧音频采样点数,本地麦克风录音参数。默认值为1024,取值范围[80,2048]。 sound_mode 否 整型 声道模式,本地麦克风录音参数。默认值为“AUDIO_SOUND_MODE_MONO”,可取值: AUDIO_SOUND_MODE_MONO AUDIO_SOUND_MODE_STEREO 本地麦克风只有一个,不支持多个进程设置不同的录音参数,先设置的生效。 麦克风录音接口和播放音频文件的接口不能同时使用。 返回值 音频数据采集器。 如果创建失败则抛出一个CreateError。开发者可以在查看技能日志输出。 父主题: 音频输入模块
  • 分类算法中的难例图片判断 对分类结果进行判断。 接口调用 hard_sample_classification_filter(inputs,input_size) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 inputs 是 list 类别得分,例如[class1-score, class2-score, class2-score,....],class-score取值范围为[0,1]。 input_size 是 int 类别数。 返回值 返回Bool值,True或False,True表示是难例,False表示不是难例。 父主题: 难例上传模块
  • 构造一个用于输出的显示器 显示器类,用来构造一个显示器,将视频(图片帧)输出到显示器类。 接口调用 hilens.Display(type, path=None) 参数说明 表1 参数说明 参数名称 是否必选 参数类型 参数描述 type 是 枚举类型,可选hilens.HDMI、hilens.RTMP、hilens.H264_FILE hilens.HDMI:直接通过设备的HDMI接口输出到显示屏,目前只支持一路数据显示到HDMI。 hilens.RTMP:实时输出到RTMP服务器供用户查看。 hilens.H264_FILE:输出到文件(h264编码的裸流)供用户查看。 path 否 字符串 如果类型为HDMI则忽略此参数,如果是RTMP则path为RTMP服务器的URL(rtmp://xxxx), 为H264_FILE则path为输出文件的路径(如hilens.get_workspace_path()+”/out.h264”)。 如果是H264_FILE类型的,需要注意,生成的文件仅是h264编码的裸视频流,不含帧率等信息。而且HiLens Framework并未限制文件大小。所以此功能建议只作为调试使用,如果需要保存大文件,建议将文件位置设为/var/lib/docker目录。 返回值 返回一个显示器实例。 如果创建失败则抛出一个CreateError。开发者可以在查看技能日志输出、或cat /dev/logmpp来定位错误原因。 父主题: 输出模块
  • 使用前必读 在华为HiLens管理控制台上开发技能时需要在线编辑或上传逻辑代码,而在逻辑代码中需要用到HiLens Framework,本文档针对开发者在开发可运行在HiLens Kit设备的技能的时候,介绍如何在逻辑代码中使用HiLens Framework API,您可以根据表1查找您需要的内容。 表1 文档导读 章节 说明 HiLens Framework_Python简介 快速了解HiLens Framework接口组成以及接口列表。 初始化 视频输入模块 预处理模块 模型管理模块 输出模块 EIServices模块 资源管理模块 日志模块 HiLens Framework封装的类和函数详细说明。
  • 初始化难例上传模块 构造一个难例过滤器。 接口调用 hilens.HardSample(threshold_one, threshold_two, filter_type) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 threshold_one 是 float 阈值。filter_type取不同值时取值不同,详见“filter_type”描述。 threshold_two 是 float 阈值。filter_type取不同值时取值不同,详见“filter_type”描述。 filter_type 是 int 难例过滤器的类型。目前取值支持0,1,2,分别对应难例发现算法“CrossEntropyFilter”、“IBT”和“ CS F”,详情请见难例上传介绍及说明。 取0的时候threshold_one为算法“CrossEntropyFilter”的参数“threshold_cross_entropy”,threshold_two可为任意值。 取1的时候threshold_one和threshold_two分别对应“IBT”算法的参数“box_threshold”和“img_threshold”。 取2的时候threshold_one和threshold_two分别对应“CSF”算法的“box_threshold_low”和“box_threshold_up”。 返回值 返回一个难例过滤器,构造失败的话会抛出异常。 父主题: 难例上传模块
  • 读取音频数据 该接口用于读取n帧音频数据。仅支持1.0.8及以上固件版本。 接口调用 hilens.AudioCapture.read(nFrames) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 nFrames 否 整型 要读取的帧数量,默认值为1。支持最多一次读取 512帧。 返回值 n帧音频数据。参数类型为numpy数组(dtype为int16)。 如果读取失败抛出一个RunTimeError。 父主题: 音频输入模块
  • 难例图片上传 对识别为难例的图片进行上传。上传的文件名为"model_name-camera_name-index.jpg",如果当前文件夹有同名文件,将会覆盖,可以在model_name或者camera_name中加入时间戳实现不覆盖。注意:obs文件名长度限制为1024个字符。 接口调用 upload_jpeg(upload_url, index, model_name, camera_name, frame) 参数说明 表1 参数说明 参数名 是否必选 参数类型 描述 upload_url 是 string 上传难例集的url。 获取难例集的url首先需要在难例上传界面配置相应的数据集,然后通过get_hard_sample_config获取难例配置,详情请见获取难例配置,返回值中的参数dataset_path对应的是数据集的url。 index 是 int 上传图片的序号。 model_name 是 string 上传图片对应的模型名称。 camera_name 是 string 上传图片对应的摄像头名称。 frame 是 mat 要上传的图片,必须为NV21格式。 返回值 返回Bool值,True或False,True表示成功上传。 父主题: 难例上传模块
  • 获取模型路径 获得技能模型所在目录的路径(末尾带”/“)。适用于创建技能时从模型管理页面选择模型并下发的情况,模型文件会被下载至一个专门存储模型的位置,通过此函数来获取模型所在目录。如果HiLens Framework没有获取模型所在目录,则返回当前路径(即代码所在目录)。 接口调用 hilens.get_model_dir() 返回值 返回字符串,技能模型所在目录路径,失败返回空字符串。 父主题: 资源管理模块
  • 上传文件 上传一个文件到OBS,此方法会阻塞线程,直至上传结束。上传的根目录(目标OBS桶的位置)是用户在华为HiLens控制台上针对每个设备配置的(参见配置数据存储位置),如果用户没有给设备配置这个信息,那么上传文件会失败。 接口调用 hilens.upload_file(key, filepath, mode) 1.0.6固件版本之后请使用hilens.upload_file_to_obs(key, filepath, mode) 参数说明 表1 参数说明 参数名称 是否必选 参数类型 参数描述 key 是 字符串 上传到OBS中的具体路径,不需要网址信息,只需OBS中的文件路径即可,如 'test/output.jpg'。 注意key中,两个目录名不可为 "." 开头或结尾,亦不可出现连续的多个斜杠如"//"。 filepath 是 字符串 待上传文件的绝对路径。 mode 是 字符串 上传模式。两种可选:“write”-覆盖方式,“append”-追加方式。 返回值 成功则返回0。否则为失败。 父主题: 输出模块
  • 示例-资源管理 资源管理示例如下所示: #! /usr/bin/python3.7 import hilens import os def run(): # 获得技能工作区目录的路径(末尾带"/") skill_path = hilens.get_workspace_path() # 获得技能模型所在目录的路径(末尾带"/") model_path = hilens.get_model_dir() # 获得技能配置。如果没有成功获取则返回None skill_config = hilens.get_skill_config() # 假设技能配置中有名为face_dataset的配置项,其值为obs中的人脸库文件face_dataset.zip的地址 # 设置技能配置参数可参考《用户指南》相关操作 face_dataset_url = skill_config["face_dataset"]["value"] # 从OBS下载该文件到技能工作区目录,并通过返回值判断是否下载成功 ret = hilens.download_from_obs(face_dataset_url, hilens.get_workspace_path()) if ret != 0: hilens.error("Failed to download from obs") return # 在技能工作区目录新建文件夹并解压 os.system('mkdir '+hilens.get_workspace_path()+'face_dataset') os.system('unzip '+hilens.get_workspace_path()+'face_dataset.zip'+' -d '+hilens.get_workspace_path()+'face_dataset/') # 计算文件的md5值 md5 = hilens.md5_of_file(hilens.get_workspace_path()+"face_dataset.zip") if __name__ == '__main__': hilens.init("hello") run() hilens.terminate() 设置技能配置参数的相关步骤如下: 登录华为HiLens控制台,在开发技能时填写运行时配置,即技能在运行时用户需要配置的参数,详情请参见新建技能。 技能开发完成后,将技能部署至您的设备上,详情请参见部署和调试技能。 将技能部署至设备上后,可在“技能管理”中设置“运行时配置”的参数,详情请参见添加运行时配置。 父主题: 资源管理模块
  • 方案架构 当前组网中,通过云连接实例连通区域A、区域B以及区域C内的VPC网络,为了提升组网的可扩展性,并降低维护难度,现在需要将VPC迁移到企业路由器中,并通过中心网络连通不同区域的企业路由器。 迁移共分为迁移前、迁移中、迁移完成三个阶段,迁移架构图如图1所示。具体说明如下: 迁移前,VPC直接接入云连接实例,通过云连接实例连通不同区域VPC网络。 迁移中: 将VPC分别接入对应区域的企业路由器中,通过大小网段确保VPC的路由表中,云连接实例和企业路由器的路由不冲突。 创建中心网络,并将不同区域的企业路由器添加到中心网络的策略中,连通不同区域的企业路由器。 验证VPC通过企业路由器和中心网络是否可以正常通信。 迁移完成后,在云连接实例中依次移除VPC,当所有VPC移除完成后,删除云连接实例。 图1 云连接实例直连VPC组网迁移架构图
  • 应用场景 华为云未上线企业路由器ER之前,客户使用云连接连通不同区域VPC网络时,需要将VPC直接接入云连接实例中。如果您希望提升跨区域组网的的可扩展性,同时降低维护难度,那么推荐您将网络迁移到云连接中心网络和企业路由器上。 云连接中心网络基于华为云骨干网络面向客户提供全球网络编排能力,帮助用户便捷、安全的创建和管理云上、云下的全球网络资源。您可以将两个及以上不同区域的企业路由器接入中心网络,构成ER对等连接,实现云上跨区域网络互通。 接下来,将主要为您介绍如何将云连接实例直连VPC组网迁移至中心网络和企业路由器。 关于企业路由器更详细的介绍,请参见企业路由器产品介绍。
  • 云连接实例直连VPC组网迁移流程 本章节介绍将云连接实例直连VPC组网迁移至中心网络和企业路由器ER的总体流程,流程说明如表1所示。 表1 云连接实例直连VPC组网迁移流程 步骤 说明 步骤一:创建企业路由器并添加VPC连接 在业务VPC对应的区域内,各创建1个企业路由器。 分别在企业路由器中添加“虚拟私有云(VPC)”连接,即将业务VPC接入企业路由器中。 检查ER路由表中的路由是否已自动添加。 在VPC路由表中,添加指向ER的大网段路由。 步骤二:创建中心网络并连接企业路由器 创建1个云连接中心网络,创建中心网络时需要配置策略,此时需要将不同区域的企业路由器添加到策略中,即在企业路由器中添加“对等连接(Peering)”连接。 步骤三:在中心网络内为跨区域网络链路配置带宽 创建全域互联带宽,本示例中创建3个全域互联带宽连通不同区域网络。 为中心网络内的跨区域网连接配置带宽,根据业务的实际需要配置,确保带宽满足业务需求。 步骤四:验证VPC基于中心网络和ER的通信情况 在VPC路由表中,添加指向其他VPC内任意一台ECS的路由,用于验证VPC和其他VPC的通信。 在每个VPC的子网内,各创建1个用于通信的ECS,登录ECS执行ping命令验证。 验证完成后,删除迁移验证相关的路由。 步骤五:执行迁移操作并删除原有云连接实例 在云连接实例中,依次移除原来加载的VPC。 每移除一个VPC,则需要验证该VPC和其他VPC的通信情况。 当所有VPC移除完成后,删除云连接实例以及验证通信的ECS。 父主题: 将云连接实例直连VPC组网迁移至中心网络和企业路由器
  • 修订记录 发布日期 修改说明 2024-05-14 规格类型名称变更。变更后名称为: 独享型(1:4) 独享型(1:8) 通用型(1:4) 鲲鹏独享型(1:4) 鲲鹏独享型(1:8) 新增基础版规格。详见数据库实例规格。 2023-12-30 包含以下内容: 新增 GaussDB数据库 引擎版本号说明。 新增 GaussDB 数据库和内核引擎版本对应关系。 新增查看云数据库GaussDB数据库和内核引擎版本。 新增日志。 优化图解云数据库GaussDB、什么是云数据库GaussDB、数据库实例规格、数据库实例参数和数据保护技术。
  • 会议室连接器兼容设备列表 下表所示第三方终端设备已经过华为实验室兼容测试。 设备型号 兼容版本 厂家 Polycom Group 300 6.2.0及以上 Polycom Polycom Group 310 6.1.7及以上 Polycom Polycom Group 500 6.2.2.7及以上 Polycom Polycom Group 550 6.2.0及以上 Polycom Polycom HDX8000 3.1及以上 Polycom Polycom MCU RMX4000 8.8.1及以上 Polycom Polycom MCU RMX1800 8.8.1及以上 Polycom 亿联VC500 63.345.0.1及以上 亿联 Avaya XT5000 09.02.04.0132及以上 Avaya
  • 代码示例 调用前请根据实际情况替换如下变量:{your endpoint string} 和 {your project id}。 认证用的AK、SK直接写入代码,会有很大安全风险,建议密文形式存放在配置文件或者环境变量中,待使用时再解密,以确保安全。 本示例以AK、SK保存在环境变量中为例。运行本示例前,请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 package com.huaweicloud.sdk.test; // 用户身份认证 import com.huaweicloud.sdk.core.auth.BasicCredentials; // 请求异常类 import com.huaweicloud.sdk.core.exception.ClientRequestException; import com.huaweicloud.sdk.core.exception.ServerResponseException; // HTTP配置 import com.huaweicloud.sdk.core.http.HttpConfig; // 导入直播服务的客户端 import com.huaweicloud.sdk.live.v1.LiveClient; // 导入待请求接口的request和response类 import com.huaweicloud.sdk.live.v1.model.ShowTranscodingsTemplateRequest; import com.huaweicloud.sdk.live.v1.model.ShowTranscodingsTemplateResponse; // 日志打印 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Application { private static final Logger logger = LoggerFactory.getLogger(Application.class); public static void showTranscodingsTemplate(LiveClient client) { try { // 初始化请求,以调用查询转码模板接口为例 ShowTranscodingsTemplateResponse showTranscodingsTemplateResponse = client.showTranscodingsTemplate( new ShowTranscodingsTemplateRequest().withDomain("play.example.huaweicloud.com") ); // 输出json格式的字符串响应 logger.info(showTranscodingsTemplateResponse.toString()); } catch (ClientRequestException e) { logger.error("HttpStatusCode: " + e.getHttpStatusCode()); logger.error("RequestId: " + e.getRequestId()); logger.error("ErrorCode: " + e.getErrorCode()); logger.error("ErrorMsg: " + e.getErrorMsg()); } } public static void main(String[] args) { String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); String endpoint = "{your endpoint string}"; String projectId = "{your project id}"; // 配置客户端属性 HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withIgnoreSSLVerification(true); // 创建认证 BasicCredentials auth = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); // 创建liveClient实例并初始化 LiveClient liveClient = LiveClient.newBuilder() .withHttpConfig(config) .withCredential(auth) .withRegion(region) .build(); showTranscodingsTemplate(liveClient); } }
  • 代码示例 调用前请根据实际情况替换如下变量:{your endpoint} 以及 {your project id}。 认证用的AK、SK直接写入代码,会有很大安全风险,建议密文形式存放在配置文件或者环境变量中,待使用时再解密,以确保安全。 本示例以AK、SK保存在环境变量中为例。运行本示例前,请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 package main import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model" "net/http" "os" ) func RequestHandler(request http.Request) { fmt.Println(request) } func ResponseHandler(response http.Response) { fmt.Println(response) } func main() { client := live.NewLiveAPIClient( live.LiveAPIClientBuilder(). WithEndpoints([]string{"{your endpoint}"}). WithCredential( basic.NewCredentialsBuilder(). WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")). WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")). WithProjectId("{your project id}"). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))). Build()) request := &model.ShowTranscodingsTemplateRequest{ Domain: "play.example.huaweicloud.com", } response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Println("%+v\n",response) } else { fmt.Println(err) } }
  • 开始使用 导入依赖模块。 1 2 3 4 5 6 7 8 9 10 import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model" "net/http" "os" ) 配置客户端属性。 默认配置 1 2 # Use default configuration httpConfig := config.DefaultHttpConfig() (可选操作)配置代理。 1 2 3 4 5 6 7 8 9 // 根据需要配置网络代理 // 代理服务器的password直接写入代码,会有很大安全风险。建议密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。 // 代理配置设置前,请先在本地环境中设置环境变量PROXY_PASSWORD httpConfig.WithProxy(config.NewProxy(). WithSchema("http"). WithHost("proxy.huaweicloud.com"). WithPort(80). WithUsername("testuser"). WithPassword(os.Getenv("PROXY_PASSWORD"))) (可选操作)配置连接。 1 httpConfig.WithTimeout(30); (可选操作)配置SSL。 1 2 // 根据需要配置是否跳过SSL证书校验 httpConfig.WithIgnoreSSLVerification(true); 初始化认证信息。 支持两种方式认证,您可以根据实际情况进行选择。 使用永久AK/SK 首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。 1 2 3 4 5 auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build() 使用临时AK/SK 首先需要获取临时AK、SK和SecurityToken,您可以通过token获取或者通过委托授权获取。 1 2 3 4 5 6 auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). WithSecurityToken(securityToken). Build() 相关参数说明如下所示: ak:华为云账号Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。 sk:华为云账号Secret Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。 projectId:云服务所在项目ID ,根据您需要操作的项目所属区域选择对应的项目ID 。 securityToken:采用临时AK/SK认证场景下的安全票据。 初始化客户端。 1 2 3 4 5 6 7 # 初始化直播服务的客户端 client := live.NewLiveClient( live.LiveClientBuilder(). WithEndpoints(endpoints). WithCredential(auth). WithHttpConfig(config.DefaultHttpConfig()). Build()) endpoint:直播服务应用区域和各服务的终端节点,具体请参见地区和终端节点。 发送请求并查看响应。 1 2 3 4 5 6 7 8 9 10 // 初始化请求,以调用接口查询直播转码模板为例 request := &model.ShowTranscodingsTemplateRequest{ Domain: "play.example.huaweicloud.com", } response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Printf("%+v\n",response) } else { fmt.Println(err) } 异常处理。 表1 异常处理 一级分类 一级分类说明 ServiceResponseError service response error url.Error connect endpoint error 1 2 3 4 5 6 7 # 异常处理 response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Println(response) } else { fmt.Println(err) } 原始Http侦听器。 在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返回信息,SDK提供侦听器功能获取原始的和加密的Http请求和返回信息。 原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即Content-Type标识为二进制时body为"***",详细内容不输出。 认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 func RequestHandler(request http.Request) { fmt.Println(request) } func ResponseHandler(response http.Response) { fmt.Println(response) } client := live.NewLiveAPIClient( live.LiveAPIClientBuilder(). WithEndpoints([]string{"{your endpoint}"}). WithCredential( basic.NewCredentialsBuilder(). WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")). WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")). WithProjectId("{your project id}"). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))). Build())
  • 安装SDK 视频直播 服务端Go SDK支持go 1.14及以上版本。执行go version检查当前Go的版本信息。 使用go get安装华为云Go SDK,执行如下命令安装华为云Go SDK库以及相关依赖库,具体的SDK版本号请参见SDK开发中心。 1 2 3 4 # 安装华为云Go库 go get github.com/huaweicloud/huaweicloud-sdk-go-v3 # 安装依赖 go get github.com/json-iterator/go
  • 安装SDK 视频直播服务端SDK支持python3及以上版本。执行“ python --version” 检查当前python的版本信息。 使用服务端SDK前,您需要安装“huaweicloudsdkcore ”和 “huaweicloudsdklive”,具体的SDK版本号请参见SDK开发中心。 使用pip安装 执行如下命令安装华为云Python SDK核心库以及相关服务库: 1 2 3 4 # 安装核心库 pip install huaweicloudsdkcore # 安装Live服务库 pip install huaweicloudsdklive 使用源码安装 执行如下命令安装华为云Python SDK核心库以及相关服务库: 1 2 3 4 5 6 7 # 安装核心库 cd huaweicloudsdkcore-${version} python setup.py install # 安装Live服务库 cd huaweicloudsdklive-${version} python setup.py install
共100000条