노트북/데스크탑 DECODE_OVERLOAD 해결 FIXED

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

문서 읽는 법 · 수사반장식

이 문서는 이렇게 읽으면 됩니다

노트북/데스크탑 DECODE_OVERLOAD 해결의 핵심을 수사반장식으로 먼저 안내합니다. 기술적 결론과 원문 근거는 아래 본문에 보존되어 있습니다.

핵심 흐름 펼쳐 보기
  1. 결론부터 확인한 뒤 증상과 영향을 읽습니다.
  2. 시간순 수사 흐름에서 가설과 반증을 따라갑니다.
  3. 마지막으로 로그·코드·검증 섹션에서 근거를 확인합니다.
  • 문제 BUG
  • 원인 분석
  • 해결 방법 FIX
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 — 전 기기 출력

관련 문서