实现基础功能

更新时间: 2024/08/07 16:14:03

本文为您介绍如何通过 NEMeetingKit 提供的一套简单易用的接口,快速地将音视频会议基础功能集成至现有应用中。

API 时序图

NEMeetingKit 实现在线会议的主要流程如下图所示。

meeting_flow_chart.jpg

初始化 SDK

调用 initSDK 方法初始化会议小程序组件。

请不要重复初始化,否则 SDK 会报错。

示例代码如下:

// 通过小程序提供的 this.selectComponent() 方法获取组件实例
this.meetingComponent = this.selectComponent('#meeting-component')

/**
  * 初始化
  * @param param
  * @param param.debug 是否开启调试模式
  * @param param.appKey appKey
  * @param param.baseDomain [可选] 发起请求的domain,若未填则默认为https://roomkit.netease.im
  * @param param.offChatRoom [可选] 关闭聊天室功能,默认开启
  * @param param.defaultDirectionalTags [可选] 聊天室定向发送消息的标签组
  * @param param.enableOrientChat [可选] 是否开启聊天室定向发送消息模式,默认关闭
  * @param param.isHideMute [可选] 小程序最小化后是否需要后台关闭音视频,默认开启
  * @param param.enableRealtimeLog [可选] 是否开启实时日志上报(微信公众号后台查看),默认开启
  * @param param.imPrivateConf [可选] IM SDK私有化配置,仅限于私有化配置时使用
  * @param param.neRtcServerAddresses [可选] G2 SDK私有化配置,仅限于私有化配置时使用
  */
this.meetingComponent.initSDK({
  debug,
  appKey,
  baseDomain,
  defaultDirectionalTags,
  enableOrientChat,
  isHideMute,
  enableRealtimeLog,
  imPrivateConf,
  neRtcServerAddresses
})

登录鉴权

请求 SDK 进行登录鉴权,您只有完成 SDK 登录鉴权才可以创建会议。

登录方式 说明 接口 参数 其他
Token 登录 - NEMeetingKit#loginWithToken accountId、accountToken 账号信息需要从网易会议服务端获取,由您自行实现相关业务逻辑。
匿名 登录 - NEMeetingKit#anonymousJoinMeeting 账号信息由网易会议服务端生成。

示例代码如下:

// 使用账号 ID 和 Token 登录
const obj = {
const params = {
  accountId: '', //账号ID
  accountToken: '', //账号Token,特别提醒token后面有两个==占位符,请一并带上
}
this.meetingComponent.loginWithToken(params)
// 匿名登录
this.meetingComponent.anonymousJoinMeeting()

已经登录的用户在其他页面登录或加入会议,会影响当前已经加入的会议页面,造成互踢。

加入会议

在已经完成 SDK 登录鉴权的状态下,调用 joinRoom 方法加入一个当前正在进行中的会议。

示例代码如下:

// 聊天室标签组需要转成数组,再以字符串的形式传入
const chatroomTag = this.data.config.chatroomTag
  .split(/[,,]/)
  .filter((item) => !!item)

const obj = {
  role: 'member', // 成员角色,小程序暂只支持该角色
  meetingId: '', // 要加入的会议 ID,此处应传调用服务端创建会议接口时返回的 meetingNum
  nickName: '', //人员昵称
  openCamera: false, // 入会是否打开摄像头,true开启false关闭
  openMicrophone: false, // 入会是否打开麦克风,true开启false关闭
  initialProperties: {
    tag: {
      value: '', // 用户在会议中的标签
    },
    chatroomTag: {
      value: JSON.stringify(chatroomTag), // 聊天室标签组
    }
  } 
}
this.meetingComponent.joinRoom(obj)

监听成员及会议房间状态

通过注册成员及会议房间状态回调接口,监听成员及会议房间状态的变更通知,从而实现会议界面上实时更新当前会议状态,包括参会人的加入或离开。

示例代码如下:

// wxml
<NEMeeting 
  id="meeting-component" 
  bindmeetingClosed="onMeetingClosed"
  binddisconnect="onDisconnect"
  bindkicked="onKicked"
  bindleave="leaveRoom" 
  bindonLoginStateChange="onLoginStateChange">
</NEMeeting>


// 登录状态改变事件 unlogin:未登录,logining:登录中,logined:已登录,logouting:正在登出
}
onLoginStateChange(status) {
  console.log(status.detail, 'login status')
  if (status.detail === 'logined') {
    const { role, meetingId, nickName, openCamera, openMicrophone, tag } =
      this.data.config
    let chatroomTag = this.data.config.chatroomTag
      .split(/[,,]/)
      .filter((item) => !!item)
    const initialProperties = {
      // initialProperties里的key名称不可更改,自定义属性需要跟服务端确认统一添加
      tag: {
        // 用户默认标签
        value: tag,
      },
      chatroomTag: {
        // 聊天室标签组,value需要转字符串
        value: JSON.stringify(chatroomTag),
      },
    }
    this.meetingComponent
      .joinRoom({
        role,
        meetingId,
        nickName,
        openCamera,
        openMicrophone,
        initialProperties,
      })
      .catch(async (err) => {
        // 加入失败后需要先退出登录
        await this.meetingComponent.logout()
        let errMsg = '加入失败'
        switch (err.code) {
          case 3104:
          case 1004:
            errMsg = '会议不存在'
            break
          case 1020:
            errMsg = '小程序暂不支持入会密码,请使用其他客户端入会'
            break
          default:
            console.log(err, '加入失败')
        }
      })
  }
},
// 离开房间的一些处理在这里
async leaveRoom() {
  console.log('收到离开会议')
  try {
    this.meetingComponent.leaveRoom()
    this.meetingComponent.logout()
  } catch (error) {
    console.error('meeting/index.js leaveRoom ', error)
  } finally {
    wx.navigateBack()
  }
},
// 会议结束
onMeetingClosed() {
  console.log('onMeetingClosed')
  this.meetingComponent.destroy()
},
// 当前会议连接已断开
onDisconnect() {
  console.log('onDisconnect')
},
// 因被主持人移出或切换至其他设备被踢出
kicked() {
  console.log('kicked')
  this.meetingComponent.destroy()
},
 

离开会议

调用 leaveRoom 方法离开会议。

示例代码如下:

this.meetingComponent.leaveRoom()

退出登录

调用 logout 方法退出登录当前会议账号。

示例代码如下:

this.meetingComponent.logout()

销毁 SDK

调用 destroy 方法销毁会议 MiniApp 组件,退出会议。

示例代码如下:

this.meetingComponent.destroy()
此文档是否对你有帮助?
有帮助
去反馈
  • API 时序图
  • 初始化 SDK
  • 登录鉴权
  • 加入会议
  • 监听成员及会议房间状态
  • 离开会议
  • 退出登录
  • 销毁 SDK