# 实现视频客服

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

# 发起呼叫

guest.call("10086", new JCGuestCallParam());

其中 JCGuestCallParam 包含了很多呼叫的扩展参数,比如随路参数、视频分辨率信息等,这个将在进阶的接口说明里做介绍。

# 通话状态改变通知

当访客接听通话,或者通话结束,都会通过 JCGuestCallback (opens new window) 里的 onCallStateChanged (opens new window) 事件进行上报。

public void onCallStateChanged(int type, int reason) {
    switch (type) {
       case JCGuest.CHANGE_TYPE_CALLING: {
         // 呼叫中
        break;
       }
        case JCGuest.CHANGE_TYPE_WAITING: {
         // 等待坐席接听
        break;
       }
        case JCGuest.CHANGE_TYPE_TALKING: {
         // 已接通
        break;
        }
        case JCGuest.CHANGE_TYPE_TERMED: {
         // 通话结束
        break;
        }
    }
}

# 创建本地视频画面

创建本地视频画面的时机没有具体要求,在通话前通话中皆可。

JCMediaDeviceVideoCanvas localCanvas = mediaDevice.startCameraVideo(JCMediaDevice.RENDER_FULL_SCREEN);
viewGroup.addView(localCanvas.getVideoView());

# 创建远端视频画面

当通话建立后,如果坐席有视频流的上传,访客端可以获取到坐席的视频流并进行渲染。

JCMediaDeviceVideoCanvas remoteCanvas = mediaDevice.startVideo(guest.getGuestParticipant().getRenderId(),JCMediaDevice.RENDER_FULL_SCREEN);
viewGroup.addView(remoteCanvas.getVideoView());

# 挂断

访客可以在呼叫等待或者通话中主动取消或者结束通话。

guest.term();

主动和被动的挂断事件与来电、接通一样,都通过 onCallStateChanged (opens new window) 接口上报,其中 JCGuest.CallTermReason (opens new window) 可以用来判断挂断原因,如:主动挂断、对端挂断等,详细可参考接口文档或者 SDK 注释。

# 销毁本地和远端画面

当不再需要查看视频画面,或者通话结束,需要调用接口来释放渲染的资源。

mediaDevice.stopVideo(localCanvas);
mediaDevice.stopVideo(remoteCanvas);

必须进行这步操作,不然会造成渲染内存不释放。