实现基础功能
更新时间: 2024/08/07 16:14:03
本文为您介绍如何通过 NEMeetingKit 提供的一套简单易用的接口,快速地将音视频会议基础功能集成至现有应用中。
API 时序图
NEMeetingKit 实现在线会议的主要流程如下图所示。
初始化 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()
此文档是否对你有帮助?