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

如何使用Agora实现同一房间内单次仅2人可开启视频通话

答案

完全可以实现。你只需要结合Agora提供的基础音视频控制API,加上自行实现的房间状态管控逻辑即可完成,不需要额外接入Agora的增值服务。

实现逻辑说明

Agora本身没有内置「最大视频推流人数限制」的成品能力,这个规则属于业务自定义逻辑,需要你在自己的服务层做管控,Agora提供的API用来完成底层的音视频开关、状态监听能力。

具体实现步骤
  • 维护房间视频计数状态
    在你的业务服务端维护房间维度的两个核心数据:current_video_count(当前已开启视频推流的人数,初始值为0,上限为2)、active_video_uids(当前已开视频的用户ID列表)。不要把这个计数放在客户端维护,避免被篡改导致规则失效。房间内的信令同步可以用Agora RTM或者你自己的Socket服务实现。
  • 开启视频前置校验
    所有客户端触发开启视频操作时,先不直接调用Agora的视频开启接口,先向服务端发送开启申请:
    • 若current_video_count < 2:服务端返回申请通过,将申请用户ID加入active_video_uids,current_video_count自增1,同时广播最新的计数和用户列表给房间内所有在线成员。客户端收到同意通知后,调用enableLocalVideo(true)、muteLocalVideoStream(false)开启本地摄像头并推流。
    • 若current_video_count == 2:服务端返回申请驳回,客户端弹出提示告知用户当前视频开启名额已满,等待其他人关闭后再尝试。
  • 视频关闭状态同步
    两种场景需要触发计数更新:
    • 用户主动关闭视频:客户端调用enableLocalVideo(false)停止推流后,向服务端上报关闭事件,服务端将用户ID从active_video_uids移除,current_video_count自减1,广播最新状态给房间所有用户。
    • 用户异常退出:监听Agora服务端回调的onUserOffline事件,或者通过你的业务心跳检测到用户退出房间时,若退出用户在active_video_uids列表内,自动触发计数减1操作,同步状态到所有在线用户。
  • 可选优化:申请队列
    如果需要支持用户排队获取视频开启权限,可以在服务端额外维护一个video_apply_queue队列,用户申请视频被驳回时自动加入队列,当有名额释放时,优先通知队列头部的用户可以开启视频,无需用户手动重复申请。
用到的核心Agora API
  • 本地视频控制:enableLocalVideo、muteLocalVideoStream
  • 远端流状态监听:onRemoteVideoStateChanged、onUserOffline
  • 信令传输(如果使用Agora RTM):sendMessageToChannel、onChannelMessageReceived

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:36:03