WebRTC 모니터링/통계 (getStats) — 코드레벨 동작 흐름 P2코드레벨

마지막 업데이트 2026-07-22

작성일: 2026-06-14 대상: 개발자 — WebRTC 연결 상태/통계 수집 파악 핵심 파일: hooks/use-webrtc-monitoring.ts

개요 · 범위

RTCPeerConnection의 연결 상태 전이getStats 통계(RTT·패킷손실·트랙)를 수집해 로깅하고, 게스트 역할이면 소켓으로 호스트(모니터)에 송출하는 공용 모니터링 훅. 세션 매니저(#1, OpenAI WebRTC)와 V1 P2P(#11, useWebRTC)가 함께 쓴다.

옵션: peerConnection, onStatusUpdate(콜백), enableSocketEmission+roomId+connectionId(게스트 송출). 콜백·송출 둘 다 없으면 통계 루프는 시작조차 안 함.

API

메서드역할
initializeStateTracking연결 시작 시각 기록(connectionDuration 기준)
setupStateMonitoring(pc)onconnectionstatechange/oniceconnectionstatechange 부착 → 전이 로깅·콜백(#1의 disconnect/fail 처리와 연동)
startTrackMonitoring(pc)트랙 enabled/muted/readyState 주기 점검
startStatusUpdate(pc)2초 주기 getStats 수집·변경 시 송출
stopMonitoring(pc)인터벌 정리 + closed 상태 최종 송출

통계 수집 (2초 주기) startStatusUpdate L322

  1. 트랙 수집: getSenders()/getReceivers()에서 id/kind/enabled/readyState/muted/direction.
  2. getStats 파싱:
// RTT: candidate-pair(state=succeeded)의 currentRoundTripTime
report.type === "candidate-pair" && state === "succeeded" → roundTripTime
// 패킷손실: inbound/outbound-rtp
packetLossRate = packetsLost / (packetsLost + packetsReceived) × 100  // 최댓값 보존
  • 경고 로깅: packetLossRate > 5% 또는 RTT > 300ms 시 warn(연결 상태 동봉).
  • 변경 감지 송출: connectionState/iceConnectionState 변화, RTT >10ms 차, 패킷손실 >0.1%p 차, 트랙 변화 중 하나라도 있어야 콜백/송출(노이즈 억제).
  • 소켓 송출: 게스트면 guest-webrtc-status {roomId, connectionId, status:{connectionState, tracks}} → 모니터 UI.

종료 stopMonitoring L477

인터벌 정리 후, 게스트면 마지막으로 guest-webrtc-statusclosed 상태를 송출해 모니터가 연결 종료를 즉시 반영하게 한다.

함정 · 주의

  • connectionId로 다중 연결 구분: 세션 매니저는 "session-audio", V1 P2P는 host-audio/screen-share 등. 송출 시 connectionId가 빠지면 모니터가 어느 연결 통계인지 구분 못함.
  • 변경 감지 임계: RTT 10ms·손실 0.1%p 미만 변화는 무시. 미세 변동까지 보려면 임계 조정 필요(송출량↑ 트레이드오프).
  • 콜백/송출 없으면 no-op: startStatusUpdate가 둘 다 없으면 통계 자체를 안 모은다.
  • candidate-pair succeeded만: RTT는 성공한 후보쌍에서만. 연결 초기/재협상 중엔 값이 없을 수 있음.
  • noise guard 연계: 이 통계(packetsLost/jitter)는 AI 노이즈 가드(#8)의 PLC 추정과 별개 경로지만 같은 inbound 지표를 본다 — 혼동 주의.

파일 · 라인 레퍼런스

파일/심볼역할
use-webrtc-monitoring.ts (startStatusUpdate L322, setupStateMonitoring L91)모니터링 본체
use-session-manager.ts (webrtcMonitoring)OpenAI WebRTC 모니터링(#1)
use-web-rtc.ts (guest role)V1 P2P 모니터링(#11)