마지막 업데이트 2026-07-29
화면 공유 (host→guest) — 코드레벨 동작 흐름의 핵심을 설명식으로 먼저 안내합니다. 기술적 결론과 원문 근거는 아래 본문에 보존되어 있습니다.
치료사(호스트)가 자기 화면을 아동(게스트)에게 실시간 공유하는 기능. getDisplayMedia로 화면을 캡처해 V1 P2P(#11, connectionId="screen-share")로 전송한다.
role==="host"). 게스트는 수신 전용. 시그널링은 소켓, 미디어는 useWebRTC P2P(#11)를 그대로 재사용.
"게스트 준비 후 트랙 추가" 순서: 호스트가 stream을 먼저 잡아두고(start2), 게스트가 P2P 연결을 깔고 ready를 보내야(ready) 호스트가 트랙을 add한다. 게스트 준비 전 add하면 트랙이 유실될 수 있다.
getDisplayMedia({video: VIDEO_CONSTRAINTS, audio: true}) — 오디오 포함 시도(브라우저 미지원이면 영상만 진행, 경고).applyConstraints(LOW_RESOLUTION_CONSTRAINTS)로 낮춤(아동 기기/대역폭 보호).isAudioEnabled 토글로 제어.webRTC.connect() → stream의 video/audio 트랙을 webRTC.addTrack(P2P 송신, onnegotiationneeded #11).track.onended(사용자가 브라우저 UI에서 공유 중지) → stopScreenShare() 자동 호출.host-screen-share-stop2 → 게스트 webRTC.disconnect().| 파일/심볼 | 역할 |
|---|---|
| use-screen-share.ts (startScreenShare L75, handleGuestScreenShareReady L241) | 화면 공유 본체 |
| use-web-rtc.ts (connectionId screen-share) | P2P 전송(#11) |
| components/sections/share-screen.tsx | 화면 공유 UI |