노트북/데스크탑 디코드 오버로드 해결 FIXED

PR: #651 파일: apps/web/lib/utils.ts 해결일: 2026-05-22

문제 BUG

기존 저사양 분류 대상: Android / iOS / iPad 만 해당
노트북/데스크탑은 isLowPerformanceDevice() 에서 무조건 false 반환
노트북/데스크탑은 항상 720p 리소스 다운로드
저사양 노트북에서 720p 비디오 재생 중 디코더 과부하 → DECODE_OVERLOAD 발생

DECODE_OVERLOAD 감지 조건 (meet-video.tsxdiagnoseWaitingCase()).

버퍼(bufferedAheadSec) > 1초 임에도 waiting 이벤트 발생
→ 네트워크 문제 아님 → 디코더가 실시간 재생을 따라가지 못하는 상태

원인 분석

해결 방법 FIX

리소스 다운로드 전MediaCapabilities.decodingInfo() 로 디코딩 성능을 실측하여 저사양 판정
smoothpowerEfficient판정
trueany고사양 → 720p
falsetrue (하드웨어 가속)고사양 → 720p
falsefalse (소프트웨어 디코딩)저사양 → 480p

powerEfficient 추가 이유

Chrome은 첫 decodingInfo() 쿼리에서 smooth: false를 보수적으로 반환하는 경우가 있음. M4 MacBook Pro에서도 첫 실행 시 smooth: false가 나왔으나 powerEfficient: true (VideoToolbox 하드웨어 가속 동작 중)이었음 → powerEfficient로 보완 판정.

// apps/web/lib/utils.ts

// 리소스 캐싱 전 호출 — 결과 캐시에 저장
const isLowPerformance = await initLowPerformanceDevice();
await cacheResources(fileNames, isLowPerformance, onProgress);

변경 파일

파일변경 내용
apps/web/lib/utils.tsinitLowPerformanceDevice() async 추가, _checkDesktopDecodingCapability() 추가, 로깅 추가
hooks/use-guest-entry-socket.tsawait initLowPerformanceDevice() 로 교체
entities/guest-page-session/model/use-guest-page-session.ts동일
entities/guest-socket/model/use-guest-socket.ts동일

배포 후 모니터링

LogRocket에서 아래 키워드로 검색하여 기기별 판정 결과를 확인합니다.

로그확인 내용
[LowPerf] decodingInfosmooth / powerEfficient / supported 값 — 노트북/데스크탑만 출력
[LowPerf] resultisLowPerformanceDevice, ua, platform, hardwareConcurrency, deviceMemory — 전 기기 출력

관련 문서