实现基础功能(H5)

更新时间: 2024/11/08 15:36:07

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

API 时序图

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

sequenceDiagram
participant AppServer
participant App
participant NEMeetingSever
participant NEMeetingKit

par 集成 SDK

App->>NEMeetingKit: 引入网易会议组件

end

par 创建、绑定会议账号
AppServer->>NEMeetingSever: 创建、绑定会议账号
NEMeetingSever->>AppServer: 返回 account 和 Token
App->>AppServer: 预约会议
AppServer->>NEMeetingSever: 发起预约会议请求
NEMeetingSever->>AppServer: 返回 MeetingId
AppServer->>App: 返回 MeetingId
App->>NEMeetingKit: SDK 初始化
NEMeetingKit->>App: 初始化成功
App->>AppServer: 查询会议账号
NEMeetingSever->>AppServer: 返回 account 和 Token
end

par 账号登录
App->>NEMeetingKit: 账号登录(account+token)
NEMeetingKit->>NEMeetingSever: 登录鉴权
NEMeetingSever->>NEMeetingKit: 鉴权成功
NEMeetingKit->>App:登录成功
end

par 加入会议
App->>NEMeetingKit: 加入会议
note right of App: 显示会议 UI 界面<br>并接入会议流程
NEMeetingKit->>NEMeetingSever: 发起加入<br>会议请求
NEMeetingSever->>NEMeetingKit: 返回成功
NEMeetingKit->>App: 加入成功
end

par 离开或结束会议
App->>NEMeetingKit: 离开或结束会议
NEMeetingKit->>NEMeetingSever: 发起请求
NEMeetingSever->>NEMeetingKit: 返回成功
NEMeetingKit->>App: 结束
end

若调用接口失败,您可以通过 callback 输出进行错误排查。示例代码如下:

  const obj = {
    nickName: '', //人员昵称,长度最大为 20 字符
    meetingNum: '', //要加入会议 ID
    video: 1, // 1 开启 2 关闭
    audio: 1, // 1 开启 2 关闭
  }
  function callback(e) {
    if(e) console.log(e) // 有参数时证明方法异常
  }
  NEMeetingKit.actions.join(obj, callback)

初始化 SDK

调用 init 方法初始化会议 H5 组件,设置页面宽高。

  • 请不要重复初始化,否则 SDK 会报错。
  • 若您在初始化组件时传入了 App Key,则后续在调用其他方法时无需传入这些参数。

示例代码 如下:

JavaScript/* 初始化
  * @param width:宽度(px),为 0 则表示 100%
  * @param height:高度(px),为 0 则表示 100%
  * @param config:入会配置
  * @param callback:回调
 */
const config = {
  appKey: '', //网易会议 appkey
}
NEMeetingKit.actions.init(0, 0, config, ()=>{
  console.log('init 回调')
  // 检测浏览器兼容性
  NEMeetingKit.actions.checkSystemRequirements(
    function (err, result) {
      let str = ''
      if (err) {
        str = err
      } else {
        str = result ? "支持" : "不支持"
      }
      console.log('浏览器兼容性检测结果:', str)
    }
  )

  // 事件监听
  NEMeetingKit.actions.on("peerJoin", (members) => {
    console.log("成员加入回调", members);
  });
  NEMeetingKit.actions.on("peerLeave", (uuids) => {
    console.log("成员离开回调", uuids);
  });
  NEMeetingKit.actions.on("roomEnded", (reason) => {
    console.log("房间被关闭", reason);
  });
  NEMeetingKit.actions.addMeetingStatusListener({
    onMeetingStatusChanged: (status: NEMeetingStatus, arg, obj) => {
      console.log('会议状态变更了: ', status, arg, obj)
    },
  })
})

登录鉴权

请求 SDK 进行登录鉴权,您只有完成 SDK 登录鉴权才可以创建会议。具体参数说明如下表。

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

已登录的用户若在其他页面再次登录、创建会议或加入会议,会影响当前已登录的页面,造成互踢。

示例代码 如下:

JavaScriptconst obj = {
  accountId: '', //账号 ID
  accountToken: '', //账号 Token
}
NEMeetingKit.actions.login(obj, callback)

加入会议

在已经完成 SDK 登录鉴权的状态下,配置加入会议相关参数,调用 join 方法加入一个当前正在进行中的会议,并进行回调处理。

示例代码 如下:

JavaScript//
const obj = {
  nickName: '', //人员昵称,长度最大为 20 字符
  meetingNum: '', //要加入的会议 ID,此处应传调用服务端创建会议接口时返回的 meetingNum
  video: 1, // 1 开启 2 关闭
  audio: 1, // 1 开启 2 关闭
  showMeetingRemainingTip: false, // 是否显示会议剩余时间提醒(可选),默认为 false 关闭
  showDeviceTest: false, // 是否进行入会前音视频设备检测。开启后调用入会接口会先进行音视频设备检测。
}
NEMeetingKit.actions.join(obj, callback)

监听成员进出会议房间状态

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

建议在初始化回调中进行监听,在销毁 SDK 之前取消监听。

示例代码 如下:

JavaScriptNEMeetingKit.actions.on("peerJoin", (members) => {
  console.log("成员加入回调", members);
});
NEMeetingKit.actions.on("peerLeave", (uuids) => {
  console.log("成员离开回调", uuids);
});
NEMeetingKit.actions.on("roomEnded", (reason) => {
  console.log("房间被关闭", reason);
});

获取会中信息

在已经完成 SDK 登录鉴权且成功加入会议的状态下,获取会议及与会成员的基本信息。

示例代码 如下:

JavaScriptconst NEMeetingInfo = NEMeetingKit.actions.NEMeetingInfo // 会议基本信息
const memberInfo = NEMeetingKit.actions.memberInfo // 当前成员信息
const joinMemberInfo = NEMeetingKit.actions.joinMemberInfo // 入会成员信息

销毁 SDK

调用 destroy 方法销毁 SDK,退出会议。

销毁 SDK 后,该节点不会销毁,仍保留一部分样式,不会影响页面结构。

示例代码 如下:

JavaScript// 取消监听
NEMeetingKit.actions.off("peerJoin");
NEMeetingKit.actions.off("peerLeave");
NEMeetingKit.actions.off("roomEnded");
NEMeetingKit.actions.removeMeetingStatusListener();

// 销毁
NEMeetingKit.actions.destroy()
此文档是否对你有帮助?
有帮助
去反馈
  • API 时序图
  • 初始化 SDK
  • 登录鉴权
  • 加入会议
  • 监听成员进出会议房间状态
  • 获取会中信息
  • 销毁 SDK