# 菊风视频能力平台 SDK 合规使用指南
# 升级最新版 SDK
请务必确保您已经将菊风视频能力平台SDK升级到满⾜监管新规的 最新版本 (opens new window) 。
# 简介
菊风视频能力平台在实际的项目中定位为音视频能力的提供方,除此之外还包装了一些和音视频通讯强相关的业务。以银行项目为例可分为视频客服业务、视频房间业务、视频双录业务、AI 双录业务、一对一通话及消息业务等。上述业务需要客户渠道类系统或者客户业务类系统集成我们菊风视频能力平台 SDK才能形成完整的业务,在整个完整的业务中我们提供基础的音视频通讯能力和一些对应业务上所需的特色能力。如视频客服业务的智能排队服务,视频房间业务的增强会控服务等。 菊风视频能力平台提供标准菊风视频能力 SDK 用于给客户渠道类系统和客户业务类系统集成并通过菊风视频能力 SDK 接入到视频能力平台进行音视频通讯。 菊风为开发者提供 SDK 功能开发包,涵盖了音视频引擎终端、服务器和业务模块,支持实现智能排队、全景录像、多人音视频等业务功能。
# 版本更新
为满足互联网安全及监管新规,我们强烈建议所有 SDK 使用者接入或升级至最新的SDK 版本。最新版本的 SDK 已经完全符合国家监管及互联网安全要求,可以帮助您更好地保护用户的隐私和数据安全。
# SDK扩展业务功能的配置说明
接入说明:菊风视频能力平台SDK包括基本业务功能和扩展业务功能
基本业务功能:音视频通话
扩展业务功能:透明消息通道、本地录制、服务端录制
| 功能区分 | 业务功能 | 功能介绍 | 相关个人信息及处理目的 | 配置方式 |
|---|---|---|---|---|
| 基本功能 | 音视频通话 | 提供音实时视频通话能力 | 必要信息: 网络信息(如网络类型、网络连接状态、IP地址),用于判断SDK与服务器的网络连接状态,实现⽹络恢复后 sdk 和服务器的重新连接,保证服务的稳定性和连续性; 设备信息(如设备型号、操作系统版本),用于定位和解决用户在使用过程中遇到的兼容性问题; 可选信息: 屏幕信息(如屏幕分辨率、屏幕方向),用于优化视频通话的显示效果,以及用于屏幕录制业务分辨率参数优化设置,提升用户体验; 日志信息:当您使用本应用时,我们会自动收集您对我们服务的详细使用情况,作为有关网络日志保存,包括访问日期和时间、应用功能的使用情况、应用崩溃日志(如需排查问题),我们会业务结束后上传相关日志。 视频信息(摄像头):用于音视频通话 音频信息(麦克风):用于音视频通话 设备方向信息(监听设备旋转):用于优化视频通话过程中,预览视频画面的显示效果,提升用户体验; | 基本业务,可选个人信息配置详见“SDK可选个⼈信息的配置说明” |
| 扩展功能 | 透明通道消息 | 提供实时消息传输能力 | 无 | 使用透明消息通道示例: call是JRTCCall对象 call.sendMessage(contentType: string, content: string, toUserId: string | undefined): number; 参数说明: contentType - 消息内容类型,用于标识消息的类型 content - 消息内容,不能超过4K大小 toUserId - 指定接收消息的用户ID - 指定用户ID:消息只发送给该用户 - `undefined`:消息发送给通话中所有成员 返回操作ID或错误码 - 操作ID > 0:接口调用成功,此ID将 JRTCCallCallback.onMessageSendResult 回调中返回 - -1:接口调用异常,不会收到回调 消息发送结果通过JRTCCallCallback 回调对象返回示例: onMessageSendResult?: (operatorId: number, result: boolean, error: JRTCError) => void; 参数说明: operatorId - 操作ID,对应 JRTCCall.sendMessage 的返回值 result - 发送结果是否成功 - `true`: 发送成功 - `false`: 发送失败 error - 发送失败错误信息,当 result 为 false 时有效 收到消息通过JRTCCallCallback 回调对象返回示例: onMessageReceived?: (content: string | undefined, contentType: string | undefined, messageType: JRTCCallCenterMessageType, fromUserId: string) => void; 参数说明: content - 消息内容 contentType - 消息内容类型 messageType - 消息归属类型 fromUserId - 发送方的用户ID |
| 本地录制 | 提供音视频过程中本地录制 | 无 | 开启/关闭本地录制示例: call是JRTCCall对象 call.enableLocalRecord(enable: boolean, recordParam: JRTCRecordLocalParam | undefined): boolean; 参数说明: enable - 是否开启本地录制 - `true`: 开启本地录制功能 - `false`: 关闭本地录制功能 recordParam 本地录制参数配置 - 开启录制时(`enable=true`):{@link JRTCRecordLocalParam.filePath filePath} 必须设置,其余参数不设置则使用默认配置 - 关闭录制时(`enable=false`):可传入 `undefined` 返回操作结果 - `true`: 接口调用成功 - `false`: 接口调用失败 | |
| 服务端录制 | 提供音视频过程中服务端录制 | 无 | 开启/关闭服务端录制示例: call是JRTCCall对象 let callJoinParam:JRTCCallJoinParam = new JRTCCallJoinParam(); callJoinParam.enableRemoteRecord = true; 参数说明: enableRemoteRecord是否需要远程录制,默认值为 `false`,表示不需要远程录制。 设置为 `true` 时: - 仅通知服务端这个通话需要服务端录制 - 并不会真正开启远程录制 - 加入通话后,需要通过 enableRemoteRecord 接口去开启远程录制 call.join("", callJoinParam);//加入通话 call.enableRemoteRecord(enable: boolean, recordParam: JRTCRecordRemoteParam | undefined): boolean; 参数说明: enable - 是否开启远程视频录制 - `true`: 开启远程视频录制 - `false`: 关闭远程视频录制 recordParam 远程录制参数配置 - 开启录制时(`enable=true`):可传入特定参数或 `undefined` 使用默认配置 - 关闭录制时(`enable=false`):可传入 `undefined` 返回操作结果 - `true`: 接口调用成功 - `false`: 接口调用失败 |
# SDK 可选个人信息的配置说明
接入说明:对于菊风视频能力平台 SDK 可选收集的个⼈信息的控制,开发者可以通过 SDK 可选个⼈信息的配置示例说明进⾏配置。如您关闭可选信息的采集,将会严重影响您使⽤菊风视频能力SDK部分功能的实现和效果,但不会影响音视频通话基本功能的实现,请开发者结合业务实际需要进⾏合理配置。
# SDK 可选个人信息的配置示例
| 个人信息配置说明 | ||
|---|---|---|
| 个人信息类型 | 个人信息采集目的 | 配置说明 |
| 日志信息 | 用于使用我们业务能力过程中出现异常时排查问题 | 日志收集示例: let initParam = new JRTCClientInitParam(); initParam.logConsole = true; initParam.logLocalFile = true; initParam.logLocalFile = true; 参数说明: logConsole:是否控制台日志输出,true:输出,false:不输出 logLocalFile:是否本地文件日志记录,true:本地日志记录,false:本地日志不记录 let client:JRTCClient.create(applicationContext: common.ApplicationContext, callback: JRTCClientCallback,initParam?: JRTCClientInitParam) 参数说明: applicationContext:应用上下文对象callback:JRTCClient模块回调对象 initParam:初始化参数 设置日志级别示例: JRTCLog.setLogLevel(level: JRTCLogLevel); 参数说明:level 日志级别 /** * 日志级别枚举 * * @remarks * 定义不同的日志重要程度级别 */ export enum JRTCLogLevel { /** * 关闭日志 */ DISABLE = 0x00000000, /** * 致命错误日志 */ FATAL = DISABLE + 0x00000001, /** * 错误日志 */ ERROR = FATAL + 0x00000001, /** * 警告日志 */ WARN = ERROR + 0x00000001, /** * 信息日志 */ INFO = WARN + 0x00000001, /** * 调试日志 */ DEBUG = INFO + 0x00000001, /** * 跟踪日志 */ TRACE = DEBUG + 0x00000001, } |
| 视频信息 | 用于音视频通话中 | 打开视频示例: mediaDevice是 JRTCMediaDevice对象 //打开摄像头 mediaDevice.startCamera(): Promise<boolean>; //关闭摄像头 mediaDevice.stopCamera(): Promise<boolean>; 渲染摄像头画面示例: JRTCVideoComponent({ isFullScreen: true, streamId: mediaDevice.getCurrentCamera().cameraId, mediaDevice: mediaDevice, autoAdapterDisplayOrientation: true, windowOrientation: window.Orientation.PORTRAIT }) |
| 音频信息 | 用于音视频通话中 | 加入通话默认打开/关闭麦克风示例: call 是 JRTCCall 对象 mediaDevice是 JRTCMediaDevice对象 let callJoinParam:JRTCCallJoinParam = new JRTCCallJoinParam(); callJoinParam.openAudioInput = true; call.join("", callJoinParam); 参数说明:openAudioInput 是否主动打开麦克风音频输入,true 打开,false不打开,默认true 打开/关闭麦克风示例: //打开麦克风 mediaDevice.startAudioInput(): boolean; //关闭麦克风 mediaDevice.stopAudioInput(): boolean; |
| 设备方向信息 | 用于优化视频通话过程中,预览视频画面的显示效果,提升用户体验; | 是否使用设备方向监听示例: let initParam:JRTCMediaDeviceInitParam = new JRTCMediaDeviceInitParam (); initParam.useDeviceOrientation = true; let mediaDevice = JRTCMediaDevice.create(this.mClient, this, initParam); 参数说明:useDeviceOrientation 是否使用设备方向监听,true 使用,false不使用,默认true |
| 屏幕信息 | 用于优化视频通话的显示效果,以及用于屏幕录制业务分辨率参数优化设置,提升用户体验; | 开启/关闭屏幕采集功能示例: mediaDevice是 JRTCMediaDevice对象 mediaDevice.enableScreenCapture(enable: boolean, enableAudio?: boolean): boolean; 参数说明: enable - 是否开启 - `true`: 开启屏幕采集 - `false`: 关闭屏幕采集 enableAudio - 系统音频采集 - `true`: 同时采集系统音频 - `false`: 仅采集屏幕画面,不采集系统音频 返回 操作结果 - `true`: 接口调用成功 - `false`: 接口调用失败 开启/关闭屏幕共享功能示例: call 是 JRTCCall 对象 call.enableScreenShare(enable: boolean, sendScreenParam?: JRTCSendScreenParam, enableAudio?: boolean):boolean; 参数说明: enable - 是否开启屏幕共享 - `true`: 开启屏幕共享,其他成员可以看到您的屏幕内容 - `false`: 关闭屏幕共享,停止向其他成员分享屏幕 sendScreenParam - 屏幕共享参数设置,可控制共享质量和行为 enableAudio - 是否同时共享系统音频 - `true`: 同时共享系统音频 - `false`: 仅共享屏幕画面,不共享音频 返回 操作结果 - `true`: 接口调用成功 - `false`: 接口调用失败 视频渲染根据屏幕方向自动适配示例: JRTCVideoComponent({ autoAdapterDisplayOrientation: true }) 参数说明: autoAdapterDisplayOrientation 是否自动根据屏幕方向适配视频渲染画面布局,true 自动适配,false 不根据屏幕方向适配,默认true |
# 隐私政策更新
SDK 使用者应在《隐私政策》中明确说明本 SDK 收集使用个人信息的目的、方式和范围。为方便使用者,我们提供以下告知文案示例供参考:“我们使用菊风视频能力SDK 来提供 XX 服务。需要收集您的 XX 信息。我们会确保这些信息的安全,且不会用于其他目的。”
# SDK 申请系统权限的说明
接入说明:对于菊风视频能力 SDK 可选申请的系统权限,您可以参考相关如下表格的内容,详细了解相关权限与各业务功能的关系及其申请时机,因相关权限的不申请将会对其对应的功能造成影响,您可以结合业务实际需要进⾏合理配置。
| 权限 | 是否可选 | 使用目的 | 申请时机 |
|---|---|---|---|
| INTERNET | 必选 | ⽹络权限。⽤于实现和服务器通信,提供音视频通话能力。 | 启用业务功能读取 |
| GET_NETWORK_INFO | 必选 | 查看网络连接状态以及监听系统网络变化,⽤于实现⽹络恢复后sdk 和服务器的重新连接。 | 启用业务功能读取 |
| CAMERA | 可选 | 摄像头权限,用于音视频通话 | 启用业务功能读取 |
| MICROPHONE | 可选 | 麦克风权限,用于音视频通话 | 启用业务功能读取 |
| MODIFY_AUDIO_SETTINGS | 可选 | 修改应用音频设置,控制音频音量大小需要 | 启用业务功能读取 |
| USE_BLUETOOTH | 可选 | 蓝牙权限,用于蓝牙设备通话 | 启用业务功能读取 |
# 必选权限
以下为必选权限,必须配置以下权限才能满足基本的音视频通话能力:
"requestPermissions": [
{
//网络权限
"name": "ohos.permission.INTERNET"
},
{
//获取网络状态权限
"name": "ohos.permission.GET_NETWORK_INFO"
}
]
# 可选权限
以下为可选权限,如您需要蓝牙设备通话:
"requestPermissions": [
{
//蓝牙权限
"name": "ohos.permission.USE_BLUETOOTH"
},
{
//麦克风权限
"name": "ohos.permission.MICROPHONE"
},
{
//音频设置权限
"name": "ohos.permission.MODIFY_AUDIO_SETTINGS"
},
{
//摄像头权限
"name": "ohos.permission.CAMERA"
}
]
# SDK隐私政策披露要求与示例
接入说明:开发者在 App 集成菊风视频能力平台SDK后,菊风视频能力平台 SDK 的正常运⾏会收集必要的最终⽤户信息⽤于音视频通话业务。请开发者根据集成菊风视频能力平台 SDK的实际情况,在您 App 的隐私政策中,对菊风视频能力平台 SDK 名称、公司名称、处理个⼈信息种类及⽬的、采集⽅式、隐私政策链接等内容进⾏披露。建议:确认您所接⼊的菊风视频能力平台 SDK 版本和功能模块,从隐私政策、合规指引中确定与菊风视频能力平台 SDK交互的数据内容;在您 App 的隐私政策中,以⽂字或列表的⽅式向公众披露菊风视频能力平台 SDK 的相关信息。
披露示例(仅供参考,请以实际合作情况为准):
SDK名称: 菊风视频能力平台 SDK
第三方主体: 宁波菊风系统软件有限公司
合作目的: 为 APP 用户提供音视频通话能力
处理个人信息类型及用途: 设备信息(如设备型号、操作系统版本)、网络信息(如网络类型、网络连接状态、IP地址)、日志信息,用于音视频通话基本功能场景中保证服务在不同设备上兼容性,以确保能准确进行音视频通讯和透明通道消息通信。屏幕信息(如屏幕分辨率、屏幕方向)、视频信息(摄像头)、音频信息(麦克风)、设备方向信息(监听设备旋转)用于音视频通话过程中互相通信中的媒体数据交互,以及优化视频通话过程中,预览视频画面的显示效果,提升用户体验;
数据处理方式: 通过去标识化、加密传输及其他安全方式
隐私政策链接: 菊风视频能力平台隐私政策 (opens new window)
官网链接: 菊风官网 (opens new window)
# 向最终用户披露条款的示例
为保障最终用户的知情权,SDK 使用者需向用户清晰披露 SDK 相关信息,以下为具体示例,可根据实际业务场景调整使用:
文字披露示例 “您好!为向您提供音视频通话相关服务(如远程业务办理中的音视频交互、过程记录等),我们的应用会集成【菊风视频能力平台 SDK】,该 SDK 由宁波菊风系统软件有限公司提供。
SDK 所需处理的个人信息类型:
• 基础设备与应用信息:应用基本信息(如应用名称、版本号)、系统基本信息(如设备型号、操作系统版本)、系统设置信息
• 网络信息:设备联网状态、网络类型等
• 音视频信息:在使用音视频通话时,会通过摄像头获取视频画面信息,通过麦克风获取音频信息(仅用于完成当前服务,服务结束后按规则存储或销毁)信息处理目的:上述信息仅用于保障 SDK 正常运行,实现音视频编码传输、网络连接稳定性维护等功能,不会用于与当前服务无关的其他用途。 如您对上述信息有疑问,可通过宁波菊风系统软件有限公司官方渠道联系咨询:官方网站 https://www.juphoon.com (opens new window)、电子邮件 sales@juphoon.com、商务合作热线 0574- 87901227。”
# 最终用户授权同意说明以及示例
接入说明:App ⾸次运⾏时应当有隐私弹窗,隐私弹窗中应公示简版隐私政策内容并附完整版隐私政策链接,并明确提示最终⽤户阅读并选择是否同意隐私政策;隐私弹窗应提供同意按钮和拒绝同意的按钮,并由最终⽤户主动选择。如涉及敏感个⼈信息,应当取得您最终⽤户的单独授权同意,您可以通过单独弹窗的形式来实现最终⽤户的授权,并在您的《隐私政策》中针对敏感个⼈信息通过字体加粗或其他显著标识显示。
隐私政策授权弹窗示例:
敏感个人信息授权弹窗示例:
敏感个人信息隐私政策披露示例:“摄像头相关信息:用于实时视频通话功能”
# 最终用户行使权利说明
接入说明:开发者在其 APP 中集成菊风视频能力平台 SDK 后,菊风视频能力平台 SDK 的正常运⾏会收集必要的最终⽤户信息⽤于实时音视频通话或扩展功能⽬的。开发者应根据相关法律法规为最终⽤户提供⾏使个⼈信息主体权利的路径或功能,需菊风视频能力 SDK 配合的,请与菊风公司及时进⾏联系,我们将与开发者协同妥善解决最终⽤户的诉求。
# 未成年人保护
我们的服务主要面向成人。如果最终用户是未满 14 周岁的未成年人,请务必在使用已集成菊风视频能力 SDK 的开发者应用前,在父母或其他监护人监护、指导下共同仔细阅读开发者应用隐私政策,并在征得监护人同意的前提下使用开发者应用或提供个人 信息。
# SDK 初始化
在获得用户同意后,SDK 使用者应初始化 SDK,参考以下指引步骤:
- 请求用户同意使用 SDK 所依赖的权限申请。
- 用户同意后,调用 SDK 的初始化函数。
- 检查 SDK 是否成功初始化。
示例代码:
class JRTCManager implements JRTCClientCallback, JRTCCallCallback, JRTCMediaDeviceCallback {
private client: JRTCClient;
private mediaDevice: JRTCMediaDevice;
private call: JRTCCall;
public init(context: Context) {
let initParam: JRTCClientInitParam = new JRTCClientInitParam();
initParam.appName = "appName" // 设置应用名称
initParam.SDKInfoDir = "SDKInfoDir" // 设置SDK信息存储目录
initParam.appKey = "appKey" // 设置AppKey
initParam.server = "server" //设置接入服务器地址
initParam.logConsole = true // 设置是否控制台日志输出,默认true
initParam.logLocalFile = true // 获取是否是否本地文件日志输出,默认true
initParam.looseTimeoutControl = true // 设置是否开启 RPC 抗信令丢包控制(70%的上下行信令丢包),默认false
this.client = JRTCClient.create(context.getApplicationContext(), this, initParam);
this.mediaDevice = JRTCMediaDevice.create(this.client, this, undefined);
this.call = JRTCCall.create(this.client, this.mediaDevice, this);
// 设置基本参数
this.client.setServer("server"); // 设置接入服务器地址
this.client.setAppKey("appKey"); // 设置AppKey
this.client.setDisplayName("displayName"); // 设置显示名称
this.client.setAppName("appName"); // 设置应用名称
}
}
# 其他说明
以上是 SDK 的合规使用指南,如果您在使用过程中有任何疑问,欢迎随时与我们联系。
我们将竭诚为您服务。
您可以通过如下方式与我们取得联系:
- 官方网站:https://www.juphoon.com (opens new window)
- 电子邮件:sales@juphoon.com
- 商务合作热线:0574-87901227
