
参与者(Participant)
功能加入和参加视频会议的人员,具有标准用户权限和能力
什么是参与者?
参与者(也称为与会者或成员)是加入视频会议的任何人。与主持人不同,参与者拥有标准用户权限和对会议设置的有限控制。参与者可以看到和听到其他与会者,通过音频/视频进行交流,共享内容(如果被允许),并使用协作功能,但不能管理会议范围的设置或调节其他参与者。
参与者角色是大多数加入会议的用户的默认角色,主持人能够根据需要将参与者提升为联合主持人或分配额外的权限。
参与者能力
标准权限
所有参与者可用的典型能力:
- 音频/视频控制:静音/取消静音自己的麦克风和打开/关闭摄像头
- 查看其他参与者:查看视频流和参与者列表
- 屏幕共享:共享屏幕(如果主持人已启用此权限)
- 聊天消息:向所有人或特定参与者发送消息(基于主持人设置)
- 反应:使用表情符号反应、举手或其他非语言提示
- 查看共享内容:查看其他人共享的屏幕、演示文稿或文件
- 重命名自己:更改自己的显示名称
- 离开会议:随时退出会议
受限操作
参与者在没有主持人权限的情况下无法执行的操作:
- 无法静音其他参与者(除了自己)
- 无法将参与者从会议中移除
- 无法从等候室准入参与者
- 无法锁定会议或为其他人结束会议
- 无法开始或停止录制(在大多数平台上)
- 无法创建或管理分组讨论室
- 无法更改会议范围的设置
- 无法提升或降级其他参与者
参与者类型
经过身份验证的参与者
使用经过验证的身份加入的参与者:
- 组织成员:主持人组织的员工或成员
- 受邀宾客:拥有日历邀请或访问链接的外部参与者
- 注册用户:在平台上拥有帐户的参与者
// 使用身份验证加入会议
const session = await join({
url: meetingUrl,
token: authenticatedUserToken,
userName: 'John Doe',
userData: {
role: 'participant',
email: '[email protected]',
department: 'Engineering'
}
});匿名参与者
在没有正式身份验证的情况下加入的参与者:
- 访客用户:通过公共链接加入,无需帐户
- 有限可见性:可能显示电子邮件域而不是完整详细信息
- 额外筛选:可能需要从等候室获得主持人批准
特殊参与者类型
- 演示者:具有提升权限以共享内容的参与者(在网络研讨会中常见)
- 小组成员:网络研讨会式会议中的演讲者,具有观众可见性
- 与会者:大型活动中的仅查看参与者(无法取消静音或共享)
- 口译员:提供实时语言翻译的参与者
参与者状态管理
连接状态
参与者可以处于各种连接状态:
- 加入中:正在连接到会议的过程中
- 等待:在等候室等待主持人准入
- 活跃:已连接并参与会议
- 离开:已加入但不活跃(可能在其他应用/标签页中)
- 重新连接中:临时断开连接,尝试重新加入
- 已离开:已退出会议
// 跟踪参与者状态变化
socket.on('participant-state-changed', ({ participantId, state, reason }) => {
updateParticipantUI(participantId, {
state: state, // 'active', 'away', 'reconnecting'
lastActivity: Date.now()
});
if (state === 'reconnecting') {
showNotification(`${participantName} 正在重新连接...`);
}
});媒体状态
- 音频已静音/未静音:麦克风状态
- 视频开/关:摄像头状态
- 屏幕共享:当前是否正在共享屏幕
- 举手:请求发言
- 说话中:当前正在说话(通过音频电平检测)
参与者列表和界面
参与者面板
大多数视频会议应用程序在专用面板中显示参与者:
- 排序列表:按字母顺序或加入时间排序,主持人通常首先显示
- 状态指示器:显示静音状态、举手、屏幕共享的图标
- 音频电平:谁正在说话的视觉指示器
- 连接质量:网络强度指示器
- 快速操作:用于直接消息、固定视频等的按钮
// 参与者数据结构
const participant = {
id: 'user-123',
name: 'John Doe',
role: 'participant',
isHost: false,
audio: {
muted: false,
level: 0.75 // 0-1 范围
},
video: {
enabled: true,
quality: 'high'
},
connectionQuality: 'good', // 'excellent', 'good', 'poor', 'reconnecting'
joinTime: 1640000000000,
handRaised: false,
reactions: [],
screenSharing: false
};网格视图 vs 画廊视图
- 网格视图:所有参与者的大小相等的磁贴
- 演讲者视图:活跃演讲者的大视图,其他人的缩略图
- 画廊视图:显示所有参与者的分页网格
- 自定义布局:聚焦特定参与者
参与者互动
非语言交流
参与者使用各种非语言方法进行交流:
- 举手:请求发言或提问
- 表情符号反应:竖起大拇指、鼓掌、心形等
- 状态更新:离开、请勿打扰、通话中
- 自定义反应:特定于平台的动画反应
聊天和消息
参与者可以发送具有各种范围的消息:
- 公开聊天:所有参与者都可见的消息
- 私人消息:发送给特定参与者的直接消息
- 仅主持人消息:仅发送给主持人/调节者的问题或注释
投票和问答
- 回答投票:回应调查或问题
- 提交问题:在问答面板中提问
- 为问题投票:对其他参与者的问题投票
WebRTC 中的实现
将参与者添加到会议
// 服务器端:将参与者添加到会议
function addParticipant(meetingId, userId, userData) {
const participant = {
id: userId,
name: userData.name,
email: userData.email,
role: 'participant',
joinTime: Date.now(),
mediaState: {
audioMuted: true, // 默认静音
videoEnabled: false
},
permissions: getParticipantPermissions(meetingId)
};
// 添加到会议参与者列表
meetings.get(meetingId).participants.set(userId, participant);
// 通知现有参与者
broadcastToMeeting(meetingId, {
type: 'participant-joined',
participant: participant
}, userId); // 排除加入的用户
// 向新用户发送参与者列表
sendToUser(userId, {
type: 'meeting-joined',
meeting: getMeetingInfo(meetingId),
participants: Array.from(meetings.get(meetingId).participants.values())
});
return participant;
}参与者权限
// 根据会议设置定义参与者权限
function getParticipantPermissions(meetingId) {
const settings = getMeetingSettings(meetingId);
return {
canShareScreen: settings.allowParticipantScreenShare,
canChat: settings.chatEnabled,
canSendPrivateMessages: settings.allowPrivateChat,
canRaiseHand: true,
canReact: settings.reactionsEnabled,
canRenameself: settings.allowRename,
canUnmuteSelf: settings.allowUnmute || false,
canEnableVideo: settings.allowVideo !== false
};
}参与者限制
特定于平台的最大值
- Zoom:最多 1,000 名参与者(因计划而异),屏幕上显示 49 个视频
- Google Meet:最多 500 名参与者(企业版),网格中显示 49 个磁贴
- Microsoft Teams:最多 10,000 名仅查看的与会者(网络研讨会模式),1,000 名互动参与者
- Webex:最多 100,000 名仅查看,1,000 名互动
性能考虑
- 视频渲染:浏览器对同时视频解码的限制(通常为 25-49)
- 带宽:更多参与者 = 更多要接收的流(在 P2P 或 SFU 中)
- CPU 使用率:每个视频解码都需要 CPU 资源
- 界面复杂性:大型参与者列表需要虚拟滚动和分页
参与者最佳实践
会议礼仪
- 准时加入:提前几分钟到达以测试设备
- 不说话时静音:减少背景噪音
- 使用视频:启用摄像头以更好地参与(适当时)
- 专业背景:使用虚拟背景或确保环境整洁
- 着装得体:着装应与面对面会议相同
- 最小化干扰:关闭不必要的应用程序,将手机静音
参与技巧
- 使用反应:提供非语言反馈以避免中断
- 举手:等待被认可而不是打断
- 谨慎使用聊天:分享链接和提问,而不干扰流程
- 注意力集中:不要过度多任务,保持参与
参与者的无障碍功能
- 隐藏式字幕:为听力受损者启用实时字幕
- 屏幕阅读器:支持视觉受损的参与者
- 键盘快捷键:快速访问静音、摄像头、举手
- 高对比度模式:视觉无障碍选项
- ASL 翻译:为聋人参与者固定口译员