snk-rt-newvideo-pc

华安实时音视频PC端SDK

Usage no npm install needed!

<script type="module">
  import snkRtNewvideoPc from 'https://cdn.skypack.dev/snk-rt-newvideo-pc';
</script>

README

webpack3 ie8

特殊说明,webpack支持IE8,但是框架中集成了stateMachine 和 RXJS库,这两个库并不支持IE8,但是支持IE9+

1.npm install

2.删除node_modules\babel-runtime\helpers\classCallCheck.js 的抛出异常的代码

// node_modules\babel-runtime\helpers\classCallCheck.js

"use strict";

exports.__esModule = true;

exports.default = function (instance, Constructor) {
  if (!(instance instanceof Constructor)) {
    // 不然打包报错
    // throw new TypeError("Cannot call a class as a function");
  }
};

运行

npm start

打包

npm run build

/src/entry/RtVideo.js

业务相关说明

一、主接口

引入方式

1、<script type="text/javascript" src="./snk-sse-0.1.0.js?a64d399f9a7fadbf7e21"></script>
2、import RtVideo from snk-rt-video-pc

二、相关初始化 new RtVideo()

相关初始化参数说明

参数名 参数类型 说明 参数是否必传
systemCode String 业务系统编码
account String 账号
profile String 连接视频环境选择-"dev"/"test" 可选
sseServerUrl Url 连接消息通知的URL,与profile必须任选一,外网环境必传 可选
videoServiceUrl Url 发送命令的URL,与profile必须任选一,外网环境必传 可选
stateServiceUrl Url 上报坐席状态的URL,与profile必须任选一,外网环境必传 可选
token String 为网络安全,如果有外网环境的需求,必传,其他环境不需要 可选
next function 初始化后,相关业务回调(如状态变化、来电通知)
error function 初始化后,相关错误回调
complete function 初始化后,相关回调

示例代码

<script>
function onLoad() {
      var rtVideo = new RtVideo({ systemCode: 'videoReview', profile: 'test', account: 'zhujiaqi@sinosafe.com.cn',
        // token: 'e94605b0d08f4531a3e065270ac4544c',
        // sseServerUrl: 'https://proxytest.sinosafe.com.cn/zzlp01//push-client/',
        // videoServiceUrl: 'https://proxytest.sinosafe.com.cn/zzlp01/rtv/',
        // stateServiceUrl: 'https://proxytest.sinosafe.com.cn/zzlp01/dispatch/',
      }, {
        next: function (event) { // 处理业务
          var Consts = RtVideo.Consts;
          if (event.type === Consts.VideoEventType.INCOMING_CALL) { // 用户来电会话ID
            sid = event.data.sid;
          } else if (event.type === Consts.VideoEventType.STATE_CHANGE) {  // 状态变化
            document.querySelector('#state').innerHTML = event.data.state;
          } else if (event.type === Consts.VideoEventType.EXCHANGE_CALL) { // 切换坐席请求
            document.querySelector('#state1').innerHTML = '切换坐席请求';
            sid = event.data.sid;
          }
        },
        error: function (e) { // 处理错误消息
          console.error(e);
        },
        complete: function () {

        }
      });
    }
</script>

三、rtVideo 提供的相关方法

方法API说明

