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

agora-rtc-react本地屏幕共享已实现,如何推送给远端用户?

解决Agora RTC React屏幕共享远端不可见问题

你的核心问题是仅创建了本地屏幕共享轨道,但未将其发布到Agora频道,同时远端组件也未处理屏幕共享轨道的渲染。以下是具体修复方案:

1. 发布屏幕共享轨道到频道

在现有代码中添加轨道发布/取消发布逻辑,确保远端用户能接收到屏幕共享流:

// 新增:发布/取消发布屏幕共享轨道
useEffect(() => {
  const handleScreenTrackPublish = async () => {
    if (screenShareOn && screenTrack) {
      try {
        // 发布轨道(支持单轨道或音视频轨道数组)
        await client.publish(Array.isArray(screenTrack) ? screenTrack : [screenTrack]);
      } catch (err) {
        console.error("发布屏幕共享失败:", err);
        setScreenShareOn(false);
      }
    } else if (!screenShareOn && screenTrack) {
      // 停止共享时取消发布并销毁轨道
      if (Array.isArray(screenTrack)) {
        screenTrack.forEach(track => {
          client.unpublish(track);
          track.close();
        });
      } else {
        client.unpublish(screenTrack);
        screenTrack.close();
      }
    }
  };

  handleScreenTrackPublish();
}, [screenShareOn, screenTrack, client]);

2. 远端组件处理屏幕共享轨道

修改RemoteUsers组件,区分普通摄像头视频和屏幕共享视频并渲染:

import { useRemoteVideoTracks } from "agora-rtc-react";

const RemoteUsers = ({ remoteUsers }) => {
  const { videoTracks } = useRemoteVideoTracks(remoteUsers);

  return (
    <div className="remote-container">
      {videoTracks.map(track => {
        // 判断是否为屏幕共享轨道(Agora SDK中屏幕共享轨道的source为'screen')
        const isScreenShare = track.source === "screen";
        
        return (
          <div 
            key={track.trackId} 
            style={{
              width: isScreenShare ? "100%" : "250px",
              height: isScreenShare ? "100%" : "180px",
              margin: "8px",
              border: isScreenShare ? "2px solid #2196F3" : "none"
            }}
          >
            <RemoteVideoTrack track={track} play={true} />
          </div>
        );
      })}
    </div>
  );
};

export default RemoteUsers;

关键说明

  • 发布轨道是远端可见的核心:只有通过client.publish将轨道推送到Agora服务器,远端用户才能接收到流。
  • 轨道销毁:停止共享时务必调用track.close()释放浏览器资源,避免内存泄漏。
  • 轨道区分:通过track.source属性可精准识别屏幕共享轨道,Agora SDK会自动为屏幕共享轨道标记该属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:23:29