云服务器内容精选

  • 修订记录 表1 修订记录 日期 版本 修订内容 2024-8-23 100.7.8 问题修复,体验更稳定 具体使用请见100.7.8更新内容 2024-8-16 100.7.6 问题修复,体验更稳定 具体使用请见100.7.6更新内容 2024-8-2 100.7.5 支持主持人设置入会后自动静音控制 新增通知OnMeetingInfoChanged会议信息更新,替代废弃通知onConfDetailNotify 新增虚拟背景模型文件夹,放到到assets目录下 具体使用请见100.7.5更新内容 2024-6-13 100.5.5 1.支持悬浮窗变化通知 2.获取会议详情接口增加时区字段 3.虚拟背景集成方式修改 具体使用请见100.5.5更新内容 2024-4-23 100.3.6 1.同步初始化接口,去除必须放在Application的onCreate()方法中限制 2.libs中8个aar合并为HWMSdk-release.aar 3.新增Android菜单功能说明 具体使用请见100.3.6更新内容 2024-2-17 90.12.7 问题修复,体验更稳定。 2024-1-5 90.12.5 废弃接口getVmrList,新增接口getVmrInfoList 新增共享vmr信息通知OnShareVmrInfoNotify 新增参数会议资源类型confResType,涉及创会信息CreateConfInfo、预约会议参数BookConfParam 新增立即会议记录通知OnP2PConfRecordNotify 新增获取错误提示接口GetErrorMessage,文案可用于提示 新增设置(会控)保底ip地址接口SetGuaranteedIpAddresses,支持下沉企业数据不上云或断网逃生 问题修复,体验更稳定。 具体使用请见90.12.5更新内容 2023-12-13 90.10.8 1.问题修复,体验更稳定。 2023-11-15 90.9.8 1.问题修复,体验更稳定 2023-10-27 90.9.7 1.问题修复,体验更稳定 2023-10-20 90.9.6 1.问题修复,体验更稳定 2023-10-7 90.9.5 新增会议最大与会人数限制concurrentParticipants,涉及创建会议参数CreateConfParam、预约会议参数BookConfParam、编辑会议参数EditConfParam、会议详情信息ConfDetailModel 问题修复,体验更稳定 具体使用请见90.9.5更新内容 2023-08-11 90.7.5 新增发起立即会议接口startP2PConf Random入会接口参数RandomJoinConfParam新增domain字段 新增扫码邀请大屏入会接口joinPairConf 创建会议接口createConf参数CreateConfParam新增isSpeakerOff字段 问题修复,体验更稳定 具体使用请见90.7.5更新内容 2023-6-2 90.6.5 1.会中设置项新增抢占共享权限按钮 2.新增是否支持同终端多应用登录参数isSupportMultiAppLogin 3.新增弱网信息上报接口onPoorNetworkQualityInfoNotify() 4.预约、编辑、创建、会议详情增加customInfo字段 5.新增错误码412100044服务器降级,接入方收到该错误码可以继续调用入会接口离线入会 6.startCall 接口废弃 7.问题修复,体验更稳定 具体使用请见90.6.5更新内容 2023-5-12 80.15.21 1.问题修复,体验更稳定 具体使用请见80.15.21更新内容 2023-3-24 80.15.5 1.问题修复,体验更稳定 具体使用请见80.15.5更新内容 2023-2-24 80.13.6 1. 问题修复,体验更稳定 具体使用请见80.13.6更新内容 2023-2-7 80.13.5 1. 上传头像接口限制上传文件的格式和大小,具体请见 上传个人头像 2. 新增设置语言接口,具体请见 设置语言 3. 问题修复,体验更稳定 具体使用请见80.13.5更新内容 2023-1-9 80.12.6 开启功能接口enableFeature 新增是否显示录制安全提示窗枚举值HWM_FEATURE_TYPE_CONFIRM_RECORD。具体请见枚举HWMEnableFeatureType说明 问题修复,体验更稳定。 具体使用请见80.12.6更新内容 2022-12-26 80.12.5 1. 修复多个问题 2022-11-22 80.10.6 1. 新增异步初始化接口,具体请见 异步初始化 具体使用请见80.10.6更新内容 2022-11-15 80.10.5 1. 预约周期会议接口废弃cycleCount字段,具体请见 预约周期会议 2. 获取云会议室列表和修改云会议室信息接口新增参数,具体请见 获取云会议室列表、修改云会议室信息 3. 新增设置共享权限接口setShareScreenPermission, 具体请见设置共享权限 具体使用请见80.10.5更新内容 2022-10-10 80.9.5 1. 编辑会议和会议详情新增字段isLiveOn是否开启直播。 2. 问题修复 具体使用请见80.9.5更新内容 2022-9-2 80.8.5 创建会议、预约会议、编辑会议支持设置来宾密码。 问题修复 具体使用请见80.8.5更新内容 2022-7-30 80.7.5 1. 问题修复 具体使用请见80.7.5更新内容 2022-6-15 80.5.11 1. 新增禁用提示音接口 2. 问题修复 具体使用请见80.5.11更新内容 2022-5-18 80.5.5 1. 预约会议、编辑会议、获取会议详情接口增加等候室开关功能,新增isOpenWaitingRoom字段 2. 问题修复 具体使用请见80.5.5更新内容 2022-4-15 70.16.5 新增周期会议相关接口 入会参数PasswordJoinConfParam 新增 isStopConflictConf字段,能够强制结束和当前VMR会议资源冲突的会议 会议通知栏支持在来电时可配置是否显示通知 sso 登录接口调整 错误码整改,发布新版本错误码描述以及新旧版本错误码对应关系。 具体使用请见70.16.5更新内容 2022-2-19 70.14.5 1. 预约、编辑会议支持设置“来宾在主持人之前加入会议”,并可设置提前入会时间,具体参数请见 预约会议参数说明 。 2. 预约云会议室时支持选择预约固定云会议室ID或随机云会议室ID,具体请见 VmrIdType枚举说明。 3.APPID登录支持指定部门ID,具体请见 AppIdAuthParam参数说明。 4. 问题修复 具体使用请见70.14.5更新内容 2022-1-19 70.13.5 1. 登录、登出接口新增uuid、account、thirdAccount字段,具体请见LoginResult类型说明、LogoutResult类型说明。如果是老版本升级到70.13.5版本,需要修改回调函数的定义。 2. 第三方视频推流接口支持MMR会议,具体请见第三方视频推流。 3. 业务 消息通知 中新增onConfIncoming接口,允许在入会前获取来电信息,具体请见业务消息通知。 4. 问题修复 具体使用请见70.13.5更新内容 2021-12-23 70.12.6 修复弱网情况下导致清晰度降低后不能恢复的问题 具体使用请见70.12.6更新内容 2021-12-15 70.12.4 1. RxJava升级到3.0.13版本 2. 问题修复 具体使用请见70.12.4更新内容 2021-12-3 70.11.5 1. 新增配置日志保存天数 2. HMS Scankit升级到2.1.0.300版本 3. 问题修复 具体使用请见70.11.5 更新内容 2021-10-22 70.10.5 1. 去除无效资源 2. 问题修复 具体使用请见70.10.5 更新内容 2021-09-16 70.9.5 1.新增SSO登录方式 2.移除tinypinyin库 具体使用请见70.9.5 更新内容 2021-08-28 70.8.6 问题修复,体验更稳定 2021-08-18 70.8.5 1.从此版本开始,Android SDK切换为AndroidX依赖 2.支持获取与会者列表(含网络研讨会) 具体使用请见70.8.5 更新内容 2021-07-16 70.7.5 1.支持会中设置本会场视频画面是否镜像 2.支持安卓11的API 30版本 3.okhttp升级到4.9.1 具体使用请见70.7.5 更新内容 2021-06-10 70.6.5 1.删除了ZXing的依赖 2.tinypinyin 升级到3.0.0 3.aspectjrt升级到1.9.6 4.gson升级到2.8.6 具体使用请见70.6.5 更新内容 2021-05-17 70.5.8 1.会中与会者和聊天模块适配横屏体验 2.支持聊天弹幕 具体使用请见70.5.8 更新内容 2021-04-15 70.4.5 1.预约会议接口添加返回值参数说明 2.sdk初始化约束,限制初始化必须在Application的OnCreate主线程中执行 3.新增获取用户当前状态接口 4.会中新增主持人邀请他人共享,主持人也可快速取消共享 5.移动端的前后摄像头切换按钮放到主界面上 6.会议日志大小优化 7.libs文件夹中aar文件整合,使用时需先清空之前历史版本文件,重新导入 具体使用请见70.4.5 更新内容 2021-03-12 70.3.5 1.移除会中自定义分享链接,自定义分享链接功能可以通过自定义会中分享面板实现 2.去掉短信权限的要求 3.错误码变更 4.观看共享时叠加发言人视频窗口,并支持下拉关闭 5.支持手机、平板同时登录 具体使用请见70.3.5 更新内容 2021-02-10 60.15.6 1.新增自定义来电自动处理接口 2.新增自定义设置来电响铃和震动 3.sdk 资源包aar依赖变更 4.自定义隐藏外部标签, 具体使用请见60.15.6 更新内容 2021-01-08 60.13.2 添加与会者 离开会议 结束会议 错误码更新 具体使用请见60.13.2 更新内容 2020-12-07 60.12.5 创建会议支持指定会议室(vmrId)和入会范围(joinConfRestrictionType) 错误码更新 新增头像上传接口 新增头像拦截接口,可以使用自己的头像显示 自定义菜单样例更新 具体参见60.12.5更新内容 2020-11-07 60.11.1 1、新增支持会议自动录制 2、新增自定义会议来电接听按钮显示 3、新增呼叫设置昵称 具体参见60.11.1更新内容 2020-10-15 60.10.5 1、 新增是否开启第三方数据采集配置: 2、 新增自定义接入站点: 3、 自定义会中分享面板参数变更: 4、 加入会议接口参数变更: 具体参见60.10.5更新内容 2020-09-04 60.8.1 1、初始化增加App ID,可以传入企业App ID 2、新增App ID登录、预约会议、编辑会议、会议列表、会议详情、取消会议等接口 3、新增自定义是否开启高清优先、自定义会议接听摄像头麦克风开关等配置接口。 4、创建会议参数新增是否开启录制。 5、问题修复,体验更稳定 具体参见60.8.1更新内容 2020-07-30 60.7.1 1、会议中UI界面优化,菜单目录结构和接口发生变更,逻辑更清晰 2、支持会议中成员文字聊天,支持自定义配置是否显示 3、会控菜单自定义接口优化,部分接口替换,使用更灵活 具体参见60.7.1更新内容 2020-06-29 60.6.4 新增如下接口 新增回调会中是否是主持人 新增接口当前是否是主持人 修改如下接口 部分接口修改 参照自定义底部菜单栏 2020-05-08 60.5.3 更新部分使用文档: 删除“创建会议(携带与会人信息)”接口,和“创建会议”接口合并 优化接口名称和结构 2019-11-12 6.1.223 修复部分已知问题 2019-08-31 6.1.203 新增如下接口 退出登录功能 修改如下接口 登录登录:接口参数发生变更,登录地址与端口不再需要传入 加入会议:加入会议接口与匿名入会接口合并,删除匿名入会接口,加入会议接口参数发生变更 2019-07-23 6.1.195 新增如下接口: 匿名入会:支持用户匿名入会(未登录场景下的入会)。 支持会议中返回到悬浮窗状态。 2019-04-13 6.1.27 新增如下接口: 创建会议(携带与会人信息):支持在创建即时会议的时候携带与会者,与会者会收到呼叫入会的来电。 新增如下能力: 来电接听:支持应用在前台收到其他人的来电接听后加入会议。 应用集成,详见基于应用的集成。 2019-03-29 6.1.23 首次发布。 父主题: Android SDK
  • SDK隐私声明 HUAWEI CLOUD Meeting SDK (以下简称“华为云会议SDK”)是由 华为云计算 技术有限公司(以下简称“我们”或“华为云”)面向应用开发者(以下简称“开发者”)提供的会议能力与服务。 开发者根据华为云会议SDK的开发文档和指南在其应用中集成了华为云会议SDK后,我们将通过被集成的华为云会议SDK向开发者的最终用户(以下简称“您”或“用户”)提供相关服务,处理开发者应用相关的数据,相关数据中可能包含您的个人信息。华为云非常重视您的个人信息和隐私保护,我们将会按照法律要求和业界成熟的安全标准,为您的个人信息提供相应的安全保护措施。我们将通过本声明向您说明我们如何收集、使用、披露、保护、存储及传输您的个人信息。 请注意:我们要求集成华为云会议SDK的所有开发者严格遵循法律法规、开发文档和指南的要求处理您的个人信息;在接入、使用各开放能力前,我们要求开发者在其产品应用的隐私政策中向您告知其集成华为云会议SDK处理个人信息的基本情况,并获取您的同意或取得其他合法性基础。但我们无法控制开发者及其开发者应用如何处理开发者所控制的个人信息,也不对其行为负责。我们建议您认真阅读开发者应用相关用户协议及隐私政策,在确认充分了解并同意开发者如何处理您的个人信息后再使用开发者应用。 1.我们如何收集和使用您的个人信息 华为云仅会根据本声明以下所述目的和方式收集和使用您的个人信息,如果我们要将收集的您的个人信息用于本声明未载明的其他目的,我们会以合理的方式自行或通过开发者明确向您告知,并再次获取您的同意或取得其他合法性基础。如果SDK存在扩展功能或收集和使用了可选个人信息,我们会在下文特别说明。 1.1 会议服务连接功能 当您使用会议服务时,我们会收集您的IP地址,我们使用此数据是为了让您连接我们的服务器,如您拒绝提供,则将无法使用我们的服务。为了帮助您了解和诊断您与本服务的连接状态,我们会收集您的无线网络、互联网连接状态,以及您是否获得连接本服务及其网络的授权。 1.2 创建/发起会议功能,包含网络研讨会 创建/发起会议时,我们会收集您的会议主题、会议时间、会议时长、与会人名称、与会者手机号码、与会者邮箱、部门名称、主持人/来宾口令、时区、会议描述。 1.3 加入会议功能,包含网络研讨会 加入会议时,我们会收集您的鉴权信息(会议ID、会议口令或会议链接)、与会信息(与会者名称),用于审核您的身份。 1.4 音视频会议功能,含网络研讨会 在使用此功能的过程中,我们作为会议主持人的受托方收集和处理您的信息,您需要开启设备摄像头权限及麦克风权限,我们会收集并根据您的指示转发音视频流给您的共享对象。除非您启动云录制,我们不会在服务器上存储该音视频数据。在加入会前、预定会议时、与会过程中,您可以在界面选择关闭语音/视频来保护您的隐私。 当您授予电话权限(该权限仅提供读取手机设备标识等信息,无法监听获取任何通话内容)后,如果您在会中拨打或接听移动电话,我们会自动关闭会议扬声器、麦克风,避免影响您的通话效果以及您的私人通话语音传入会中;移动电话通话结束后,将恢复扬声器、麦克风状态。 当您使用美颜功能时,您需要开启设备摄像头权限,我们需要本地处理您的部分面部特征值信息,以实现面部美颜效果。我们仅会在您的本地设备中离线处理相关面部特征值信息,不会上传、存储 或与第三方共享该种信息。人脸信息属于个人敏感信息。 当您在会议中处于非外放音频或蓝牙模式下,我们会调用设备的距离传感器来判断手机是否被举到人的耳边,如果此时手机贴耳会进行熄屏操作,防止误触操作。另外如果您在音视频会议中打开摄像头,我们也会获取屏幕方向传感器,来矫正视频的方向。 在安卓操作系统下,当您扫描连接周围蓝牙设备时,我们需要使用蓝牙连接相关权限(该权限在系统中被归为附近设备权限组),以帮助在会议或通话中使用蓝牙设备进行沟通。 1.5 桌面共享功能 在使用此功能过程中,我们作为会议主持人的受托方收集和处理您的信息,我们会收集您共享给参会人的屏幕信息(含白板标注信息、程序信息);除非您启动录制 ,我们不会在服务器上或设备本地存储该数据。 1.6 录制功能 云录制:会议主持人可以选择开启或关闭录制功能,开启时在会议界面左上角有“REC”标识,同时会有提示,如果您不同意录制,可以退出会议。录制完成后,我们会收集本次录制主题、预定人、开始时间、时长、文件大小生成录制信息,该录制及其生成的文件将加密存储在我们的服务器上。 1.7 会议期间的聊天交流功能 在使用此功能过程中,我们作为会议主持人的受托方收集和处理您的信息,我们会收集您实时发送的文本信息以传输给您的消息交流对象;会议结束后我们会在服务器上删除会中聊天数据。 1.8 实时字幕功能 在使用会议服务时,您可以选择开启或关闭实时字幕功能。在您开启此功能后,我们会收集您的会议音频信息、您输入的语音内容并根据您设置的字幕语言实时转化为字幕,显示在会议界面,除非启动录制功能,我们不会在服务器上或设备本地存储音频数据和字幕数据。 1.9 虚拟背景功能 在使用会议服务时,您可以选择开启或关闭虚拟背景功能。在您开启虚拟背景时,您需要授权我们使用摄像头权限和存储权限,我们会将您添加的虚拟背景图片和本地摄像头采集的视频流进行合成处理,用于向您同会议的与会方展示。 1.10 投票功能 在使用会议服务设置非匿名投票时,我们会记录相关投票人员信息(与会名称)和投票情况。 1.11 反馈功能 问题反馈需要您提供相关的问题图片视频、文字描述及相应的联系方式(联系人手机号码、邮箱)、问题日志、设备型号。 1.12 服务优化功能 1)为保障您正常使用我们的服务、维护我们服务的正常运行,确保您使用我们产品的安全性以及改善及优化您的服务体验,提升服务稳定性。(a)我们会收集您的设备信息(AndroidID,UDID)、运行中进程信息、互联网状态信息、系统信息(如系统设置、系统属性、设备型号、操作系统、IP地址)、终端型号、运营商信息、WIFI信息(WIFI状态、WIFI参数)、音视频设备信息(蓝牙列表、蓝牙名称、扬声器状态信息、摄像头状态)、使用本服务APP应用的事件信息(网络质量数据,如宽带、丢包率、异常包数、网络接入信息;事件名称,如错误、升级)、日志信息(如上传 IP 地址、用户点击行为)、音视频质量数据(如音量大小、丢包率)、会场号码、会场URL、会议ID,其中音视频质量数据并不涉及您的通话内容。 2.设备权限调用 当您使用相应功能及服务时,我们会通过开发者应用向系统申请您设备的相应权限。您可以在设备的设置功能或“隐私设置”中查看权限状态,并可自行选择开启或关闭部分或全部权限。 开发者在集成、使用相应开放能力时,将自行决定权限的调用范围,因此开发者应对权限的调用及用途向您进行说明。您根据开发者应用的请求开启任一权限即代表授权我们可以处理相关个人信息来为您提供对应服务;一旦您关闭任一权限即代表您取消了授权,我们将不再基于对应权限继续处理相关个人信息,可能无法继续为您提供该权限所对应的服务。请注意,您关闭权限的决定不会影响此前基于您授权所进行的个人信息处理活动的效力。 权限 权限描述 使用目的 相机权限 使用摄像头 当您使用以下功能时,您可以选择开启该权限,用于拍摄图片或者视频: (a)进行视频会议或视频通话 (b)展示虚拟背景设置效果 麦克风权限 使用麦克风 当您使用会议或通话功能时,您可以选择开启该权限,用于给其他会议参与人传输您的语音 通讯录权限 访问手机通讯录 当您使用会议或通话功能时,您可以选择开启该权限,用于邀请通讯录好友入会 存储权限 提供读取手机储存空间内数据的功能 当您使用以下功能时,您可以选择开启该权限,读取、修改或删您的设备中的内容,用于读取、保存本地的图片或文件: (a)更新个人头像 (b)自定义虚拟背景 (c)反馈功能需要上传本地图片,访问设备上的照片 悬浮窗权限 悬浮窗 当您在会议中发起共享或者最小化应用时,您可以选择开启该权限,用于悬浮窗口形式实时显示会议的视频画面 联网 访问网络 当您使用会议或通话功能时,用于完成本地网络的通信服务,优化会议的网络质量 电话权限 获取通话状态 当您开启该权限后,我们读取设备通话状态,用于优化通话状态下,音视频会议的效果。该权限无法监听、获取任何通话内容 附近设备权限 连接附近蓝牙设备 当您使用会议或通话功能时,您可以选择开启该权限,用于扫描配对蓝牙耳机、助听器等蓝牙设备以帮助在会议或通话中使用蓝牙设备进行沟通 3.对未成年人的保护 您承诺在您开始使用本服务时是成年人。如您是未成年人,则需要您的父母或监护人同意您使用本服务并同意相关服务条款。 如果未成年人在未经父母或监护人同意的情况下向我们提供其个人信息,则父母或监护人可以联系我们以停止收集、使用或披露其个人信息。 如果我们发现在未事先获得可证实的父母或监护人同意的情况下收集了未成年人的个人信息,则会设法尽快删除相关数据。 如果开发者使用本服务用于教育用途,且您的最终用户可能为未成年人的,请确保您的最终用户使用本服务前已获得其父母或监护人的明确同意。 4.管理您的个人信息 华为云非常尊重您对个人信息的关注,我们将遵照相关法律法规的要求,协调、支持并保障您行使访问、复制、更正、删除等个人信息主体权利。 由于您是通过开发者应用使用会议服务,如果您希望访问、复制或更正与会议相关的个人信息,您应通过开发者应用提供的路径实现您的个人信息主体权利。 为保障您访问、复制、更正和删除个人信息的权利实现,我们在开发者已签署的华为云协议中,明确要求开发者承诺根据法律法规要求向您提供便捷的权利实现方式。如开发者未按照承诺进行提供,您可以通过本声明“如何联系我们”章节中所述联系方式与我们取得联系,我们将尽力协调、支持并保障您的上述权利实现。 当您直接向我们提出个人信息主体权利时,为了保障您的数据安全和其他合法权益,我们可能会对您的身份进行验证并要求您提供验证身份所必要的个人信息,同时我们也可能会向开发者提供收集的身份验证信息以核实您的身份。在验证确认您的身份后,我们会根据法律法规要求及时响应您的相关请求。 如您对您的数据主体权利有进一步要求或存在任何疑问、意见或建议,可通过本声明中“如何联系我们”章节中所述方式与我们取得联系,并行使您的相关权利。 5.信息存储地点及期限 (一)存储地 中国大陆用户的个人信息存储在中国境内的数据中心。 (二)存储期限 我们将会在达成本声明所述目的所需的期限内保留您的个人信息,除非按照法律要求或您的要求需要延长留存期,例如根据《中华人民共和国网络安全法》要求,就您使用本服务留存相关的网络日志不少于六个月。基于不同的场景和服务功能,数据的存储期可能会有所不同。 我们用于确定留存期的标准包括:(i)完成该业务目的需要留存个人信息的时间,包括提供产品和服务,依据法律要求维护相应的交易及业务记录,保证系统、产品和服务的安全,应对可能的用户查询或投诉、问题定位等;(ii) 用户是否同意更长的留存期间;(iii) 法律、合同等是否有保留数据的特殊要求等。 只要您的账户是为您提供服务之必需,我们都将保留您的账户信息。您也可以选择停止本服务;在您停止本服务后,我们会停止向该账号提供产品和服务或特定功能对应的服务,并在无特殊可适用法律法规要求和服务协议之约定的情况下,完全删除您相应的个人信息。 详细存储期限请参考(除非法律有其它要求,否则按照如下留存期): 创建/发起会议,包含网络研讨会:会议主题、会议时间、会议时长、与会人名称、与会者手机号码、与会者邮箱、部门名称、主持人/来宾口令、时区、会议描述 留存期:会议结束后删除或您主动删除 加入会议:鉴权信息(会议ID、会议口令或会议链接)、与会信息(与会者名称) 留存期:不存储,会议结束后删除 会议过程中 实时音视频 和桌面共享 留存期:不存储,会议结束后删除 自动美颜:人脸信息 留存期:不存储,仅在您的会议终端侧处理 会中邀请与会者:姓名、电话号码 留存期:不存储,会议结束后删除 会议录制信息:与会人音视频、会议主题、预约人、开始时间、录制时长、录制大小、分享口令 留存期:按照企业服务协议存储。 会议中聊天:账号、文字内容 留存期:在您使用会议中聊天时我们在服务端加密存储该信息以便给您推送,会议结束后立即删除该数据。 实时字幕信息:会议语音 留存期:不存储,仅在您的会议终端侧处理。 虚拟背景图片:背景图片 留存期:仅存储在您的终端本地,由您自行决定留存期 投票:投票人员信息(与会名称)和投票情况 留存期:不存储,会议结束后删除 主动反馈:手机号码、描述文字/图片/视频、日志(IP、设备信息、软件信息)、会议ID、姓名、账号 留存期:按照企业服务协议存储,默认存储30天,30天后立即清理。 您使用会议大屏激活到云会议:大屏终端设备名称、SN、MAC、IP、BIOS-ID、部门、手机号、邮箱、备注 留存期:按照企业服务协议存储,默认在您使用服务的整个生命周期内存储。 服务日志 留存期:按照企业服务协议存储,默认3年。 6.如何联系我们 我们设立了个人信息保护专职部门。当您有任何疑问、建议、投诉、请求,请通过访问隐私问题页面https://www.huaweicloud.com/personal-data-request.html与我们联系。我们将尽快处理您提交的问题,并在15个工作日或法律法规规定的期限内答复您的问题。 如果您对我们的回复不满意,特别是认为我们的个人信息处理行为损害了您的合法权益,您还可以向有管辖权的个人信息保护机构或其他监管部门进行投诉或举报。 一般情况下,我们会尽最大努力响应和处理您的请求。结合您的请求或问题的复杂程度,我们可能会有所延迟,但我们会告知您延迟的理由。 父主题: Android SDK
  • 环境要求 OHOS SDK需要集成到APP工程中,建议您在如下推荐环境中进行集成开发。 准备DevEco,推荐使用4.0.0(10) SDK及以上。 准备Android运行环境:API 21、Android 5.0以上设备。 支持的终端CPU架构:armeabi-v7a、arm64-v8a。 手机的CPU架构可通过以下方式查询。 手机开启USB调试,连接上电脑,然后打开Windows操作系统中的cmd程序,输入如下命令: adb shell getprop ro.product.cpu.abi
  • 示例代码 如下示例仅供参考,最新代码请前往获取SDK章节获取并运行。 /* * Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved. */ package com.huaweicloud.sis.android.demo.tts; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import com.huaweicloud.sdk.core.auth.BasicCredentials; import com.huaweicloud.sdk.core.exception.ConnectionException; import com.huaweicloud.sdk.core.exception.RequestTimeoutException; import com.huaweicloud.sdk.core.exception.ServiceResponseException; import com.huaweicloud.sdk.core.http.HttpConfig; import com.huaweicloud.sdk.core.utils.StringUtils; import com.huaweicloud.sdk.sis.v1.SisClient; import com.huaweicloud.sdk.sis.v1.model.PostCustom TTS Req; import com.huaweicloud.sdk.sis.v1.model.RunTtsRequest; import com.huaweicloud.sdk.sis.v1.model.RunTtsResponse; import com.huaweicloud.sdk.sis.v1.model.TtsConfig; import com.huaweicloud.sdk.sis.v1.region.SisRegion; import com.huaweicloud.sis.android.demo.R; import com.huaweicloud.sis.android.demo.service.MediaPlayerService; import com.huaweicloud.sis.android.demo.Config; /** * 功能描述 * 语音合成 http * * @since 2022-07-18 */ public class SttsActivity extends AppCompatActivity { private EditText text; private TextView outResult; private Button startSoundRecording; private Button startPlay; private Handler handler; // 保存合成的base64字符串 private String base64Data; // 合成音频路径 private String createFilePath; // 客户端请求 private SisClient client; private MediaPlayerService mediaPlayerService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.stts); } @Override protected void onStart() { super.onStart(); initView(); initResoureces(); } @Override protected void onDestroy() { mediaPlayerService.stopMyPlayer(createFilePath); super.onDestroy(); } // 初始化界面 private void initView() { text = findViewById(R.id.input_text); outResult = findViewById(R.id.out_result); startSoundRecording = findViewById(R.id.start); startPlay = findViewById(R.id.startplay); startSoundRecording.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Runnable runnable = new Runnable() { @Override public void run() { String sttsRequestText = getSttsResponse(); Message message = new Message(); Bundle mBundle = new Bundle(); mBundle.putString("result", sttsRequestText); message.setData(mBundle); handler.sendMessage(message); } }; new Thread(runnable).start(); } }); startPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!StringUtils.isEmpty(base64Data)) { createFilePath = mediaPlayerService.createAudioFile(getBaseContext(), "wav", base64Data); mediaPlayerService.startPlay(createFilePath); } } }); } /** * 初始化资源 * * @return */ private void initResoureces() { BasicCredentials auth = new BasicCredentials() .withAk(this.getString(R.string.HUAWEICLOUD_SDK_AK)) .withSk(this.getString(R.string.HUAWEICLOUD_SDK_SK)) .withProjectId(Config.PROJECT_ID); HttpConfig config = HttpConfig.getDefaultHttpConfig(); config.withIgnoreSSLVerification(true); client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(auth) .withRegion(SisRegion.valueOf(Config.REGION)) .build(); handler = new Handler(getMainLooper()) { @Override public void handleMessage(@NonNull Message message) { super.handleMessage(message); switch (message.what) { case 0: Bundle bundle = message.getData(); String rstr = bundle.getString("result"); outResult.setText(rstr); break; default: Log.e("Unexpected value: ", String.valueOf(message.what)); } } }; mediaPlayerService = new MediaPlayerService(); } // 设置请求体 private RunTtsRequest getRunTtsRequest() { TtsConfig configbody = new TtsConfig(); configbody.setAudioFormat(TtsConfig.AudioFormatEnum.fromValue("wav")); configbody.setSampleRate(TtsConfig.SampleRateEnum.fromValue("8000")); configbody.setProperty(TtsConfig.PropertyEnum.fromValue("chinese_huaxiaomei_common")); RunTtsRequest request = new RunTtsRequest(); PostCustomTTSReq body = new PostCustomTTSReq(); body.withConfig(configbody); if (!StringUtils.isEmpty(text.getText().toString())) { body.withText(text.getText().toString()); } else { body.withText("请输入合成文本"); } request.withBody(body); return request; } // 发送请求 private String getSttsResponse() { RunTtsRequest request = getRunTtsRequest(); String ttsString = ""; try { RunTtsResponse response = client.runTts(request); if (response.getResult().getData() != null) { base64Data = response.getResult().getData(); ttsString = "合成成功"; } else { ttsString = "合成失败"; } Log.i("info", ttsString); } catch (ConnectionException | RequestTimeoutException | ServiceResponseException e) { Log.e("error", e.toString()); } catch (Exception e) { Log.e("error", e.toString()); } return ttsString; } @Override protected void onPause() { mediaPlayerService.stopMyPlayer(createFilePath); super.onPause(); } }
  • 响应参数 响应类为RunTtsResponse,详见下表。调用失败处理方法请参见错误码。 表2 RunTtsResponse 参数名 是否必选 参数类型 说明 trace_id 是 String 服务内部的令牌,可用于在日志中追溯具体流程,调用失败无此字段。 在某些错误情况下可能没有此令牌字符串。 result 是 Object 调用成功时为合成语音内容,请参考表3。 调用失败时无此字段。 表3 Result 参数名 是否必选 参数类型 说明 data 是 String 合成后生成的语音数据,以Base64编码格式返回。用户如需生成音频,需要将Base64编码解码成byte数组,再保存为wav音频。
  • 请求参数 请求类为RunTtsRequest,其中包含参数类PostCustomTTSReq,该类包含两个参数text(待合成文本)和TtsConfig,详见TtsConfig。 表1 TtsConfig 参数名称 是否必选 参数类型 描述 audio_format 否 String 待合成的音频格式,可选mp3,wav等,默认wav。具体信息请参见《API参考》中语音合成章节。 pitch 否 Integer 音高,[-500,500] ,默认是0。 speed 否 Integer 语速,[-500,500] ,默认是0。 volume 否 Integer 音量,[0,100],默认是50。 sample_rate 否 String 采样率,支持“8000”、“16000”,默认“8000”。 property 否 String 特征字符串,{language}_{speaker}_{domain},默认chinese_xiaoqi_common。具体信息请参见《API参考》中语音合成章节。 伪代码 TtsConfig configbody = new TtsConfig(); configbody.setAudioFormat(TtsConfig.AudioFormatEnum.fromValue("wav")); configbody.setSampleRate(TtsConfig.SampleRateEnum.fromValue("8000")); configbody.setProperty(TtsConfig.PropertyEnum.fromValue("chinese_huaxiaomei_common")); RunTtsRequest request = new RunTtsRequest(); PostCustomTTSReq body = new PostCustomTTSReq(); body.withConfig(configbody); if (!StringUtils.isEmpty(text.getText().toString())) { body.withText(text.getText().toString()); } else { body.withText("请输入合成文本"); } request.withBody(body); return request;
  • 初始化Client 初始化SisClient,详细信息如下。 配置客户端连接参数。 默认配置 // 使用默认配置 HttpConfig config = HttpConfig.getDefaultHttpConfig(); 网络代理(可选) // 根据需要配置网络代理,网络代理默认的协议为 `http` 协议 config.withProxyHost("proxy.huaweicloud.com") .withProxyPort(8080) .withProxyUsername("test") .withProxyPassword("test"); 超时配置(可选) // 默认连接超时时间为60秒,可根据需要调整 config.withTimeout(60); SSL配置(可选) // 根据需要配置是否跳过SSL证书验证 config.withIgnoreSSLVerification(true); 配置认证信息。 配置AK、SK、project_id信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。 使用永久AK和SK BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); 使用临时AK和SK BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withSecurityToken(securityToken) .withProjectId(projectId) 认证参数说明: ak、sk:访问密钥信息,获取方法请参考AK/SK认证。 projectId:华为云项目ID,获取方法请参考获取项目ID。。 securityToken:采用临时AK、SK 认证场景下的安全票据,可以通过token获取或者通过委托授权获取。 初始化客户端(region和指定云服务enddpoint二选一即可)。 指定region方式(强烈推荐) // 初始化客户端认证信息,使用当前客户端初始化方式可不填 projectId/domainId,以初始化 BasicCredentials 为例 BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk); // 初始化指定云服务的客户端 {Service}Client ,以初始化 Region 级服务SIS的 SisClient 为例 SisClient client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(basicCredentials) .withRegion(SisRegion.valueOf("cn-north-4")) .build(); 指定云服务endpoint方式(可选) // 指定终端节点,以SIS服务北京四的 endpoint 为例 String endpoint = "https://sis-ext.cn-north-4.myhuaweicloud.com"; // 初始化客户端认证信息,需要填写相应 projectId/domainId,以初始化 BasicCredentials 为例 BasicCredentials basicCredentials = new BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(projectId); // 初始化指定云服务的客户端 {Service}Client ,以初始化 Region 级服务SIS的 CbsClient 为例 SisClient client = SisClient.newBuilder() .withHttpConfig(config) .withCredential(basicCredentials) .withEndpoint(endpoint) .build(); endpoint是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和终端节点。
  • 使用第三方加固软件后,路由跳转错误 因为我们用到了类似ARouter的路由方案, 如果加固后出现路由跳转错误,解决方案如下: 永久解决方案:联系第三方加固软件的技术支持,把我们的路由自动生成的类所在的包给过滤掉,包路径:com.huawei.cloudlink.router.routermap。 临时解决方案:详见下图; 注:如使用此方案,每次SDK发版都需要重新设置一次。 图1 临时解决方案 父主题: Android SDK
  • SDK使用 创建引擎。 HRTIEngine hrtiEngine = HRTIEngine.create(); 初始化引擎。 sessionConfig.setContext(context); // 上下文 sessionConfig.setServerSessionId(serverSessionId); // 会话id sessionConfig.setToken(token); // 会话token,从创建会话接口获取。 sessionConfig.setAutoBindInput(true); // 自动绑定键盘和鼠标输入事件 sessionConfig.setRenderView(viewGroup); // 设置渲染视图,传入布局即可 hrtiEngine.init(sessionConfig, new SessionEventObserver()); 开始会话。 hrtiEngine.start(); 获取并使用键盘、鼠标等接口对象。 IMouse mouse = hrtiEngine.getMouse(); // 获取鼠标接口 mouse.inputMouseDown(mouseKey, pos); // 鼠标按下 mouse.inputMouseMove(pos); // 鼠标移动 mouse.inputMouseUp(mouseKey, pos); // 鼠标抬起 IKeyBoard keyBoard = hrtiEngine.getKeyBoard(); // 获取键盘接口 keyBoard.inputKeyDown(inputKey); // 键位按下 keyBoard.inputKeyUp(inputKey); // 键位抬起 销毁引擎。 hrtiEngine.destroy(); 父主题: RTI Android SDK
  • 基本使用逻辑 创建新的项目工程,导入SDK后,需要先创建引擎。 您可以在入会前进行视频编码、声音播放模式等参数的配置。 设置本地视图。 用户加入房间后,将通过回调的方式通知房间内的其他用户,收到其他用户加入的回调后,可以为其设置远端视图。 在会中,也可以进行切换摄像头等参数的配置。 用户离开房间后,需销毁对应资源。 在时序图中,单击相应接口名称可快速跳转到相应接口位置查看其使用方法。 父主题: Android SDK
  • 请求参数 请求类为RasrRequest,其中参数详见下表 表7 RasrRequest 参数名称 是否必选 参数类型 描述 command 是 String 需设置为START,表示开始识别请求;发送END,表示识别结束请求。 config 是 Object 配置信息,详见表8。 表8 Config 参数名称 是否必选 参数类型 描述 audioFormat 是 String 音频格式,支持pcm,alaw,ulaw等,如pcm8k16bit,参见《API参考》中开始识别章节。 property 是 String 属性字符串,language_sampleRate_domain, 如chinese_16k_general,参见《API参考》中开始识别章节。 addPunc 否 String 表示是否在识别结果中添加标点,取值为yes 、 no,默认no。 digitNorm 否 String 表示是否将语音中的数字识别为阿拉伯数字,取值为yes 、 no,默认为yes。 vadHead 否 Integer 头部最大静音时间,[0, 60000],默认10000ms。 vadTail 否 Integer 尾部最大静音时间,[0, 3000],默认500ms。 maxSeconds 否 Integer 音频最长持续时间, [1, 60],默认30s。 intermediateResult 否 String 是否显示中间结果,yes 或 no,默认no。例如分3次发送音频,选择no结果一次性返回,选择yes分三次返回。 vocabularyId 否 String 热词表id,若没有则不填。 needWordInfo 否 String 表示是否在识别结果中输出分词结果信息,取值为“yes”和“no”,默认为“no”。
  • 初始化Client 初始化RasrClient,其中参数包含AuthInfo,SisHttpCnfig,RasrResponseListener,RasrConnProcessListener 表1 RasrClient 参数名称 是否必选 参数类型 描述 AuthInfo 是 Object 鉴权信息类。 SisHttpCnfig 是 Object 连接时网络的配置类。 RasrResponseListener 是 Object webSocket回调过程中,业务逻辑的Listener。 RasrConnProcessListener 否 Object webSocket生命周期的Listener。 表2 AuthInfo 参数名称 是否必选 参数类型 描述 ak 是 String 用户的ak,可参考AK/SK认证。 sk 是 String 用户的sk,可参考AK/SK认证。 serviceRegion 是 String 区域,如cn-north-4,参考终端节点。 projectId 是 String 项目ID,同region一一对应,参考获取项目ID。 serviceEndPoint 否 String 终端节点,参考地区和终端节点。 表3 SisHttpConfig 参数名称 是否必选 参数类型 描述 connectionTimeout 否 Integer 连接超时,默认10000,单位ms。 readTimeout 否 Integer 读取超时,默认10000,单位ms。 websocketWaitTimeout 否 Integer webSocket返回数据时等待时间,默认20000,单位毫秒。 ProxyHostInfo 否 ProxyHostInfo 代理类。 表4 ProxyHostInfo 参数名称 是否必选 参数类型 描述 userName 否 String 代理用户名(例:test)。 passWord 否 String 代理密码(例:test)。 hostName 否 String 代理地址(例:“proxy.huaweicloud.com”)。 port 否 int 代理端口号(例:8080)。 表5 RasrResponseListener 函数 描述 void onResponseBegin(AsrResponse response); 识别开始时回调。 void onResponseEnd(AsrResponse response); 识别结束时回调。 void onResponseError(AsrResponse response); 识别过程中出现异常,调用。 void onResponseMessage(AsrResponse message); 返回识别的结果。 void onVoiceStart(); 单句模式下,响应VOICE_START事件,表示检测到语音,此时IVR可以做打断(连续模式可忽略)。 void onVoiceEnd(); 单句模式下,响应VOICE_END事件,表示一句话结束,后续的音频将被忽略,不会再进行识别(连续模式可忽略)。 void onExcceededSilence(); 单句模式下,响应EXCEEDED_SILENCE事件,表示超过vad_head没有检测到声音,通常表示用户一直没有说话。此时后续的音频将被忽略,不会再进行识别(连续模式可忽略)。 表6 RasrConnProcessListener 函数 描述 void onTranscriptionConnect() webSocket连接建立后回调。 void onTranscriptionClose(); webSocket连接关闭后回调。 void onTranscriptionFail(AsrResponse var1); webSocket长连接连接失败是回调。
  • 状态码表 开始加速、停止加速接口响应状态码如下: 表1 状态码表 状态码 描述 说明 0 Success 接口响应成功 11001 sdk parameter verification error. sdk参数校验失败 11003 Failed 接口响应失败 11004 json exception json解析异常 11005 sdk domain parse ip failed 加速 域名 解析失败 11006 the net status is good need not to acc 网络状况良好,不需要加速 11009 the net status is good need not to acc 电信省份限流 11010 get token request failed 电信token获取失败 94003 mdn null 电信token获取为空 10005 you are speeding now 正在加速中 10020 the resource has been released! 资源已经被释放 其他错误码参考接口具体的返回描述。 父主题: Android-SDK集成
  • SDK使用 图7.2.2-1 SDK流程 创建新的项目工程,导入SDK后,需要创建客户端并获取本地音视频设备信息。 创建本地流并初始化。 当用户加入房间后,将通过回调的方式通知房间内的其他用户,收到用户加入的回调后,可以对音视频流进行订阅、取消订阅等其它操作。 在会中,也可以对本地录音或播放设备等进行配置。 用户离开房间后,房间内其他用户会收到该用户离开的回调信息,离开房间后,需销毁对应资源。 在时序图中,单击相应接口名称可快速跳转到相应接口位置查看其使用方法。 创建引擎并初始化样例。 private void ensureEngineCreated() { try { mRtcEngine = new CreateVideoEngine().create(mContext, EngineType.ISDP); //创建引擎 mRtcEngine.createVideo(mContext, appId, videoEngineListener); //初始化引擎对象 } catch (Exception e) { } } 2.回调监听器样例。 private ISDPVideoEngineListener videoEngineListener = new ISDPVideoEngineListener () { @Override //远端视频流状态变化回调 public void onRemoteVideoStateChanged(String s, int i, int i1, int i2) { } @Override //远端音频流状态变化回调 public void onRemoteAudioStateChanged(String s, int i, int i1, int i2) { } @Override //加入房间成功回调 public void onJoinMainChannelSuccess(String s, String s1, int i) { } @Override //远端用户加入房间回调 public void onMainUserJoined(String s, String s1, int i) { } @Override //加入房间失败回调 public void onMainError(int i) { } @Override //远端用户离开房间回调 public void onMainUserOffline(String s, int i) { } @Override //离开房间回调 public void onMainLeaveChannel(RtcStats rtcStats) { } @Override //远端用户第一帧解码成功回调 public void onMainFirstRemoteVideoFrame(String s, int i, int i1, int i2) { } @Override //用户第一帧解码成功回调 public void onMainFirstLocalVideoFrame(int i, int i1, int i2) { } @Override //客户端角色改变回调 public void onClientRoleChanged(int i, int i1) { } @Override //音频流状态改变回调 public void onLocalAudioStateChanged(int i, int i1) { } @Override //远端视频流状态回调 public void onRemoteVideoStats(RemoteVideoStats remoteVideoStats) { } @Override //刷新入会凭证 public void renewToken() { } @Override //第一帧音频解码成功回调 public void onFirstLocalAudioFrame(int i) { } @Override //远端用户第一帧视频解码回调 public void onFirstRemoteVideoDecoded(String s, int i, int i1, int i2) { } @Override //推流发布回调 public void onStreamPublished(String s, int i) { } @Override //Token即将失效回调 public void onTokenPrivilegeWillExpire(String s) { } @Override //远端用户音频状态回调 public void onRemoteAudioStats(RemoteAudioStats remoteAudioStats) { } @Override //远端用户第一帧音频回调 public void onFirstRemoteAudioFrame(String s, int i) { } /** * 当前音频播放方式改变 * * @param mode 0-默认是扬声器 1-耳机 */ @Override public void onAudioPlayModelChanged(int mode) { } @Override //音量调整回调 public void onAudioVolumeIndication(AudioVolumeInfo[] audioVolumeInfos, int i) { } @Override //媒体服务状态回调 public void onRtcStats(RtcStats rtcStats) { } @Override //网络质量回调 public void onNetworkQuality(String s, int i, int i1) { } @Override //监控数据上报回调 public void onMonitorReady(MonitorInfo monitorInfo) { } @Override //媒体服务连接状态改变回调 public void onConnectionStateChanged(int i, int i1) { } @Override //媒体服务连接失败回调 public void onConnectionLost() { } }; 3.加入房间。 public void joinChannel(String channelId, final String token, String userId) { if (TextUtils.isEmpty(channelId)) { return; } if (mRtcEngine == null) { VideoSDKLogger.info(tag, "joinChannelWithRtcChannel rtcEngine is null:"); return; } mRtcEngine.joinChannel(channelId,token,"",userId, appId, null); } 4.创建预览视图,在 (onJoinChannelSuccess回调成功后)。 public final void preview(SurfaceView view, String channelId, String userId) { ensureEngineCreated(); if (mRtcEngine != null) { mRtcEngine.setupLocalVideo(view, VideoCanvas.RENDER_MODE_HIDDEN, userId); mRtcEngine.startPreview(channelId); } 5.离开房间。 RtcEngine.leaveChannel();finish(); 6.销毁引擎 RTCEngine.onDestroy(); 父主题: Android SDK