方法名 方法说明 参数名 参数类型 参数说明 参数是否必传
state() 主动获取当前通话状态
rest() 在ready状态下,可以设置休息
back() 在rest状态下,可以由休息设置在线
answer() 应答通话 sid string 会话ID,在next回调中获得,一个通话拥有唯一的ID
askToCalled() 主动向客户端发起通话请求 { staffId: staffId, clientId: clientId, ext: ext} obj staffId:用户回拨的坐席ID;必传 clientId:呼叫的客户端Id,必传;ext:附加信息,非必传
passMessage() PC向websocket发送消息 { sid: sid, message: message } string 会话ID和要传送的消息
refuse() 在通话未接通情况下,拒绝应答 sid string 会话ID,在next回调中获得,一个通话拥有唯一的ID
hangUp() 在通话已经接通情况下,挂断通话 sid string 会话ID,在next回调中获得,一个通话拥有唯一的ID
snapshot() 坐席端截图,一次调用,只是截图一个屏(流)的图片 type string 可选 "pusher" 或 "player"
reconnect() 可以使网页重新连接 EXE
askChangePerson() 主视频方主动发起切换人员请求 { sid: sid, newer: newer } JSON sid:当前会话id; newer: 被转接方账号
cancelChangePerson() 主视频方取消发起的切换请求 { sid: sid, newer: newer } JSON sid:当前会话id; newer: 被转接方账号
acceptChangePerson() 被切换方接受切换请求 { sid: sid } JSON sid:当前会话id
refuseChangePerson() 被切换方拒绝切换请求 { sid: sid } JSON sid:当前会话id
askAddPerson() 主视频方主动发起增加三方请求 { sid: sid, newer: newer } JSON sid:当前会话id; newer: 被增加方账号
cancelAddPerson() 主视频方主动取消增加三方请求 { sid: sid, newer: newer } JSON sid:当前会话id; newer: 被增加方账号
removeAddPerson() 已接通三方视频后,主视频方踢掉第三方 { sid: sid, newer: newer } JSON sid:当前会话id; newer: 被增加方账号
acceptAddPerson() 第三方接受三方视频请求 { sid: sid } JSON sid:当前会话id
refuseAddPerson() 第三方拒绝三方视频请求 { sid: sid } JSON sid:当前会话id
quitAddPerson() 已接通三方视频后,第三方操作退出 { sid: sid } JSON sid:当前会话id

示例代码

<script>
/*
  sid: 当前会话ID
  type: 截图类型, pusher推流 或player拉流
  obj: { sid: sid, newer: newer }
*/
  rtVideo.state()                             // 获取当前状态
  rtVideo.rest()                              // 休息
  rtVideo.back()                              // 休息返回
  rtVideo.answer(sid)                         // 接听
  rtVideo.refuse(sid)                         // 拒绝
  rtVideo.hangUp(sid)                         // 挂断
  rtVideo.snapshot(type)                      // 坐席端截图
  rtVideo.reconnect()                         // 当exe不小心关闭,重新呼起EXE无反应,调用后,网页重新连接exe
  rtVideo.unload()                            // 关闭exe与网页的连接(关闭EXE,不会自动拉起),如果还在通话中,会中断通话
---------------------------------------------------------------------
  rtVideo.askChangePerson (obj)               // 切换坐席请求 
  rtVideo.cancelChangePerson(obj)             // 取消坐席请求
  rtVideo.acceptChangePerson (obj)            // 接受切换坐席请求
  rtVideo.refuseChangePerson (obj)            // 拒绝切换坐席请求
---------------------------------------------------------------------
  rtVideo.askAddPerson (obj)                  // 发起第三方请求
  rtVideo.cancelAddPerson(obj)                // 取消第三方请求
  rtVideo.removeAddPerson(obj)                // 移除第三方请求
  rtVideo.acceptAddPerson (obj)               // 接受第三方请求
  rtVideo.refuseAddPerson (obj)               // 拒绝第三方请求
  rtVideo.quitAddPerson (obj)                 // 主动退出第三方请求
</script>

四、回调函数相关

事件类型

type 说明 作用
INCOMING_CALL 来电事件 返回会话ID sid
RECOVERY_CALL 恢复来电事件 返回会话ID sid
INCOMING_CALL_HANGUP 用户挂断来电或会话结束 通知事件
VIDEOTAPE 视频录像 返回视频地址
SNAPSHOT 截图事件 返回图像的 base64
STATE_CHANGE 状态变化事件 返回当前状态state,具体相关状态可看下方“ 通话状态 ”说明
HTTP_BACK 转移通话、增加三方等事件 主要是操作失败后,相关提示信息,比如第三方正在通话中
EXE_ERROR 视频EXE事件 EXE报错事件
EXCHANGE_CALL 切换坐席通知 交互时收到切换通知
ADD_CALL 增加坐席通知 交互时收到增加通知
/**
 * 业务端的事件类型
 */
const VideoEventType = {
  INCOMING_CALL: 'INCOMING_CALL',                // 来电事件
  RECOVERY_CALL: 'RECOVERY_CALL',                // 恢复来电事件
  INCOMING_CALL_HANGUP: 'INCOMING_CALL_HANGUP',  // 用户挂断来电或会话结束
  VIDEOTAPE: 'VIDEOTAPE',                        // 视频录像
  SNAPSHOT: 'SNAPSHOT',                          // 截图事件
  STATE_CHANGE: 'STATE_CHANGE',                  // 状态变化事件
  HTTP_BACK: 'HTTP_BACK',                        // http请求返回
  EXE_EVENT: 'EXE_EVENT',                        // exe异常事件
  EXCHANGE_CALL: 'EXCHANGE_CALL',                // 坐席切换请求
  ADD_CALL: 'ADD_CALL'                           // 坐席增加请求
}

