事件订阅

用户可以订阅SDK上抛的事件,来实现p2p通话、多人通话等流程。

初始注册事件监听

在初始化音视频通话之后, 在进行音视频通话之前, 请先注册监听一些音视频通话通知事件, 基本上所有的音视频通话操作都是异步的, 而且这些操作会触发音视频通话的某些事件, 具体事件会在各个操作里面详细介绍.

同步完成通知

netcall.on('syncDone', (obj) => {
  // obj => {code,errmsg,userlist:[{account, mode, pusher_secret, scene, uid,url}]}
  console.log('同步成功', obj)
  // obj中包含房间内的用户信息,可以从中拿出推拉流地址,设置为live-pusher或live-player的推拉流组件中
})
obj 属性 类型 说明
code number 同步状态码,200表示成功
errmsg string 错误信息
userlist array 已经在房间中的用户对象数组,每个用户对象中包含
用户账号信息:account
通话模式:mode
场景值:scene
用户唯一ID:uid
rtmp地址:url

被叫收到呼叫的通知

let infoOfBeCalled = null
netcall.on('beCalling', (obj) => {
  console.log('beCalling')
  console.log(obj)
  infoOfBeCalled = obj
})
obj 属性 类型 说明
caller string 主叫 account
type number 主叫发起的通话类型(音频还是视频)
cid string 此通通话的唯一 ID 值,开发者可用于判断是否是同一通呼叫

主叫收到被叫接受的通知

// 被叫接受的通知
netcall.on('callAccepted', function(obj) {
  console.log('on callAccepted', obj);
  // 如果呼叫之前,启动了超时倒计时,这里可以取消呼叫倒计时
  clearCallTimer();
  // 可以开启音视频连接操作。。。
});

obj 为呼叫应答的回调通知对象

obj 属性 类型 说明
account string 被叫账号
type number 音视频呼叫类型:音频、视频

主叫收到被叫拒绝的通知

// 被叫拒绝的通知
netcall.on('callRejected', function(obj) {
  console.log('被叫拒绝了', obj);
  // 清除呼叫定时器
  clearCallTimer();
  // 清除用户UI逻辑(例如清除呼叫界面)
});

obj 为呼叫应答的回调通知对象

obj 属性 类型 说明
account string 被叫账号
type number 音视频呼叫类型
cid number 本通通话的唯一房间ID

通话中收到远端的控制指令

netcall.on('control', function(obj) {
  console.log('收到指令', obj);
});

obj 为指令通知对象

param 属性 类型 说明
account string 账号
cid number 需要发送指令的房间 id
command number 指令类型,具体值请参照这里

收到挂断通知

// 对方收到挂断通知
netcallInstance.on('hangup', (obj) => {
  console.log('hangup--对端挂断了', obj)
  // 判断收到的挂断通知是否是本通通话
  if (obj.cid !== this.loginUser.cid) {
    console.warn('非本通通话,抛弃')
    return
  }
  // 清除对应的UI逻辑。。。
})

obj 收到的挂断通知对象

obj 属性 类型 说明
timetag string 时间戳
cid string 当前通话的唯一 id 值
account string 对方账号

其他端已处理的通知

netcall.on('callerAckSync', function(obj) {
  console.log('其他端已经处理了本通通话', obj);
});

obj 为其他端已处理的回调对象

obj 属性 类型 说明
timetag string 时间戳
cid string 当前通话的唯一 id 值
type number 通话类型:音频、视频
accepted bool 其他端做出的应答:接受、拒绝
fromClientType string 从什么类型的终端做出的应答:IOS、Android 等

媒体层有人加入通知

netcall.on('clientJoin', function(obj) {
  // {cid,account,uid,url,mode}
  console.log('媒体网关收到用户媒体数据', obj);
});

obj 为其他端已处理的回调对象

obj 属性 类型 说明
account string IM账号信息
cid number 当前通话的唯一 id 值
uid number IM账号对应的用户ID
url string rtmp拉流地址
mode number 房间通话类型,0音视频,1纯音频,2纯视频,3静默

媒体层有人离开通知

netcall.on('clientLeave', function(obj) {
  // {cid,account,uid}
  console.log('用户离开了', obj);
});

obj 为其他端已处理的回调对象

obj 属性 类型 说明
account string IM账号信息
cid number 当前通话的唯一 id 值
uid number IM账号对应的用户ID

信令层用户加入房间通知

netcall.on('joinChannel', function(obj) {
  // 仅仅知道加入用户的 uid、cid信息,此时可以做些界面的操作,
  // 例如提前创建拉流组件并进行布局等待媒体网关收到后即可开始拉流
});

obj 为通知消息对象

obj 属性 类型 说明
account string 新加入同伴的账户
uid number 新加入同伴的 uid
cid number 加入的房间 id

被踢通知

netcall.on('kicked', function() {
  // 被踢了建议清除内部数据
  netcall.destroy()
  // 清除上层UI逻辑
});

连接关闭通知

netcall.on('close', function() {
  console.log('连接意外关闭了')
  // 被踢了建议清除内部数据
  netcall.destroy()
  // 清除上层UI逻辑
});

sdk内部消息通知

netcall.on('error', function(obj) {
  console.log('sdk反馈错误信息', obj);
});

obj 反馈的消息对象

属性 类型 说明
code number 错误码
desc string 错误信息描述