事件订阅

更新时间: 2024/08/23 10:24:52

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

初始注册事件监听

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

同步完成通知

  • API 介绍
    • 完成音视频连接后,音视频服务器同步过来的房间信息,里面包含已经处于房间内的用户信息。
  • 示例
jsnetcall.on('syncDone', (obj) => {
  // obj => {code,errmsg,userlist:[{account, mode, pusher_secret, scene, uid,url}]}
  console.log('同步成功', obj)
  // obj中包含房间内的用户信息,可以从中拿出推拉流地址,设置为live-pusher或live-player的推拉流组件中
})
  • 参数说明 obj 为收到的呼叫通知内容对象
obj 属性 类型 说明
code number 同步状态码,200表示成功
errmsg string 错误信息
userlist array 已经在房间中的用户对象数组,每个用户对象中包含
用户账号信息:account
通话模式:mode
场景值:scene
用户唯一ID:uid
rtmp地址:url

被叫收到呼叫的通知

  • API 介绍
    • 主叫发起通话请求后,被叫将收到呼叫通知,这时开发者可以依据一些自己的逻辑进行状态判断是否展示对应的 UI 和响应按钮
  • 示例
jslet infoOfBeCalled = null
netcall.on('beCalling', (obj) => {
  console.log('beCalling')
  console.log(obj)
  infoOfBeCalled = obj
})
  • 参数说明 obj 为收到的呼叫通知内容对象
obj 属性 类型 说明
caller string 主叫 account
type number 主叫发起的通话类型(音频还是视频)
cid string 此通通话的唯一 ID 值,开发者可用于判断是否是同一通呼叫

主叫收到被叫接受的通知

  • API 介绍

  • 示例

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

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

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

主叫收到被叫拒绝的通知

  • API 介绍

    • 被叫拒绝通话后,主叫会收到该通知,此时主叫就应该做如下一系列
      • 停止呼叫计时器
      • 清空各种呼叫状态
  • 示例

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

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

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

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

  • API 介绍

    • 通话过程中,可以通过监听该通知接口来接收各种通话指令的通知,做出相应处理
  • 示例

jsnetcall.on('control', function(obj) {
  console.log('收到指令', obj);
});
  • 参数说明

obj 为指令通知对象

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

收到挂断通知

  • API 介绍
    • 点对点通话过程中,当对方挂断通话时,己方会立即收到对方挂断的通知,这时己方需要挂断通话,并做相应的清理工作
  • 示例
js// 对方收到挂断通知
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 对方账号

其他端已处理的通知

  • API 介绍
    • 当收到呼叫时,如果账号存在多端登录的情况并且其他端已经对该通呼叫做了应答,这时 Web 端回到提示通知:已被其他端处理
  • 示例
jsnetcall.on('callerAckSync', function(obj) {
  console.log('其他端已经处理了本通通话', obj);
});
  • 参数说明

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

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

媒体层有人加入通知

  • API 介绍
    • 当已经处于房间中后,如果收到此通知,表明媒体网关收到房间内的其他用户的媒体流数据,此通知会下发该用户的拉流地址(点对点和多人均会收到此通知)。
    • 此时您应该创建一个 live-player 进行拉流,并将此地址设置到 live-player 组件中,进行拉流查看。
  • 示例
jsnetcall.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静默

媒体层有人离开通知

  • API 介绍
    • 表明房间中有人离开了,此时建议停止拉流,并经 live-player 组件从页面中移除
  • 示例
jsnetcall.on('clientLeave', function(obj) {
  // {cid,account,uid}
  console.log('用户离开了', obj);
});
  • 参数说明

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

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

信令层用户加入房间通知

  • API 介绍

    • 多人通话中,加入多人房间后,如果有用户加入了当前房间,当前房间中的所有人都会收到该通知
    • clientJoin 的区别为,本通知仅仅是信令层通知,通知回包数据中不包含拉流地址,后者会有拉流地址
  • 示例

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

obj 为通知消息对象

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

被踢通知

  • API 介绍

    • 你被管理员用户从房间中踢出,注意,如果管理员不解禁你,你无法再次加入此房间
  • 示例

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

连接关闭通知

  • API 介绍

    • 收到此通知,表明音视频连接已经意外被关闭了,建议执行销毁逻辑,重新加入
  • 示例

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

sdk内部消息通知

  • API 介绍
    • sdk内部出现错误或者服务器反馈一些通知(无法继续进行通话)时,会触发该回调通知事件,这时开发者可以根据需要调用方法获取信息
  • 示例
jsnetcall.on('error', function(obj) {
  console.log('sdk反馈错误信息', obj);
});
  • 参数说明

obj 反馈的消息对象

属性 类型 说明
code number 错误码
desc string 错误信息描述
此文档是否对你有帮助?
有帮助
去反馈
  • 初始注册事件监听
  • 同步完成通知
  • 被叫收到呼叫的通知
  • 主叫收到被叫接受的通知
  • 主叫收到被叫拒绝的通知
  • 通话中收到远端的控制指令
  • 收到挂断通知
  • 其他端已处理的通知
  • 媒体层有人加入通知
  • 媒体层有人离开通知
  • 信令层用户加入房间通知
  • 被踢通知
  • 连接关闭通知
  • sdk内部消息通知