多人音视频通话

本章节介绍多人实时音视频通话的相关功能。多人实时音视频通话顾名思义是支持多个人同时进行实时音视频通话,可以选择纯音频模式,或音视频模式。在这里需要明确几个概念:

房间:房间就是用户进行多人实时音视频通话的地方,房间以房间名称为唯一标识,多人房间需要先创建成功后才能加入,当所有用户都离开房间后,可以复用该房间名重新创建。

互动者:互动者是指在多人通话时可以参与互动,可以发言的人,这些用户可以发送上行的音频或视频数据,也可以接收其他互动者下行的音频或视频数据。

观众:观众是指在多人通话时只可以观看的人,没有发言的权限,这些用户只可以接收互动者下行的音频或视频数据,不可以发送上行音频或视频数据。(受限于微信小程序,请自行控制 live-pusher 组件是否推流,SDK只将用户身份上报网关,具体身以网关是否收到媒体数据为准)

多人音视频通话流程图

与点对点通话的流程不同,多人房间暂不支持呼叫、推送和挂断等服务,只提供基本的创建、加入和离开房间接口。目前呼叫方案可以使用IM点对点自定义通知发送呼叫

请开发者自己做好呼叫超时处理

sequenceDiagram 发起者-> 发起者: 1. 创建房间: netcall.createChannel 发起者-> 发起者: 2. 加入房间: netcall.joinChannel 发起者-> 参与者A: 发送IM点对点自定义通知: nim.sendCustomSysMsg 发起者-> 参与者B: 发送IM点对点自定义通知: nim.sendCustomSysMsg 发起者-> 参与者C: 发送IM点对点自定义通知: nim.sendCustomSysMsg 参与者A-> 参与者A: 1. 收到IM自定义通知 参与者A-> 参与者A: 2. 加入房间: netcall.joinChannel 参与者B-> 参与者B: 1. 收到IM自定义通知 参与者B-> 参与者B: 2. 加入房间: netcall.joinChannel 参与者C-> 参与者C: 1. 收到IM自定义通知 参与者C-> 参与者C: 2. 加入房间: netcall.joinChannel

创建房间

netcall.createChannel({
  channelName: 'channelName' //必填
}).then(function() {
  console.log('创建房间成功')
  // 创建房间成功后的上层逻辑操作
  // eg: 初始化房间UI显示
  // eg: 加入房间
})
参数名 类型 说明
channelName string 房间房号,可以任意英文字母和数组的组合

加入房间

// 清先设置live-puhser组件的camera和micro的状态,保证两者状态与mode统一
netcall
  .joinChannel({
    channelName: 'testChannelName' //必填,请确保此房间已被创建
    mode: 0, // 模式,0音视频,1纯音频,2纯视频,3静默
    role: 0 // 角色,0-主播 1-观众
  })
  .then(function(obj) {
    // obj结构 => {account,cid,uid}
    console.error('加入房间成功', obj)
    // 加入房间成功后的上层逻辑操作
  });
参数名 类型 说明
channelName string 房间房号,可以任意英文字母和数组的组合
mode number 房间通话类型,0音视频,1纯音频,2纯视频,3静默
role number 角色,0-主播 1-观众(受限于微信小程序,请自行控制 live-pusher 组件是否推流,SDK只将用户身份上报网关,具体身以网关是否收到媒体数据为准)

离开房间

netcall.leaveChannel().then(() => {
  // 清除上层UI逻辑
});

用户加入房间通知

netcall.on('joinChannel', function(obj) {
  // obj结构 => {account,uid,cid}
  console.log('joinChannel', obj);
});

obj 为通知消息对象

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