iOS

# 实现视频通话

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

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

TIP

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

# 快速搭建 Plugin

# 1. 登录

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

/**
 * @brief 初始化并登录,登录结果通过 {@link JCCCommonCallback#onLogin:reason: onLogin} 回调通知
 * @param config 初始化和登录的基本配置信息
 * @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 = @"userName";
config.appName = @"菊风访客";
BOOL ret = [JCCRoomManager.shared login:config];

# 2. 获取登录状态

调用 getClientLoginState (opens new window) 获取登录状态,返回登录状态详见 JCCClientState (opens new window)

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

# 3. 加入房间

调用 join (opens new window) 方法,加入房间进行通话。

/**
 * 加入房间
 *
 * 该方法让用户加入通话房间,在同一个房间内的用户可以互相通话。<br>
 * 如果用户已在房间中,必须退出当前房间,即处于空闲状态,才能进入其他房间,否则将直接返回 false,且不会收到回调通知。
 * @param roomId    房间号
 * @param joinParam     JRTCRoomJoinParam 对象,传 nil 则使用默认配置
 * @return 接口调用结果
 * - true: 接口调用成功,会收到 {@link JCCRoomCallback.onJoin:reason} 回调
 * - false: 接口调用异常
 */
- (bool)join:(NSString* __nonnull)roomId joinParam:(JCCRoomJoinParam * __nullable)joinParam;

示例代码:

JCCRoomJoinParam *param = [JCCRoomJoinParam new];
param.isUploadLocalAudio = YES;
param.isUploadLocalVideo = YES;
...
[JCCRoomManager.shared join:@"roomId" joinParam:param];

# 4. 建立通话

img

# 5. 离开房间

/**
 * 离开房间
 * @return 接口调用结果
 * - true: 接口调用成功,非空闲状态下,会收到 {@link JCCRoomCallback.onLeave} 回调
 * - false: 接口调用异常
 */
- (bool)leave;

# 6. 登出

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

示例代码:

JCCGuestManager.getInstance().logout();