5.3.0은 현재 latest 라인의 시작 버전입니다. 새 코덱과 포맷을 넓히고, 광고와 SCTE-35 처리를 정비했으며, 실험 기능을 정리했습니다. 이 글에서는 체인지로그와 주요 PR을 근거로 5.3.0부터 5.3.3까지 살펴봅니다. 5.3.4는 별도 글에서 다뤘습니다.
5.3.0은 2026년 10월 16일에 배포되었습니다. 새 기능 44건, 버그 수정 121건, 성능 개선 1건입니다. 버그 수정이 많은 이유는 마이너 체인지로그가 5.2.0 이후의 변경을 모으기 때문이며, 그중 일부는 5.1.x나 5.2.x로 이미 백포트된 항목입니다.
| 변경 | 내용 | PR |
|---|---|---|
| DASH JSON 제거 | 5.1.0에서 추가한 실험 빌드 전용 기능 제거. DASH_INVALID_JSON(4061)은 retired | #10705 |
| MoQT 구버전 제거 | draft-14, draft-16 제거 | #10706 |
showMenusOnTheRight deprecated | 설정 시 경고만 남기고 무시, v6에서 제거 | #10708 |
앞의 두 건은 사실상 호환성을 깨는 변경이지만, PR에 따르면 실험 빌드에만 있던 기능이라 메인테이너 합의로 Breaking Change로 표시하지 않았습니다. 체인지로그의 표시만으로 판단하면 놓칠 수 있는 부분입니다. 메뉴는 이제 항상 여는 버튼 옆에 위치합니다.
iacb 박스를 파싱해 codecs 문자열을 다시 만듭니다.SCTE-35 통합(#10606): DASH, HLS, EMSG로 들어오는 SCTE-35를 전용 타임라인으로 모아 XML과 바이너리 페이로드를 정규화합니다. 기존 timeline region 이벤트 동작은 유지합니다.
런타임 스킵 구간(#10338): 스킵 구간은 프레젠테이션 타임라인에서 세그먼트가 없는 것처럼 다루는 [start, end) 구간입니다. 매니페스트를 고치지 않고 되돌릴 수도 있습니다. PR은 재생 위치를 감시해 currentTime을 옮기는 방식의 문제로 다음을 듭니다.
이 기능으로 MediaTailor에서 이미 본 광고 구간을 건너뜁니다.
인터스티셜 쿨다운(#10494): ads.interstitialCooldown으로 SGAI 광고 구간 종료 뒤 일정 시간 다른 광고가 재생되지 않게 합니다. 기본값은 0이며 비활성화 상태입니다.
클릭 URI 제한(#10412): 인터스티셜의 클릭 URI는 매니페스트와 광고 응답에서 온 값이 window.open()으로 전달되고 있어, http(s) 스킴으로 제한했습니다.
#10697은 자막 자체의 스타일을 덮어쓰는 textDisplayer 설정 6개를 추가했습니다.
설정할 수 있는 항목은 fontFamily, fontColor, fontOpacity, backgroundColor, backgroundOpacity, characterEdgeStyle입니다. 기본값에서는 렌더링이 바뀌지 않고, UITextDisplayer에서만 지원됩니다. UI에도 해당 메뉴와 초기화 버튼, 중첩 메뉴 그룹이 추가되었습니다.
그 외 UI 변경은 다음과 같습니다.
playbackRateSliderStep 설정#10380 이전에는 MSE append가 실패해도 MediaSource 리셋보다 스트림 전환이 먼저 일어나, 방금 실패한 SourceBuffer에 다음 세그먼트를 추가했습니다. PR에 따르면 임베디드 WebKit 같은 플랫폼에서는 이것이 비동기 네이티브 크래시로 이어집니다. 이제 리셋을 먼저 수행합니다.
#10409는 Severity 판단을 분리했습니다. 리셋만 성공한 경우는 완전한 회복으로 보지 않아 CRITICAL을 유지하고, 스트림 비활성화까지 성공해야 RECOVERABLE로 낮춥니다. 자세한 흐름은 에러 처리 글에서 다뤘습니다.
| 분류 | 수정 | PR |
|---|---|---|
| 트랜스먹싱 | 워커 타임아웃 시 CRITICAL 대신 메인 스레드 폴백 | #10349 |
| 생명주기 | 재생이 멈춘 상태에서 destroy()가 영원히 끝나지 않던 문제 수정 | #10624 |
| 프리페치 | 청크마다 전체 버퍼를 복사하던 O(N²) 제거 | #10448 |
#10624는 load()가 JS 아래 계층에서 멈추면 destroy()가 뮤텍스를 영원히 기다리는 문제입니다. PR 작성자는 webOS와 Tizen 운영 환경에서 겪었다고 밝혔습니다.
시크바 관련으로는 키보드 시크 프리뷰, 썸네일 스케일링, 챕터 마커 정렬이 수정되었습니다. 오프라인에서는 IndexedDB 연결 누수와 DRM 세션 정리 문제가 해결되었습니다.
| 버전 | 배포일 | 주요 수정 |
|---|---|---|
| 5.3.1 | 10월 19일 | textDisplayer.fontFamily에 임의의 CSS 폰트 허용 |
| 5.3.2 | 10월 23일 | 네트워크 장애 시 에러로 종료, SegmentTemplate@endNumber 준수, HLS 라이브 가용 구간 고정, WebVTT와 TTML 위치 계산 |
| 5.3.3 | 10월 29일 | HLS redundant URI 폴백, changeType 실패 시 MediaSource 리셋, 리셋 후 재생 위치 유지, 실패한 라이선스 요청의 세션 닫기 |
5.3.1은 5.3.0에서 추가한 fontFamily를 3일 만에 보완한 것입니다.