# 实现视频通话(访客)
本文档为您展示 实现视频通话(访客侧)的相关步骤,帮助您在远程银行和视频客服的场景下实现智能排队、屏幕共享、全景录像、访客管理的相关能力。
当您成功获取 Juphoon Guest Plugin 之后,您可以快速集成视频通话服务,同时体验本产品的基本业务流程。
# 快速搭建 Plugin
请确认您已完成以下操作:
已获取 App Key。
AppKey 作为同个环境的分域依据,同一个域的终端才能实现互通,AppKey 由 Juphoon 视频平台提供。
集成 SDK(Harmony)。
# 1. 登录
/**
* 登录,登录结果通过{@link JCCCommonCallback#onLogin(boolean, number) onLogin}回调通知
*
* @param loginParam 登录参数
* @return 接口调用结果
*/
login(applicationContext: common.ApplicationContext, loginParam: JCCLoginParam): boolean;
示例代码
let param:JCCLoginParam = new JCCLoginParam()
param.server = "server"
param.appKey = "appKey"
...
JCCGuestManager.getInstance().login(getContext() as common.ApplicationContext,param)
onLogin: (result: boolean, reasonCode: JRTCReasonCode) => {
},
登陆参数 JCCLoginParam
export class JCCLoginParam {
/**
* 设置服务器地址(必填)
* @param server 服务器地址
*/
public set server(value: string | undefined);
/**
* 设置appKey(必填)
* @param appKey appKey
*/
public set appKey(value: string | undefined);
/**
* 设置用户名(必填)
* @param userName 用户名
* @note 用户名为英文数字和'+' '-' '_' '.',长度不要超过64字符,'-' '_' '.'不能作为第一个字符
*/
public set userName(value: string | undefined);
/**
* 获取应用名
* @return 应用名
*/
public set appName(value: string | undefined);
/**
* 设置SDK信息存储目录,该目录下的log目录为日志目录(选填)
* @param sdkInfoDir SDK信息存储目录
*/
public set sdkInfoDir(value: string | undefined);
/**
* 设置是否控制台日志输出,默认true
* @param logConsole 是否控制台日志输出
*/
public set logConsole(value: boolean);
/**
* 设置是否本地文件日志输出,默认true
* @param logLocalFile 是否本地文件日志输出
*/
public set logLocalFile(value: boolean) ;
/**
* 设置终端登录类型,支持多终端登录,默认所有终端相同会导致互踢(选填)
* @param terminalType 终端登录类型
*/
public set terminalType(value: string | undefined) ;
/**
* 设置用户昵称(选填)
* @param nickName 用户昵称
*/
public set nickName(value: string | undefined) ;
/**
* 设置设备id(选填)
* @param deviceId 设备id
*/
public set deviceId(value: string | undefined) ;
/**
* 设置 token 校验类型(选填)
* @param tokenType token 校验类型
*/
public set tokenType(value: string | undefined) ;
/**
* 设置token(选填)
* @param token token
*/
public set token(value: string | undefined);
/**
* 设置 S3 国密证书 Base64 编码内容(选填)
* @param certificate S3 国密证书 Base64 编码内容
*/
public set certificate(value: string | undefined);
/**
* 设置是否允许过期证书校验通过
* @param acceptExpiredCertificate 是否允许过期证书校验通过
*/
public set acceptExpiredCertificate(value: boolean);
/**
* 设置帐户分录, 如果支持国密 S3 则需要设置certificate,否则不设置(选填)
* @param accountEntry 帐户分录
*/
public set accountEntry(value: string | undefined) ;
/**
* 设置加速云KEY
* @param accelerateKey 加速云KEY
*/
public set accelerateKey(value: string | undefined) ;
/**
* 设置加速云KEY密钥
* @param accelerateKeySecret 加速云KEY密钥
*/
public set accelerateKeySecret(value: string | undefined) ;
/**
* 设置是否开启 RPC 抗信令丢包控制(70%的上下行信令丢包),默认false
* @param looseTimeoutControl 是否开启 RPC 抗信令丢包控制
*/
public set looseTimeoutControl(value: boolean);
}
# 2. 登出
/**
* 登出,登出结果通过{@link JCCCommonCallback#onLogout(int) onLogout}回调通知
*
* @return 接口调用结果
*/
logout(): boolean;
示例代码
JCCGuestManager.getInstance().logout()
onLogout: (reason: JRTCReasonCode) => {
}
# 3. 获取登录状态
/**
* 获取当前登录状态
*
* @return 当前登录状态
*/
getClientLoginState(): JClientState;
状态枚举
export enum JClientState {
/**
* 未初始化
*/
NOT_INIT = 0,
/**
* 未登录
*/
IDLE = 1,
/**
* 登录中
*/
LOGINING = 2,
/**
* 登录成功
*/
LOGINED = 3,
/**
* 登出中
*/
LOGOUTING = 4
}
示例代码
let clientState = JCCGuestManager.getInstance().getClientLoginState()
# 4. 获取业务号列表
/**
* 获取业务号列表
*
* @return 接口调用结果
* - true: 接口调用成功,返回结果通过 {@link JRTCGuestCallback#onGetAllGroups} 回调上报
* - false: 接口调用异常
*/
abstract queryAllGroups(): boolean;
/**
* 获取业务号列表结果回调
*
* 访客调用 {@link JRTCGuest#queryAllGroups queryAllGroups} 接口获取业务号列表,会收到此回调。
* @param groups 座席业务实体对象列表,获取失败时为 undefined
* @param result 获取结果,true 表示获取成功,false 表示获取失败
*/
onGetAllGroups?: (result: boolean, groups: ArrayList<JRTCCallCenterGroupItem>) => void;
示例代码
JCCGuestManager.getInstance().queryAllGroups()
onGetAllGroups: (result: boolean, groups: ArrayList<JRTCCallCenterGroupItem>) => {
//获取业务组
}
# 5. 呼叫实现通话
/**
* 发起呼叫
*
* @param businessNumber 组号或座席用户ID
* @param param 设置创建呼叫参数
* @param oneToOne 是否为点对点呼叫,当为点对点呼叫时, businessNumber参数需传入座席用户ID;反之则传入业务组号
* @return 接口调用结果
* - true 表示调用成功,呼叫结果通过{@link JCCGuestCallback#onCallStateChanged} 回调通知
* - false 表示调用异常
*/
abstract call(businessNumber: string, param: JCCGuestCallParam, oneToOne: boolean): boolean;
呼叫参数
export class JCCGuestCallParam {
/**
* 设置是否需要加急按钮,默认需要
*/
public set autoRecord(value: boolean) {
this._autoRecord = value;
}
/**
* 设置随路参数,消息大小限制在2k
*/
public set extraInfo(value: string) {
this._extraInfo = value;
}
/**
* 设置通话视频全局宽高比,默认16/9
*/
public set wholeRatio(value: number) {
this._wholeRatio = value;
}
/**
* 设置通话视频最大帧率 1-30, 默认值为 24
*/
public set maxFrameRate(value: number) {
this._maxFrameRate = value;
}
/**
* 设置通话视频最大分辨率,默认为 {@link JCCConstants#RESOLUTION_720p}
*/
public set maxResolution(value: JResolution) {
this._maxResolution = value;
}
/**
* 设置 svc 分辨率,默认为 "1 180 250 360 600 720 1400"
* <p>
* 用于自定义分层参数和码率
* <p>
* 格式:
* 高度公约数 第一层高倍数 第一层码率 第二层高倍数 第二层码率 第三层高倍数 第三层码率 第四层高倍数 第四层码率 <br>
* 说明 <br>
* 1)默认宽高比16:9,即 @ref wholeRatio <br>
* 2)编码宽高最后被裁成16整除 <br>
* 例如 "1 180 250 360 600 720 1400" <br>
* 第一层 分辨率 宽320(180*1/9*16)高 180(180*1); 码率250kbps <br>
* 第二层 分辨率 宽640(360*1/9*16)高 360(360*1); 码率600kbps <br>
* 第三层 分辨率 宽1280(720*1/9*16)高 720(720*1); 码率1400kbps <br>
* 此情况下只有三层,若需要四层,则需补充为 "1 180 250 360 600 720 1400 1080 1600" <br>
* 第四层 分辨率 宽1920(1080*1/9*16)高 1080(1080*1); 码率1600kbps
*
* @param svcResolution svc分辨率
*/
public set svcResolution(value: string) {
this._svcResolution = value;
}
/**
* 设置通话视频清晰度,主要通过修改 {@link #setSvcResolution(string) svcResolution} 参数和 {@link #setMaxFrameRate(int) maxFrameRate} 参数调整清晰度,默认为 {@link CUSTOM}
*/
public set videoDefinition(value: JVideoDefinition) {
this._videoDefinition = value;
}
/**
* 设置通话心跳超时时间,默认为 60 秒
*
* 例如设置了心跳超时时间为 X 秒,那么服务器在 X 秒内都没有收到成员心跳时,该成员会自动结束通话。
*/
public set hbTimeout(value: number) {
this._hbTimeout = value;
}
/**
* 设置通话心跳间隔时间,默认为 20 秒
*
* 心跳间隔需比心跳超时时间小。<br>
* 例如设置了心跳间隔为 X 秒,那么终端会每隔 X 秒给服务器发送心跳包。
*/
public set hbTime(value: number) {
this._hbTime = value;
}
/**
* 设置服务器录制扩展参数
* 录制扩展参数保存在录制的info文件中,当{@link JCCGuestCallParam#autoRecord}为true时此参数有效
*/
public set recordExtraInfo(value: string) {
this._recordExtraInfo = value;
}
/**
* 设置通话媒体数据加密方式,默认不加密
*/
public set securityType(value: JSecurityType) {
this._securityType = value;
}
/**
* 设置通话视频编码,默认为 {@link JVideoEncodeType.H264},
*/
public set videoEncodeType(value: JVideoEncodeType) {
this._videoEncodeType = value;
}
/**
* 设置通话音频编码,默认为 {@link JAudioEncodeType.OPUS}
*/
public set audioEncodeType(value: JAudioEncodeType) {
this._audioEncodeType = value;
}
/**
* 设置本端视频宽高比。默认 9/16
*
* 将自己的视频采集根据宽高比裁剪后进行发送,通话中其他成员收到的画面将是裁剪后的比例。<br>
* 该方法不影响其他成员的画面在本端的显示比例,也不影响其他成员相互之间的画面显示比例。<br>
*/
public set ratio(value: number) {
this._ratio = value;
}
/**
* 设置访客呼叫权重,取值范围:[1-100]
*
* @note 只有访客普通呼叫才生效,访客点对点呼叫和座席回呼参数不生效
*/
public set vipPower(value: number) {
this._vipPower = value;
}
/**
* 设置渠道号
* @note 目前该参数只在呼叫指定业务有效
*/
public set channelId(value: string) {
this._channelId = value;
}
/**
* 设置本地录制文件路径,必须包含文件名,如xx.mp4,默认在 /sdcard/localRecord 目录下
*/
public set localRecordFilePath(value: string) {
this._localRecordFilePath = value;
}
/**
* 设置本地摄像头采集分辨率,默认 720p
*
* @param captureResolutionType 采集分辨率
* @see JResolution.360p 640*360
* @see JResolution.720p 1280*720
* @see JResolution.1080p 1920*1080
*/
public set captureResolutionType(value: JResolution) {
this._captureResolutionType = value;
}
/**
* 设置本地摄像头采集帧率,默认 24
*/
public set captureFrameRate(value: number) {
this._captureFrameRate = value;
}
/**
* 设置日志跟踪ID,可选
*/
public set traceId(value: string) {
this._traceId = value;
}
/**
* 设置业务流水号,保证唯一,可选
*
* @param serialId 业务流水号
*/
public set serialId(value: string) {
this._serialId = value;
}
/**
* 设置外部自定义业务流水号,可选
*
* @param extraSerialId 外部自定义业务流水号
*/
public set extraSerialId(value: string) {
this._extraSerialId = value;
}
}
示例代码
let param: JCCGuestCallParam = new JCCGuestCallParam();
.....
param.autoRecord = true;
......
JPluginGuestManager.getInstance().call(item.businessNumber, param, false)

# 6. 通话接通

