h# 录制相关

在小程序端,网易云实时音视频提供服务端录制的录制方式。

服务端录制需要您联系我们的销售,开通此功能,并且需要在管理中心中成功配置消息抄送服务。实时音视频服务端录制目前仅支持点对点音视频通话。假设A和B进行实时音视频通话,服务端录制下来的文件包括:A的纯音频文件(.aac)A的音视频文件(.mp4)B的纯音频文件(.aac)B的音视频文件(.mp4)。如果是纯音频通话,则没有相应的音视频文件,如果您开通了服务端混合录制,则还会生成一个A和B的混合音视频文件(.mp4)。这些录制文件的地址在音视频通话结束之后会通过抄送服务抄送到您的服务器。

服务端录制

// 发起通话请求后,等待被叫方接受通话,触发监听‘callAccepted’事件的处理函数
  netcallInstance.on('callAccepted', (data) => {
      let self = this
      console.log('对方接听了')
      console.log(data)
      let mode = this.data.isAudioJoin ? netcallInstance.NETCALL_MODE_ONLY_AUDIO : netcallInstance.NETCALL_MODE_AUDIO_VIDEO
      this.changeCameraAndMicro(mode)
      // 开启音视频逻辑
      // 实时音录制相关
      let joinChannelParam = {}
      if (this.data.recordType || this.data.recordType === 0) {
        joinChannelParam.recordType = this.data.recordType + ''
      }
      joinChannelParam.recordAudio = this.data.recordAudio ? netcallInstance.RECORD_AUDIO_OPEN : netcallInstance.RECORD_AUDIO_CLOSE
      joinChannelParam.recordVideo = this.data.recordVideo ? netcallInstance.RECORD_VIDEO_OPEN : netcallInstance.RECORD_VIDEO_CLOSE
      Object.assign(joinChannelParam, { mode })

      // 在这里使用录制参数
      netcallInstance.startRtc(joinChannelParam)
      .then((data) => {
        console.log('开启音视频成功')
        console.log(data)
        self.livePusherContext = wx.createLivePusherContext()
        self.setData({
          loginUser: data,
          streamNeedReconnect: true
        })
      })
    })


// 响应通话请求,首先会触发‘beCalling’事件,然后弹窗让用户选择接受请求或者拒绝。如果接受请求,触发 小程序实例的 acceptCallHandler 的方法
netcallInstance.on('beCalling', (data) => {
      console.log('beCalling')
      console.log(data)
      const {caller, cid, type} = data
      showToast('text', `${caller}呼叫你`, {duration: 1000})

      // 临时保存一些信息
      this.setData({
       callingData: data,
      })

      //  展示是否接受通话的操作,如果用户接受通话,将触发下方的 acceptCallHandler
      this.showCallingGUI()
    })


//小程序实例上的方法
acceptCallHandler(event) {

  let { caller, cid, type} = this.data.callingData

  netcallInstance.response({
    caller: caller, // 主叫方
    accepted: true, // 接受通话为true ,拒绝通话为false
    type: type, // 通话类型
    cid: cid //channelId
  })
  .then(() => {
    const mode = type === netcallInstance.NETCALL_TYPE_VIDEO
      ? netcallInstance.NETCALL_MODE_AUDIO_VIDEO
      : netcallInstance.NETCALL_MODE_ONLY_AUDIO

    this.changeCameraAndMicro(mode)// 小程序实例自定义方法,声音和视频输出调整
    // 开启音视频逻辑
    let joinChannelParam = {}
    // 实时音录制相关
    if (this.data.recordType || this.data.recordType === 0) {
      joinChannelParam.recordType = this.data.recordType + ''
    }
    joinChannelParam.recordAudio = this.data.recordAudio ? netcallInstance.RECORD_AUDIO_OPEN : netcallInstance.RECORD_AUDIO_CLOSE
    joinChannelParam.recordVideo = this.data.recordVideo ? netcallInstance.RECORD_VIDEO_OPEN : netcallInstance.RECORD_VIDEO_CLOSE
    Object.assign(joinChannelParam, {mode})

    // 在这里使用录制参数
    netcallInstance.startRtc(joinChannelParam)
  })
}
// 多人音视频通话的时候,只需要在加入房间的时候传入录制参数就可以了,下面只列举和录制相关的参数
netcallInstance.joinChannel({
  // 已略去其他参数
  rtmpRecord: !options.rtmpRecord ? RTMP_RECORD.RTMP_RECORD_CLOSE : options.rtmpRecord, // 外部传入:互动直播录制
  recordAudio: !options.recordAudio ? RECORD_AUDIO.RECORD_AUDIO_CLOSE : options.recordAudio, // 外部传入:音频实时音录制
  recordVideo: !options.recordVideo ? RECORD_VIDEO.RECORD_VIDEO_CLOSE : options.recordVideo, // 外部传入:视频实时音录制
  recordType: !options.recordType ? RECORD_TYPE.RECORD_TYPE_MIX_SINGLE : options.recordType // 外部传入:录制模式  0-混单 1-只混 2-只单
})
param参数属性 类型 说明
rtmpRecord number 是否开启互动直播录制,默认不开
recordType number 录制模式,默认为混单
recordVideo number 是否开启视频录制,默认不开
recordAudio number 是否开启音频录制,默认不开
isHostSpeaker number 是否设置主讲人模式,1表示设置为主讲人,0表示不设置 (v6.8.0以上新增)