通话过程控制

本章节介绍音视频通话过程中网易云提供的各种控制功能。包括点对点通话的控制多人房间的控制通用控制

点对点通话的控制包括发送通话控制信息、设置静音、切换通话模式等

多人房间的控制包括改变自己在房间中的角色(互动者/观众)

通用控制包括是否接收某用户的音频或视频数据、动态切换一些参数等

发送通话控制信息

// 通知对方自己关闭了摄像头
var param = {
  channelId: 1511182568418,
  command: Netcall.NETCALL_CONTROL_COMMAND_NOTIFY_VIDEO_OFF
}
netcall.control(param)
param参数属性 类型 说明
channelId number 当前会话的唯一id值
command number 会话控制指令具体值请参照这里

收到通话控制信息回调

netcall.on('control', function(obj) {
  // 如果不是当前通话的指令, 直接丢掉
  if (netcall.notCurrentChannelId(obj)) {
    return
  }
  console.log('on control', obj)
})
obj参数属性 类型 说明
channelId number 当前会话的唯一id值
command number 会话控制指令具体值请参照这里

点对点通话的控制

点对点音视频通话过程中,双方可以进行一键切换音视频模式,可以通过下面的方法进行控制,下面是一个简单的流程图

音频切换到视频的流程

sequenceDiagram A->>B: A发起切视频请求: netcall.control B->>B: B收到请求切视频的通知: netcall.on('control', obj => {}) B->>A: B同意切换到视频聊天: netcall.control A->>A: A收到B响应通知-同意: netcall.on('control', obj => {}) A->>A: 请求成功,开始切换视频模式 B->>B: 请求成功,开始切换视频模式

双方协商完成后,需要下列步骤开启视频聊天

graph TB A(Start) --> B[netcall.switchAudioToVideo: 切换视频模式] B --> C[netcall.startDevice: 开启视频设备] C --> D[netcall.startLocalStream: 开启本地视频预览] D --> E[netcall.startRemoteStream: 开启对端视频预览] E --> F(End)

视频切换到音频的流程

sequenceDiagram A->>B: A发起切音频请求: netcall.control B->>B: B收到请求切视频的通知: netcall.on('control', obj => {}) A->>A: 关闭摄像头 B->>B: 关闭摄像头

请求从音频切换到视频

netcall.control({
  command: Netcall.NETCALL_CONTROL_COMMAND_SWITCH_AUDIO_TO_VIDEO
})

同意从音频切换到视频

netcall.control({
  command: Netcall.NETCALL_CONTROL_COMMAND_SWITCH_AUDIO_TO_VIDEO_AGREE
})

// 切换
netcall.switchAudioToVideo()

// 开启设备
netcall.startDevice({
  type: Netcall.DEVICE_TYPE_VIDEO,
  width: 500,
  height: 400
})

// 开启预览
netcall.startLocalStream()
netcall.startRemoteStream()

拒绝从音频切换到视频

netcall.control({
  command: Netcall.NETCALL_CONTROL_COMMAND_SWITCH_AUDIO_TO_VIDEO_REJECT
})

从视频切换到音频

netcall.control({
  command: Netcall.NETCALL_CONTROL_COMMAND_SWITCH_VIDEO_TO_AUDIO
})
netcall.switchVideoToAudio()

// 关闭摄像头
netcall.stopDevice(Netcall.DEVICE_TYPE_VIDEO).then(function() {
  // 通知对方自己关闭了摄像头
  netcall.control({
    command: Netcall.NETCALL_CONTROL_COMMAND_NOTIFY_VIDEO_OFF
  })
})

// 停止预览
netcall.stopLocalStream()
netcall.stopRemoteStream()

多人通话的控制

改变自己在房间中的角色

角色 说明
player 互动者,可以发送自己的音频和视频给房间中的其他人呢
audience 观众,只允许接收其他人的音频和视频,不能发送自己的音频和视频
// 切换为互动者
netcall.changeRoleToPlayer().then(function(obj) {
  console.log('切换成功,当前角色', obj)
})

// 切换为观众
netcall.changeRoleToAudience().then(function(obj) {
  console.log('切换成功,当前角色', obj)
})

通用控制

指定某用户设置是否对其静音

var account = 'testAccount'
netcall.setAudioBlack(account)
参数名 类型 说明
account string 需要静音的目标账号

取消对某用户的静音

var account = 'testAccount'
netcall.setAudioStart(account)
参数名 类型 说明
account string 需要取消静音的目标账号

指定某用户设置是否接收其视频

var account = 'testAccount'
netcall.setVideoBlack(account)
参数名 类型 说明
account string 需要屏蔽画面的目标账号

取消对目标用户的视频屏蔽

var account = 'testAccount'
netcall.setVideoShow(account)
参数名 类型 说明
account string 需要重新接收画面的目标账号

动态设置分辨率(PC Agent)

var videoQuality = Netcall.CHAT_VIDEO_QUALITY_720P
netcall.setSessionVideoQuality(videoQuality)
参数名 类型 说明
videoQuality number 视频画面分辨率,具体选值见这里

动态设置帧率(PC Agent)

var videoFrameRate = Netcall.CHAT_VIDEO_FRAME_RATE_20
netcall.setSessionVideoFrameRate(videoFrameRate)
参数名 类型 说明
videoFrameRate number 视频帧率,具体选值见这里

动态设置码率(PC Agent)

var videoQuality = 200000
netcall.setSessionVideoBitrate(videoQuality)
参数名 类型 说明
videoQuality number 视频码率,100000 ~ 5000000 范围有效