iOS

# 实现视频通话

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

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

TIP

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

# 登录

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

/**
  * 登录
  * 登录结果通过onLogin 回调
  * @param context Context
  * @param loginParam 基本初始化登录配置信息
  * @return 调用是否成功
 */
public boolean login(Context context, JCCLoginParam loginParam)

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

/**
 * 初始化相关参数
 */
public class JCCLoginParam {
    /**
     * 服务器地址(必填)
     */
    public void setServer(String server);
    /**
     * appKey(必填)
     */
    public void setAppKey(String appKey);
    /**
     * 用户名(必填)
     */
    public void setUserName(String userName);
    /**
     * 应用名(选填)
     */
    public void setAppName(String appName);
    /**
     * 设置SDK信息存储目录,该目录下的log目录为日志目录(选填)
     */
    public void setSdkInfoDir(String sdkInfoDir);
    /**
     * 用户昵称(选填)
     */
    public void setNickName(String nickName);
    /**
     * 终端登录类型,支持多终端登录,默认所有终端相同会导致互踢(选填)
     */
    public void setTerminalType(String terminalType);
    /**
     * 设备id(选填)
     */
    public void setDeviceId(String deviceId);
    /**
     * token校验类型(选填)
     */
    public void setTokenType(String tokenType);
    /**
     * token(选填)
     */
    public void setToken(String token);
    /**
     * S3国密密钥(选填)
     */
    public void setCertificate(String certificate);
    /**
     * 帐户分录, 如果支持国密S3则需要设置certificate,否则不设置(选填)
     */
    public void setAccountEntry(String accountEntry);
    /**
     * 加速云KEY
     */
    public void setAccelerateKey(String accelerateKey);
    /**
     * 加速云KEY密钥
     */
    public void setAccelerateKeySecret(String accelerateKeySecret);
    /**
     * 是否开启 RPC 抗信令丢包控制(70%的上下行信令丢包), 默认false
     */
    public void setLooseTimeoutControl(boolean looseTimeoutControl);
}

示例代码:

JCCLoginParam loginParam = new JCCLoginParam();
...
loginParam.setServer("server");       //接入服务器的地址
loginParam.setAppKey("appKey");  //appKey
loginParam.setAppName("JCCGuest");//设置应用名
loginParam.setUserName("test"); //用户id
loginParam.setNickName("昵称"); //设置用户昵称
...
JCCRoomManager.getInstance().login(getActivity(), loginParam)

# 获取登录状态

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

/**
  * 获取当前登录状态
  * @return 当前登录状态
  */
@JCCClientState
public int getClientLoginState()

# 加入房间

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

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

房间参数详见 JCCRoomJoinParam (opens new window)

public class JCCRoomJoinParam {
	/**
	 * 设置推流参数,默认为 null
	 * <p>
	 * 如果用户在加入房间时没有设置推流参数,就无法进行推流
	 */
    public void setCdn(String cdn);
	/**
	 * 设置密码,默认为 "123456"
	 */
    public void setPassword(String password);
	/**
	 * 设置是否开启平滑模式,默认开启
	 * - true: 开启
	 * - false: 不开启
	 */
    public void setSmoothMode(boolean smoothMode);
	/**
	 * 设置是否上传本地视频
	 * - true: 上传
	 * - false: 不上传
	 */
    public void setVideo(boolean video);
	/**
	 * 设置最大分辨率,默认为 {@link JCCConstants#RESOLUTION_720p}
	 * <p>
	 * 当 @ref svcResolution 有值时,此参数设置无效,建议使用 {@link #svcResolution}
	 */
    public void setMaxResolution(@JCCResolution int maxResolution);
	/**
 	* 设置视频本地宽高比(默认为-1为不设置,自适应)
 	*/
    public void setRatio(float ratio);
	/**
	 * 设置全局宽高比,默认为 16:9
	 */
    public void setWholeRatio(float wholeRatio);
	/**
	 * 最大帧率 1-30, 默认值为 24
	 */
    public void setMaxFrameRate(int maxFrameRate);
	/**
	 * 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
	 */
    public void setSvcResolution(String svcResolution);
	/**
 	* 心跳间隔,默认为 20 秒
	 * <p>
	 * 心跳间隔需比心跳超时时间小。<br>
	 * 例如设置了心跳间隔为 X 秒,那么终端会每隔 X 秒给服务器发送心跳包。
	 */
    public void setHeartbeatTime(int heartbeatTime);
	/**
	 * 心跳超时时间,默认为 60 秒
	 * <p>
	 * 例如设置了心跳超时时间为 X 秒,那么服务器在 X 秒内都没有收到成员心跳时,该成员会自动结束通话。
	 */
    public void setHeartbeatTimeout(int heartbeatTimeout);
    /**
	 * 房间最大人数,默认值为 6
	 */
    public void setCapacity(int capacity);
	/**
	 * 设置是否上传本地音频
	 * - true: 上传
	 * - false: 不上传
	 */
   public void setUploadLocalAudio(boolean uploadLocalAudio);
    /**
     * 设置是否上传本地视频
	 * - true: 上传
	 * - false: 不上传
	 */
    public void setUploadLocalVideo(boolean uploadLocalVideo);
    /**
	 * 设置是否开启服务器录制
	 * - true: 开启
	 * - false: 不开启
	 */
   public void setEnableRemoteRecord(boolean enableRemoteRecord);
    /**
 	 * 设置加密方式
	 *
	 * @note 当加密方式为 {@link JCCConstants#SECURITY_TYPE_SM4} 时,需要在登录时携带国密参数,即 {@link JRTCClientLoginParam#setCertificate certificate} S3国密密钥需要传入有效值,详见 {@link JRTCClientLoginParam}。
	 */
    public void setSecurityType(@JCCSecurityType int securityType);
	/**
	 * 设置视频编码,默认为 {@link JCCConstants#VIDEO_ENCODE_TYPE_H264}
	 */
    public void setVideoEncodeType(@JCCVideoEncodeType int videoEncodeType);
	/**
	 * 设置音频编码
	 */
    public void setAudioEncodeType(@JCCAudioEncodeType int audioEncodeType);
	/**
	 * 视频清晰度
	 * 默认为 {@link JCCConstants#VIDEO_ENCODE_TYPE_H264}
	 */
    public void setVideoDefinition(@JCCVideoDefinition int videoDefinition);
	/**
	 * 采集分辨率类型
	 */
    public void setCaptureResolutionType(@JCCCaptureResolutionType int captureResolutionType);
	/**
	 * 采集帧率
	 */
    public void setCaptureFrameRate(int captureFrameRate);
}

示例代码:

JCCRoomJoinParam joinParam = new JCCRoomJoinParam();
......
joinParam.setCaptureFrameRate(24);
joinParam.setCapacity(6);
......
JCCRoomManager.getInstance().join("123456789", joinParam);

# 建立通话

img

# 离开房间

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

# 登出

/**
  * 登出销毁
  * @return 调用成功或失败
  */
public boolean logout()

示例代码:

JCCRoomManager.getInstance().logout();