实时互动频道
更新时间: 2024/06/24 17:29:09
实时互动频道,是基于圈组,在文字基础上新增的,用于提供产品能力、丰富社区运营、提升用户活跃的,适用于百万用户量级、多场景、多能力的在线实时互动的多媒体插件。
网易云信 NIM SDK 通过插件的方式引入实时互动频道模块,通过接口的融合,帮助用户在圈组中实现在线实时互动,用户无需独立对接。
实时互动频道模块(QChatMedia
)主要通过 QChatMediaServiceInterface
接口实现实时互动频道模块的初始化、登录、连接以及频道内多样的音视频通话能力。
本文介绍如何在圈组中引入实时互动频道模块,并在实时互动频道中实现实时音视频通话功能。
技术原理
图中的圈组服务器并非传统意义上的服务器,它是社群本身。所有的内容、兴趣、话题、关系都是以此为基础进行发展的。在圈组的场景下,任何行为的开始前都应该先创建一个圈组服务器。圈组详细信息,请参见圈组介绍。
实时互动频道与频道的关联逻辑
实时互动频道是频道的一种类型,通过参数 EChannelInfoType
来区分(media
= 1)。
频道的管理需要在 QChatChannelServiceInterface
中进行,包括创建、删除实时互动频道等,具体请参见频道管理。
实时互动频道内的音视频相关功能需要在实时互动频道模块( QChatMedia
)中实现。
使用实时互动频道相关接口,需要拥有实时互动相关权限(具体权限类型请参见 QChatRoleAuth
),可通过更新身份组来实现。
实时互动频道可见机制
实时互动频道的可见机制与频道相同,分为以下两种情况:
- 如果实时互动频道为公开频道,那么只要用户未被加入频道黑名单,实时互动频道就对其可见。
- 如果实时互动频道为私密频道,那么用户需被加入频道白名单,实时互动频道才对其可见。
频道黑白名单相关操作,请参见频道管理。
实现方法
本节以实时互动频道创建者与实时互动频道成员之间的交互为例,介绍在圈组中实现音视频通话功能的流程。
前提条件
- 已开通实时互动频道功能。实时互动频道需要在开通圈组功能的基础上额外开通后才能使用。
- 已接入圈组,并创建或加入圈组服务器和身份组。
- 已创建或加入实时互动频道。具体请参见频道管理。
时序图
实现流程
- 引入实时互动频道功能插件(
QChatMedia
)。
需要在初始化参数中注入 neroom-web-sdk
。neroom-web-sdk
以 npm 包的形式提供,请先使用 npm 命令安装。
示例代码如下:
import QChatSDK from 'nim-web-sdk-ng/dist/QCHAT_BROWSER_SDK'
import WebRoomkit from 'neroom-web-sdk'
const qchat = new QChatSDK({
appkey: '{{YOUR_APP_KEY}}',
token: '{{YOUR_TOKEN}}',
account: '{{YOUR_ACCOUNT}}',
linkAddresses: ['{{YOUR_ADDRESSES}}'],
debugLevel: 'debug'
},{QChatMedia:{neroom: WebRoomkit}})
- 调用
QChatInterface
的login
方法登录圈组服务端。示例代码如下:
await qchat.login()
3.实时互动频道创建者通过调用 updateServerRole
方法修改服务器身份组并设置实时互动相关权限。示例代码如下:
await qchat.qchatRole.updateServerRole({
serverId:'{{YOUR_SERVERID}}',
roleId:'{{ROLEID}}',
auths:{
manageRole:'allow',
RTCChannelConnect:'allow',
RTCChannelOpenMicrophone:'allow',
...
}
})
实时互动频道创建者需要拥有管理身份组的权限(manageRole
)。具体请参见身份组管理。
- 调用
initQChatMedia
方法初始化QChatMedia
模块并通过loginByIM
登录QChatMedia
模块。示例代如下:
await qchat.qchatMedia.initQChatMedia()
await qchat.qchatMedia.loginByIM()
- 调用
connectChannel
方法连接已创建的实时互动频道。示例代码如下:
await qchat.qchatMedia.connectChannel({
channelId:'{{YOUR_SERVERID}}',
channelId:'{{YOUR_CHANNELID}}',
})
-
在实时互动频道中实现具体的音视频功能(以打开音频为例)。
a. 在已连接实时互动频道的前提下调用
addRTCChannelListener
方法添加成员音频状态(memberAudioMuteChanged
)监听事件。b. 确认当前账号有权限后调用
unMuteAudio
方法打开成员音频。c. 触发回调,服务器返回成员音频状态信息。
await qchat.qchatMedia.addRTCChannelListener()
qchat.on('memberAudioMuteChanged',(data)=>{
const {memberAccId,mute,operateByAccId} = data
})
await qchat.qchatMedia.unMuteAudio({accid:'ACCID'})
- 调用
disconnectChannel
方法与实时互动频道断开连接。示例代码如下:
await qchat.qchatMedia.disconnectChannel()
API 参考
以下为本文涉及的实时互动频道相关相关 API。
API |
说明 |
---|---|
initQChatMedia |
初始化实时互动频道模块 |
loginByIM |
登录实时互动频道模块 |
connectChannel |
连接实时互动频道 |
disconnectChannel |
取消连接实时互动频道 |
addRTCChannelListener |
添加实时互动频道事件监听 |
removeRTCChannelListener |
移除实时互动频道监听 |
unMuteAudio |
打开成员音频 |
muteAudio |
关闭成员音频 |
更多实时互动频道相关接口请参见QChatMediaServiceInterface
。