iOS

# 实现视频通话

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

当您成功获取 Juphoon Guest Plugin 之后,您可以快速集成视频通话服务,同时体验本产品的基本业务流程。

# 快速搭建 Plugin

注:我们所有的方法都建议在主线程调用,否则可能会出现异常无法正常使用,回调接口也都在主线程上报。

# 1. 登录

登录菊风账号,调用 login (opens new window) ,登录过程中进行初始化登录配置。

/**
 * @brief 初始化并登录,登录结果通过 {@link JCCCommonCallback#onLogin:reason: onLogin} 回调通知
 * @param param 初始化和登录的基本配置信息
 * @return 接口调用结果
 * - YES 表示调用成功
 * - NO 表示调用异常
 */
- (BOOL)login:(JCCLoginParam *)param;

# 设置初始化参数

初始化参数详见 JCCLoginParam (opens new window)

/// 初始化相关参数
@interface JCCLoginParam : NSObject

/// appKey(必填)
@property (nonatomic, copy) NSString *appKey;

/// 服务器地址(必填)
@property (nonatomic, copy) NSString *server;

/// 应用名(选填)
@property (nonatomic, copy) NSString *appName;

/// 设置SDK信息存储目录,该目录下的log目录为日志目录(选填)
@property (nonatomic, copy) NSString *sdkInfoDir;

/// 用户名(必填)
@property (nonatomic, copy) NSString *userName;

/// 用户昵称(选填)
@property (nonatomic, copy) NSString *nickName;

/// 终端登录类型,支持多终端登录,默认所有终端相同会导致互踢(选填)
@property (nonatomic, copy) NSString *terminalType;

/// 设备id(选填)
@property (nonatomic, copy) NSString *deviceId;

/// token校验类型(选填)
@property (nonatomic, copy) NSString *tokenType;

/// token(选填)
@property (nonatomic, copy) NSString *token;

/// S3国密密钥(选填)
@property (nonatomic, copy) NSString *certificate;

/// 帐户分录, 如果支持国密S3则需要设置certificate,否则不设置(选填)
@property (nonatomic, copy) NSString *accountEntry;

/// 屏幕共享插件groupId
@property (nonatomic, copy) NSString *shareGroupId;

/// 屏幕共享插件bundle id
@property (nonatomic, copy) NSString *shareExtension;

/// 加速云KEY
@property (nonatomic, copy) NSString *accelerateKey;

/// 加速云KEY密钥
@property (nonatomic, copy) NSString *accelerateKeySecret;

/// 是否控制台日志输出, 默认true
@property (nonatomic, assign) bool logConsole;

/// 是否本地文件日志输出, 默认true
@property (nonatomic, assign) bool logLocalFile;

/// 是否开启 RPC 抗信令丢包控制(70%的上下行信令丢包), 默认false
@property (nonatomic, assign) bool looseTimeoutControl;

@end

# 示例代码

JCCLoginParam *config = [[JCCLoginParam alloc] init];
config.appKey = appkey;
config.server = _server;
config.userName = _account;
config.appName = @"菊风视频客服";
BOOL ret = [JCCGuestManager.shared login:config];

# 2. 获取登录状态

getClientLoginState (opens new window) 获取登录状态。

/**
 * @brief 获取当前登录状态
 * @return 当前登录状态
 */
- (JCCClientState)getClientLoginState;

# 3. 呼叫实现通话

调用 call (opens new window) 方法,实现呼叫坐席,进行通话。呼叫过程中可以配置呼叫参数。

/**
 * @brief 发起呼叫
 * @param number 组号或座席用户ID
 * @param callParam 设置创建呼叫参数
 * @param oneToOne 是否为点对点呼叫,当为点对点呼叫时,number 参数需传入座席用户ID;反之则传入业务组号
 * @return 接口调用结果
 * - YES 表示调用成功,呼叫结果通过 {@link JCCGuestCallback#onCallStateChanged:termReason: onCallStateChanged} 回调通知
 * - NO 表示调用异常
 */
- (BOOL)call:(NSString *)number callParam:(JCCGuestCallParam *)callParam oneToOne:(BOOL)oneToOne;

# 设置呼叫参数

呼叫参数详见 JCCGuestCallParam (opens new window)

/// 呼叫参数
@interface JCCGuestCallParam : NSObject

/// 配置加急按钮,默认为 YES
@property (nonatomic, assign) BOOL urgent;

/// 本地录制文件路径
@property (nonatomic, copy) NSString *localRecordFilePath;

/// 附加信息,随路参数
@property (nonatomic, copy) NSString *extraInfo;

/// 自定义流水号
@property (nonatomic, copy) NSString *serialNumber;

/**
 * 心跳超时时间,默认为 60 秒
 */
@property (nonatomic, assign) int hbTimeout;
/**
 * 心跳间隔,默认为 20 秒
 */
@property (nonatomic, assign) int hbTime;

/// 是否由服务器自动开启录制,默认为 YES
@property (nonatomic, assign) BOOL autoRecord;

/// 入会加密方式
@property (nonatomic, assign) JCCSecurityType securityType;

/// 视频清晰度
/// 默认为 {@link VideoDefineType#DefinitionCustom DefinitionCustom}
@property (nonatomic, assign) VideoDefinitionType videoDefinition;

/// 最大帧率
@property (nonatomic, assign) int maxFrameRate;

/// svc分辨率
@property (nonatomic, copy) NSString *svcResolution;

/// 设置视频本地宽高比(会将自己的视频采集根据宽高比裁剪后进行发送)
@property (nonatomic, assign) float ratio;

/**
 * 视频编解码,默认为 H264
 */
@property (nonatomic, assign) JCCVideoEncodeType videoEncodeType;

/**
 * 音频编解码,默认为 OPUS
 */
@property (nonatomic, assign) JCCAudioEncodeType audioEncodeType;

/**
 * 采集分辨率类型
 */
@property (nonatomic, assign) JCCCaptureResolutionType captureResolutionType;

/**
 * 采集帧率
 */
@property (nonatomic, assign) int captureFrameRate;

/**
 * 访客呼叫权重,取值范围:[1-100]。
 * @note
 * 只有访客普通呼叫才生效,访客点对点呼叫参数不生效
 */
@property (nonatomic, assign) int vipPower;

# 示例代码

JCCGuestCallParam *param = [[JCCGuestCallParam alloc] init];
...
[JCCGuestManager.shared call:@"10086" callParam:param oneToOne:NO];

img

呼叫中

# 4. 通话接通

img

通话中

# 5. 登出

调用 logout (opens new window) 登出

/**
 * @brief 登出并销毁
 * @return 调用是否成功
 */
- (BOOL)logout;

# 示例代码

JCCGuestManager.getInstance().logout();