实现基础功能(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()
此文档是否对你有帮助?