iOS

# 实现视频通话

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

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

TIP

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

# 步骤一: 登录

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

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

初始化参数详见 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);
}

示例代码:

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

# 步骤二:获取登录状态

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

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

# 步骤三: 呼叫实现通话

调用call (opens new window)方法,可对组号或者座席id实现呼叫进行通话。

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

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

/**
 * 呼叫参数
 */
public class JCCGuestCallParam {
    /**
     * 设置是否需要加急按钮,默认需要
     */
    public void setUrgent(boolean urgent);

    /**
     * 设置本地录制文件路径,必须包含文件名,如xx.mp4,默认在 /sdcard/localRecord 目录下
     */
    public void setLocalRecordFilePath(String localRecordFilePath);
    /**
     * 设置随路参数,消息大小限制在2k
     */
    public void setExtraInfo(String extraInfo);

    /**
     * 设置是否由服务器自动开启录制,默认开启
     */
    public void setAutoRecord(boolean autoRecord);
    /**
     * 设置通话视频全局宽高比,默认16/9
     */
    public void setWholeRatio(float wholeRatio);

    /**
     * 设置通话视频最大分辨率,默认为 {@link JCCConstants#RESOLUTION_720p}
     *
     * 当 {@link #setSvcResolution(String)} svcResolution} 有值时,此参数设置无效,建议使用 {@link #setSvcResolution(String)} svcResolution}
     */
    public void setMaxResolution(@JCCResolution int maxResolution);

    /**
     * 设置通话视频最大帧率 1-30, 默认值为 24
     *
     * @note 当参数 {@link #setVideoDefinition(int)} videoDefinition} 为 {@link JCCConstants#DEFINITION_CUSTOM DEFINITION_CUSTOM} 时有效
     */
    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
     *
     * @param svcResolution svc分辨率
     */
    public void setSvcResolution(String svcResolution);

    /**
     * 设置通话视频清晰度,主要通过修改 {@link #setSvcResolution(String) svcResolution} 参数和 {@link #setMaxFrameRate(int) maxFrameRate} 参数调整清晰度,默认为 {@link JCCConstants#DEFINITION_CUSTOM}
     */
    public void setVideoDefinition(int videoDefinition);

    /**
     * 设置通话媒体数据加密方式,默认不加密
     */
    public void setSecurityType(int securityType);

    /**
     * 设置通话视频编码,默认为 {@link JCCConstants#VIDEO_ENCODE_TYPE_H264},
     */
    public void setVideoEncodeType(@JCCVideoEncodeType int videoEncodeType);

    /**
     * 设置通话心跳间隔时间,默认为 20 秒
     *
     * 心跳间隔需比心跳超时时间小。<br>
     * 例如设置了心跳间隔为 X 秒,那么终端会每隔 X 秒给服务器发送心跳包。
     */
    public void setHbTime(int hbTime);

    /**
     * 设置通话心跳超时时间,默认为 60 秒
     *
     * 例如设置了心跳超时时间为 X 秒,那么服务器在 X 秒内都没有收到成员心跳时,该成员会自动结束通话。
     */
    public void setHbTimeout(int hbTimeout);
    
    /**
     * 设置服务器录制扩展参数
     * 录制扩展参数保存在录制的info文件中,当{@link JCCGuestCallParam#autoRecord}为true时此参数有效
     */
    public void setRecordExtraInfo(String recordExtraInfo);

    /**
     * 设置通话音频编码,默认为 {@link JCCConstants#AUDIO_ENCODE_TYPE_OPUS}
     */
    public void setAudioEncodeType(@JCCAudioEncodeType int audioEncodeType);

    /**
     * 设置本端视频宽高比。默认 9/16
     *
     * 将自己的视频采集根据宽高比裁剪后进行发送,通话中其他成员收到的画面将是裁剪后的比例。<br>
     * 该方法不影响其他成员的画面在本端的显示比例,也不影响其他成员相互之间的画面显示比例。<br>
     */
    public void setRatio(float ratio);

    /**
     * 设置访客呼叫权重,取值范围:[1-100]
     *
     * @note 只有访客普通呼叫才生效,访客点对点呼叫和座席回呼参数不生效
     */
    public void setVipPower(int vipPower);

    /**
     * 设置本地摄像头采集分辨率,默认 720p
     *
     * @param captureResolutionType 采集分辨率
     * @see JCCConstants#RESOLUTION_360p  640*360
     * @see JCCConstants#RESOLUTION_720p  1280*720
     * @see JCCConstants#RESOLUTION_1080p 1920*1080
     */
    public void setCaptureResolutionType(@JCCResolution int captureResolutionType);

    /**
     * 设置本地摄像头采集帧率,默认 24
     *
     * @param captureFrameRate 采集帧率
     */
    public void setCaptureFrameRate(int captureFrameRate);
}

# 示例代码

JCCGuestCallParam callParam = new JCCGuestCallParam();
......
JCCGuestManager.getInstance().call("10086", callParam, false);

img

# 步骤四:通话接通

img

# 步骤五: 登出

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

示例代码:

JCCGuestManager.getInstance().logout();