实时互动频道

更新时间: 2023/07/21 06:56:54

实时互动频道,是基于圈组,在文字基础上新增的,用于提供产品能力、丰富社区运营、提升用户活跃的,适用于百万用户量级、多场景、多能力的在线实时互动的多媒体插件。

网易云信 NIM SDK 通过插件的方式引入实时互动频道模块,通过接口的融合,帮助用户在圈组中实现在线实时互动,用户无需独立对接。

实时互动频道模块(QChatMedia)主要通过 QChatMediaServiceInterface 接口实现实时互动频道模块的初始化、登录、连接以及频道内多样的音视频通话能力。

  • 实时互动频道相关能力为增值服务,需单独开通,您可通过云信官网提供的联系方式咨询商务经理开通。
  • 目前实时互动频道只支持 RTC 相关服务,其他服务即将上线,敬请期待!

本文介绍如何在圈组中引入实时互动频道模块,并在实时互动频道中实现实时音视频通话功能。

技术原理

图中的圈组服务器并非传统意义上的服务器,它是社群本身。所有的内容、兴趣、话题、关系都是以此为基础进行发展的。在圈组的场景下,任何行为的开始前都应该先创建一个圈组服务器。圈组详细信息,请参见圈组介绍

实时互动频道与频道的关联逻辑

实时互动频道是频道的一种类型,通过参数 EChannelInfoType 来区分(media = 1)。

频道的管理需要在 QChatChannelServiceInterface 中进行,包括创建、删除实时互动频道等,具体请参见频道管理

实时互动频道内的音视频相关功能需要在实时互动频道模块( QChatMedia )中实现。

使用实时互动频道相关接口,需要拥有实时互动相关权限(具体权限类型请参见 QChatRoleAuth),可通过更新身份组来实现。

实时互动频道可见机制

实时互动频道的可见机制与频道相同,分为以下两种情况:

  • 如果实时互动频道为公开频道,那么只要用户未被加入频道黑名单,实时互动频道就对其可见。
  • 如果实时互动频道为私密频道,那么用户需被加入频道白名单,实时互动频道才对其可见。

频道黑白名单相关操作,请参见频道管理

实现方法

本节以实时互动频道创建者与实时互动频道成员之间的交互为例,介绍在圈组中实现音视频通话功能的流程。

前提条件

  • 已开通实时互动频道相关服务,若未开通,可通过云信官网提供的联系方式咨询商务经理开通。
  • 已接入圈组,并创建或加入圈组服务器和身份组。
  • 已创建或加入实时互动频道。具体请参见频道管理

时序图

uml diagram

实现流程

  1. 引入实时互动频道功能插件(QChatMedia)。

需要在初始化参数中注入 neroom-web-sdkneroom-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}})
  1. 调用 QChatInterfacelogin方法登录圈组服务端。示例代码如下:
  await qchat.login()

3.实时互动频道创建者通过调用 updateServerRole 方法修改服务器身份组并设置实时互动相关权限。示例代码如下:

   await qchat.qchatRole.updateServerRole({
       serverId:'{{YOUR_SERVERID}}',
       roleId:'{{ROLEID}}',
       auths:{
           RTCChannelConnect:'allow',
           ...
       }
   })

实时互动频道创建者需要拥有管理身份组的权限(manageRole)。具体请参见身份组管理

  1. 调用 initQChatMedia 方法初始化 QChatMedia 模块并通过 loginByIM 登录 QChatMedia 模块。示例代如下:
 await qchat.qchatMedia.initQChatMedia()
 await qchat.qchatMedia.loginByIM()
  1. 调用 connectChannel 方法连接已创建的实时互动频道。示例代码如下:
 await qchat.qchatMedia.connectChannel({
   channelId:'{{YOUR_SERVERID}}',
   channelId:'{{YOUR_CHANNELID}}',
 })
  1. 在实时互动频道中实现具体的音视频功能(以打开音频为例)。

    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'})
  1. 调用 disconnectChannel 方法与实时互动频道断开连接。示例代码如下:
await qchat.qchatMedia.disconnectChannel()

API 参考

以下为本文涉及的实时互动频道相关相关 API。

API
说明
initQChatMedia 初始化实时互动频道模块
loginByIM 登录实时互动频道模块
connectChannel 连接实时互动频道
disconnectChannel 取消连接实时互动频道
addRTCChannelListener 添加实时互动频道事件监听
removeRTCChannelListener 移除实时互动频道监听
unMuteAudio 打开成员音频
muteAudio 关闭成员音频

更多实时互动频道相关接口请参见QChatMediaServiceInterface

此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 实时互动频道与频道的关联逻辑
  • 实时互动频道可见机制
  • 实现方法
  • 前提条件
  • 时序图
  • 实现流程
  • API 参考