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

如何在Agora RTC React中检测远端用户的屏幕共享状态

检测Agora RTC React中的远端屏幕共享状态

要检测远端用户的屏幕共享状态,核心是通过远端用户的视频轨道属性判断;本地屏幕共享状态可直接通过useLocalScreenTrack的返回值确认,远端会自动感知到你的共享轨道。

1. 检测远端用户的屏幕共享状态

Agora的屏幕共享轨道带有sourceType: 'screen'标识,你可以通过useRemoteUsers获取远端用户列表后,遍历每个用户的视频轨道筛选正在共享屏幕的用户:

import { useRemoteUsers } from 'agora-rtc-react';

// 获取远端用户列表
const remoteUsers = useRemoteUsers();

// 筛选出正在共享屏幕的远端用户
const screenSharingRemoteUsers = remoteUsers.filter(user => {
  // 检查该用户是否存在类型为screen的视频轨道
  return user.videoTracks.some(track => track.track.sourceType === 'screen');
});

当远端用户发布/停止发布屏幕共享轨道时,remoteUsers会自动更新,组件重新渲染后,screenSharingRemoteUsers会实时反映最新状态。

2. 检测本地屏幕共享状态(供本地逻辑使用,远端自动感知)

通过useLocalScreenTrack的返回值即可判断本地是否正在共享屏幕:

import { useLocalScreenTrack, usePublish } from 'agora-rtc-react';

const [screenTrack, createScreenTrack, destroyScreenTrack] = useLocalScreenTrack();
// 本地是否正在共享屏幕:screenTrack存在则为true
const isLocalScreenSharing = !!screenTrack;

// 发布屏幕轨道,确保远端能接收到
usePublish(screenTrack ? [screenTrack] : []);

3. 监听远端屏幕共享状态变化

如果需要在远端用户开始/停止共享时执行特定逻辑,可通过useEffect监听screenSharingRemoteUsers的变化:

import { useEffect } from 'react';

useEffect(() => {
  if (screenSharingRemoteUsers.length > 0) {
    console.log('正在共享屏幕的用户:', screenSharingRemoteUsers.map(u => u.uid));
  } else {
    console.log('当前无用户共享屏幕');
  }
}, [screenSharingRemoteUsers]);

关键注意点

  • 必须使用usePublish发布屏幕轨道,否则远端无法接收到你的共享内容
  • 屏幕共享轨道与摄像头轨道属于不同的视频轨道,远端可同时接收两种轨道,通过sourceType即可区分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:25:03