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
相关产品推荐
相关产品推荐