通话状态(STATE_CHANGE事件或主动获取时返回的状态)

state 状态说明 状态
disconnected 未连接或初始化失败 异常
ready 初始化成功,可接听状态 准备就绪
leave 调用rest后的状态 离开
wait 当用户拨打后未接听状态 待接听
busy 正在通话状态 通话中
```
/**
  • 通话状态状态 */ const ServiceFsmState = { DISCONNECTED: 'disconnected', // 连接断开(致命异常) READY: 'ready', // 准备就绪 LEAVE: 'leave', // 离开、休息 WAIT: 'wait', // 待接听 BUSY: 'busy' // 通话中 }

#### 相关事件码(事件码说明)
msgType | 所属事件 | 说明
---|---|---
50200 | INCOMING_CALL       | 客户端来电
50203 | VIDEOTAPE           | 视频录制资源
30000 | INCOMING_CALL_HANGUP| 会话结束
30019 | INCOMING_CALL_HANGUP| 用户离线
20100 | EXCHANGE_CALL       | 切换坐席请求
20101 | EXCHANGE_CALL       | 接受切换请求
20102 | EXCHANGE_CALL       | 拒绝切换请求
20103 | EXCHANGE_CALL       | 取消切换请求
20200 | ADD_CALL            | 第三方增加请求
20201 | ADD_CALL            | 第三方座席接听
20202 | ADD_CALL            | 第三方座席拒绝
20203 | ADD_CALL            | 第三方座席退出
20204 | ADD_CALL            | 第三方座席取消
100025| HTTP_BACK           | 操作失败,该会话已经结束
200001| HTTP_BACK           | 操作失败,服务受理失败
200002| HTTP_BACK           | 操作失败,服务受理超时
300001| HTTP_BACK           | 操作失败,从调度系统获取坐席失败
300002| HTTP_BACK           | 操作失败,向调度系统拒接任务失败
300003| HTTP_BACK           | 操作失败,坐席忙线
400001| HTTP_BACK           | 操作失败,正在切换坐席中
400002| HTTP_BACK           | 操作失败,不能切换给自己
400003| HTTP_BACK           | 操作失败,正在等待被切换方应答
400004| HTTP_BACK           | 操作失败(未启用)
400005| HTTP_BACK           | 操作失败,对方已受理切换请求取消失败
400006| HTTP_BACK           | 操作失败,受理超时或被请求方取消
500001| HTTP_BACK           | 操作失败

/**

  • 视频信令命令码 */ const VideoControlCode = { INCOMING_CALL: 50200, // 客户端推拉流资源 USER_INTERRUPT : 30017, // 用户挂断 USER_OFF_LINE: 30019, // 用户离线 AUTO_END_SESSION: 30000, // 会话自动结束 STAFF_CHANGE_ASK: 20100, // 坐席切换请求 STAFF_CHANGE_CALL_BACK_ACCEPT: 20101, // 收到接受切换回复 STAFF_CHANGE_CALL_BACK_REJECT: 20102, // 收到拒绝切换回复 STAFF_CHANGE_CALL_BACK_CANCEL: 20103, // 被切换方收到坐席取消切换 STAFF_CHANGE_LIVE_SRC: 50201, // 坐席切换受理结果推拉流资源 PARTICIPATOR_LIVE_SRC: 50202, // 添加第三方受理结果推拉流资源 VIDEO_REC_SRC: 50203, // 视频录制资源 IMG_SRC: 50204, // 平台转发微信小程序侧上传的图片的信息给接入系统 END_SESSION: 30025, // 会话结束 ADDPARTICIPATOR_ASK: 20200, // 添加第三方坐席请求 ADDPARTICIPATOR_CALL_BACK_ACCEPT: 20201, // 第三方座席接听 ADDPARTICIPATOR_CALL_BACK_REJECT: 20202, // 第三方座席拒绝 ADDPARTICIPATOR_DEL: 20203, // 第三方座席退出 ADDPARTICIPATOR_CANCEL: 20204, // 第三方收到主坐席取消 }