5.2.0은 Breaking Change 표시 없이도 재생 내부 경로가 크게 움직인 릴리스입니다. HLS의 기본 경로가 바뀌었고, URL 처리와 CMCD 구현이 교체되었습니다. 이 글에서는 체인지로그와 주요 PR을 근거로 5.2.0을 분석합니다.
5.2.0은 2026년 7월 10일에 배포되었습니다. 새 기능 60건, 버그 수정 59건, 성능 개선 18건입니다. 현재 5.2 라인은 previous 브랜치로 유지보수되고 있습니다.
#10325 Disable sequenceMode by default
manifest.hls.sequenceMode의 기본값이 device.supportsSequenceMode()에서 false로 바뀌었습니다. 이제 Chrome, Firefox, Safari 등에서 segments mode가 기본 재생 경로입니다. PR은 sequence mode를 단계적으로 없애는 계획(#9323)의 일환이라고 설명합니다.
HLS 서비스라면 가장 먼저 확인해야 할 변경입니다. 이전 동작이 필요하면 설정할 수 있지만, 옵션 자체가 향후 사라질 예정입니다.
트랜스먹싱을 Web Worker에서 수행할 수 있게 되었습니다. 단, mediaSource.transmuxWorkerUrl을 설정해야 동작하며 기본값은 빈 문자열입니다. 워커 URL이 없거나, 생성에 실패하거나, 요청이 타임아웃되거나, 기기가 제외 대상이면 메인 스레드로 돌아갑니다.
위 경로는 예시이며, PR에서 추가한 별도 워커 번들을 서비스에서 제공해야 합니다. 초기 버전의 안정화는 5.2.1, 5.2.2 패치에서 이어졌습니다.
#10197은 Closure의 goog.Uri 사용을 제거하고 네이티브 URL을 쓰는 shaka.util.URL을 추가했습니다. URL 파싱과 쿼리 처리의 기반 구현이 바뀌었으므로, 커스텀 네트워킹 플러그인에서 URL을 다룬다면 확인이 필요합니다. 5.2.x 패치에는 기존 쿼리 파라미터 재인코딩(5.2.5)과 CMCD 쿼리 모드의 상대 URI 실패(5.2.15) 수정도 있습니다.
#10060 vendor @svta/cml-cmcd, replace custom encoder + state machine
자체 CMCD 인코더와 상태 머신을 Common Media Library의 @svta/cml-cmcd로 교체했습니다. PR은 CTA-5004 규격에 맞추기 위한 의도적인 전송 형식 변경을 명시합니다.
nor URL이 루트 상대 경로가 되고, V2에서는 inner-list 형식이 됩니다.ld, lh 키가 제거되었습니다.CMCD 데이터를 수집하는 서버나 CDN 로그 파서가 있다면 이 형식 변경을 반영해야 합니다.
ImportedMPD로 연결된 Period를 해석합니다.urlparam:2025의 RequestParam을 지원합니다. urlparam:2016도 함께 지원합니다.EXT-X-DATERANGE의 timelineregionadded 발생(#10301, 이슈 #9828): HLS에서도 DASH처럼 타임라인 이벤트를 받을 수 있습니다.Essential/SupplementalProperty 지원PROGRAM-DATE-TIME 불연속 구간에서 정확한 재생 시각 보고Safari ClearKey(#10180): WebCrypto를 사용해 Safari에서 ClearKey 재생을 지원합니다. 이후 5.2.13에서 cbcs ClearKey 손상 재생 방지 수정이 이어졌습니다.
깨진 I-frame 세그먼트 복구(#10304): 일부 패키저는 I-frame 전용 플레이리스트를 첫 I-frame까지 잘라내면서 moof와 mdat을 고치지 않습니다. 이런 세그먼트는 디먹서가 거부합니다. 새로운 ContentWorkarounds.fixBrokenIframes 단계가 프래그먼트를 실제 샘플에 맞게 잘라내고, 남은 키프레임의 길이를 세그먼트 전체로 늘립니다.
stall 복구 재시도(#10327): 이전에는 stall을 깨는 동작을 한 번만 시도했습니다. PR에 따르면 Safari 18.x 등 구형 WebKit은 segments mode의 HLS 불연속 지점에서 멈출 수 있어, 이제 MAX_STALL_RETRIES(초기 시도 후 2회)까지 다시 시도합니다.
.css는 호환성을 위해 변수를 평탄화하고, .modern.css는 CSS 변수를 유지합니다.timeToFirstFrame 통계 추가(#10065)aria-hidden, 광고 컨트롤의 aria-label, 토글 버튼의 aria-pressed를 정비했습니다.5.2.0의 성능 항목은 크게 세 방향입니다.
| 방향 | 대표 항목 | 근거 |
|---|---|---|
| 매니페스트 처리 축소 | DASH SegmentTemplate@duration 세그먼트 참조 지연 생성 | #10050 |
| HLS 라이브 갱신 시 알려진 세그먼트 병합 생략 | #9998 | |
| 조회 비용 감소 | 세그먼트 조회의 이진 탐색 확대 | #9997 |
| 할당과 GC 감소 | timeupdate마다 전체 설정을 깊은 복사하던 코드 제거 | #10098 |
| H.265, AC-3, EC-3 트랜스먹서의 프레임당 객체 할당 감소 | 체인지로그 |
#9997은 저사양 TV의 긴 DVR 라이브를 직접 목표로 밝히고 있습니다. #10098은 1줄 변경이지만, liveSync나 vodDynamicPlaybackRate를 쓰는 세션의 timeupdate당 할당을 없앴습니다.
한 가지 주의할 점은 #9998이 5.0.18의 "LL-HLS stall 수정"을 낳았다는 것입니다. 체인지로그에는 "Fix LL-HLS stall on live playlist updates after #9998"로 기록되어 있습니다. 성능 최적화가 회귀를 만들고 곧바로 수정된 사례입니다.
5.2.1부터 5.2.17까지 버그 수정 124건이 있습니다. 앞선 라인과 공유되는 항목을 뺀 대표 수정입니다.
| 분류 | 주요 항목 | 버전 |
|---|---|---|
| 트랜스먹싱 | 워커 타임아웃, 실패 시 메인 스레드 폴백 | 5.2.1, 5.2.2 |
| 썸네일 | 프리뷰가 플레이어 크기에 맞게 스케일되도록 수정 | 5.2.1 |
| 네트워크 | 재시도 간 헤더 격리 | 5.2.2 |
| HLS | 먹스드 TS의 segments mode 오디오/비디오 싱크 | 5.2.5 |
| 네트워크 | 장애 시 variant 전환을 끝없이 반복하지 않고 에러로 종료 | 5.2.15 |
| HLS | 미디어 플레이리스트 실패 시 redundant URI 폴백 | 5.2.16 |
| MSE | changeType 실패 시 MediaSource 리셋으로 폴백 | 5.2.16 |
마지막 5.2.17에는 5.3.4에서 다룬 생명주기 수정이 함께 들어갔습니다.
mediaSource.transmuxWorkerUrl을 설정해야 동작합니다.