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

Flutter集成Agora实现双端直播:讲师可查看所有观众摄像头的实现咨询

基于Agora实现讲师-观众双端直播通话的实现方案

核心架构逻辑

  • 两个App需使用同一个Agora App ID,加入同一个频道实现互通
  • 放弃默认的主播/观众二元角色设置,改用自定义流订阅规则实现画面可见性控制,避免默认权限的冲突问题
  • 核心流规则:
    • 讲师端默认发布自身音视频流,同时自动订阅频道内所有其他用户的流,即可查看全部观众的摄像头画面
    • 观众端仅允许订阅标记为「讲师」UID的音视频流,禁止订阅其他观众的流,保证观众只能看到讲师画面

核心实现步骤

1. 基础环境初始化

  • 两端都先调用createAgoraRtcEngine初始化RTC实例,传入你提前申请的Agora App ID
  • 调用setChannelProfile设置频道模式为直播模式(CHANNEL_PROFILE_LIVE_BROADCASTING)

2. 加入频道前的权限配置

该逻辑全部在客户端侧即可完成,不需要额外搭建后台服务

  • 讲师端配置:
    • 调用setClientRole设置角色为CLIENT_ROLE_BROADCASTER
    • 调用enableAudio/enableVideo开启本地音视频采集,调用setupLocalVideo绑定本地预览视图
  • 观众端配置:
    • 如果需要观众上传摄像头画面供讲师查看,调用setClientRole设置角色为CLIENT_ROLE_BROADCASTER;如果不需要观众上传播音视频,可设置为CLIENT_ROLE_AUDIENCE
    • 调用setSubscribeAudioAllowlist/setSubscribeVideoAllowlist方法,仅把讲师的固定UID加入订阅白名单,观众端就会自动过滤其他观众的音视频流

3. 流状态监听处理

  • 讲师端监听onUserJoined回调,当有观众加入频道并发布流后,调用setupRemoteVideo绑定对应视图即可显示该观众的摄像头画面
  • 观众端监听onUserJoined回调,仅当加入的用户UID为预设的讲师UID时,才调用setupRemoteVideo绑定视图显示讲师画面,其他用户的加入事件直接忽略即可

4. 常规异常处理

  • 监听onNetworkQuality回调,实时向用户展示当前网络状态,弱网下自动触发Agora流降级策略,优先保障通话流畅度
  • 监听onLeaveChannel回调,用户退出频道时及时销毁对应视频视图,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:48:02