You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenTok中获取并展示视频通话参会人员列表(iOS Swift场景)

OpenTok iOS SDK 获取视频通话参会人员名单方案

核心逻辑

OpenTok 中所有加入会话的用户都会对应一个 OTConnection 对象,当前活跃的 OTSession 实例会实时维护所有在线连接的列表,直接从该实例中提取数据即可,无需额外调用后端接口。

实现步骤

1. 维护会话实例

集成视频功能时你已经完成了 OTSession 的初始化,建议将其声明为当前视图控制器的全局属性,方便后续取用:

// 全局持有当前视频会话实例
var currentSession: OTSession?

2. 点击「参与者」按钮时提取名单

从 currentSession 中取已连接的用户数据,按需解析后渲染列表即可:

// 参与者按钮点击事件
@IBAction func tapParticipantButton(_ sender: UIButton) {
    guard let session = currentSession, 
          let remoteConnections = session.connections as? [OTConnection] else {
        return
    }
    var participantList: [ParticipantInfo] = []
    // 先添加当前用户自身信息(session.connections默认不包含本地连接)
    if let selfConnection = session.connection {
        let selfInfo = convertConnectionToUserModel(connection: selfConnection, isLocalUser: true)
        participantList.append(selfInfo)
    }
    // 添加其他参会者信息
    for remoteConn in remoteConnections {
        guard remoteConn.connectionId != session.connection?.connectionId else { continue }
        let userInfo = convertConnectionToUserModel(connection: remoteConn, isLocalUser: false)
        participantList.append(userInfo)
    }
    // 此处调用你自己的列表弹窗逻辑展示participantList即可
    showParticipantListView(dataList: participantList)
}
// 自定义工具方法:将OTConnection转换为你的业务用户模型
func convertConnectionToUserModel(connection: OTConnection, isLocalUser: Bool) -> ParticipantInfo {
    var userModel = ParticipantInfo()
    userModel.connectionId = connection.connectionId
    userModel.isCurrentUser = isLocalUser
    // 解析用户自定义信息:生成OpenTok Token时传入的自定义数据(如用户ID、昵称)会存在connection.data中
    if let userDataStr = connection.data,
       let jsonData = userDataStr.data(using: .utf8),
       let userDict = try? JSONSerialization.jsonObject(with: jsonData) as? [String: Any] {
        userModel.userId = userDict["user_id"] as? String
        userModel.nickname = userDict["nickname"] as? String
        userModel.avatarUrl = userDict["avatar"] as? String
    }
    return userModel
}

优化建议

  • 可以通过监听 OTSessionDelegate 的回调实时更新本地缓存的参会者列表,避免每次点击按钮都重新遍历:
    • 有新用户加入会话:session:didConnect:
    • 有用户离开会话:session:didDisconnect:
  • 取数据前请确保会话已经连接成功,未完成连接的状态下 connections 数组为空

内容的提问来源于stack exchange,提问作者Moula Moulali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 14:39:03