마지막 업데이트 2026-07-22
이 문서는 특정 VOC 케이스(MSI 240Hz OLED 노트북)에 대한 정량 증거와 고주사율 각도를 더한 케이스 스터디다.
DECODE_OVERLOAD가 meet-video.tsx의 catch-all 오분류라는 일반 분석은 관련 문서 참고.
| 모델 | MSI Vector GP66 12UEO QHD OLED |
| CPU | Intel Core i7-12650H (16스레드) — 로그 hardwareConcurrency: 16 일치 |
| GPU | NVIDIA RTX 3060 Laptop (140W TGP) |
| RAM | 8GB — 로그 deviceMemoryGB: 8 일치 |
| 디스플레이 | 15.6" QHD(2560×1440) OLED, 주사율 240Hz |
같은 영상 재생 중 [MEET_VIDEO] Video waiting [DECODE_OVERLOAD] 가 약 5초 간격으로 반복. 두 시점을 비교하면 결정적 사실이 나온다.
| 시각(wall) | currentTime | total | dropped | bufferedAhead | readyState |
|---|---|---|---|---|---|
| 11:06:52.767 | 31.412 | 913 | 9 (1.0%) | 33.555s | 2 |
| 11:06:57.687 | 34.711 | 1011 | 53 (5.2%) | 30.256s | 2 |
| 11:07:22.433 | 51.601 | 1520 | 251 (16.5%) | 13.366s | 2 |
로그1 → 로그2 사이 실제 시간 경과 4.92초(57.687 − 52.767), 영상 진행 3.30초(34.711 − 31.412).
→ 재생 속도 = 3.30 / 4.92 ≈ 67%
영상이 실시간의 약 67% 속도로밖에 안 나간다 = 멈췄다 가는 stall. VOC "끊김"과 정확히 일치.
bufferedAheadSec 33.555)인데도 readyState가 3/4로 못 올라간다.
바이트는 다 있는데 다음 프레임을 제때 준비하지 못한다는 신호 → 네트워크가 아니라 파이프라인 공급 문제.
codec=h264 profile=Main level=4.2 pix_fmt=yuv420p 1924×1076 24fps ~8.97Mbps 1559프레임 64.96s
codec=h264 profile=Constrained Baseline level=3.1 pix_fmt=yuv420p
1280×720 30fps ~1.24Mbps 1949프레임
I-프레임 85슬라이스 / P-프레임 ~5슬라이스 / 프레임마다 AUD (slice-max-size=1500, nal-hrd=cbr)
ffmpeg -benchmark)frame=1949 speed=297x (65초 영상을 0.22초에 디코드, ≈8900fps)
| 후보 | 판정 | 근거 |
|---|---|---|
| 노트북 스펙 부족 | 기각 | i7-12650H + RTX 3060, 16스레드. 진짜 디코드 과부하 불가 |
| 크롬 HW 디코딩 OFF | 기각 | chrome://gpu Video Decode: Hardware accelerated (초록) |
| 영상 코덱 비호환(10bit/VP9/AV1) | 기각 | 재인코딩 결과 Constrained Baseline 8-bit yuv420p |
| 네트워크/버퍼링 | 기각 | blob 풀버퍼 33초치, networkState 1 |
| 디코드 실패 | 기각 | SW 디코드 297배속, corruptedVideoFrames 0 |
| present 파이프라인 starvation | 확정 | 67% 재생속도 + readyState 2 고정 + 드랍 가속. 동시 미디어 작업이 디코드→표시 슬롯을 빼앗음 |
| 240Hz 고주사율 기여 비중 | 미확정 | 4.2ms 마감 + 합성 4배 부담으로 악화 요인. 단 단독 원인은 아님(60Hz면 한가한 페이지는 30fps 멀쩡) |
디코딩이 끝난 뒤에도 프레임을 화면에 띄우려면 매 화면 갱신마다 합성 작업이 남는다:
[디코딩 완료 프레임] ← 297배속, 문제 없음 ↓ 1. GPU 텍스처 업로드 ↓ 2. 레이어 합성 (영상+아바타+UI+카메라 미리보기 겹치기) ↓ 3. 스케일/색공간 변환 (720p→1440p, YUV→RGB, OLED 보정) ↓ 4. OS 컴포지터에 제출 [vsync 시점에 표시]
chrome://media-internals → 재생 중 video_decoder 이름(D3D11=HW) + dropped 누적 곡선 확인.meet-video.tsx:554 catch-all이 present 미스를 DECODE_OVERLOAD로 오분류. droppedVideoFrames를 디코드 과부하 신호로 쓰지 말 것. present 미스(DROPPED_PRESENT)와 분리하고, 재생속도(currentTime/wall-clock)를 stall 판정에 사용.requestVideoFrameCallback — 영상 동기 로직을 240회/초 → 실제 프레임(30회/초)로 줄여 메인스레드 부담 완화.fps=30 업샘플 제거(원본 24fps 유지)로 자투리 present 타이밍 감소.