iOS

# 实现视频通话(访客)

本文档为您展示 实现视频通话(访客侧)的相关步骤,帮助您在远程银行和视频客服的场景下实现智能排队、屏幕共享、全景录像、访客管理的相关能力。

当您成功获取 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)

img

# 6. 通话接通

img