Shaka Player 5.0.0은 v5 라인의 시작점이자, v4에서 예고했던 정리를 실행한 메이저 릴리스입니다. 이 글에서는 체인지로그와 공식 업그레이드 가이드, 주요 PR을 근거로 무엇이 사라지고 바뀌었는지, 그리고 업그레이드할 때 무엇을 고쳐야 하는지 정리합니다.
5.0.0은 2026년 2월 6일에 배포되었습니다. 체인지로그에는 새 기능 109건, 버그 수정 187건, 성능 개선 24건이 올라 있고, Breaking Change로 표시된 항목은 22건입니다.
Shaka Player는 v3부터 시맨틱 버저닝을 따릅니다. 업그레이드 가이드는 같은 메이저 안에서의 업그레이드는 하위 호환되어야 한다고 설명합니다. 즉 애플리케이션 수정이 필요한 변경은 이런 메이저 버전에 모이고, 5.0.0이 v5 라인에서 그 역할을 맡았습니다.
| 제거 대상 | 내용 | PR |
|---|---|---|
| MSS | Microsoft Smooth Streaming 지원 제거 (약 2,800줄 삭제) | #9329 |
| LRC, SBV, SSA | 해당 자막 포맷 지원 제거 | #9330 |
codem-isoboxer | MSS에서만 쓰던 의존성 제거 | #9608 |
shaka.util.XmlUtils | 공개 유틸리티 제거 | 체인지로그 |
| deprecated API | v4 기간에 deprecated 표시된 항목 일괄 제거 (약 3,000줄 삭제) | #9162 |
MSS 콘텐츠나 위 자막 포맷을 사용 중이라면 5.0으로 올리기 전에 대체 경로를 마련해야 합니다.
업그레이드 가이드의 v5.0 항목 중 영향이 넓은 변경을 추렸습니다.
| 이전 | 이후 |
|---|---|
streaming.forceTransmuxTS | streaming.forceTransmux (AAC, MP3, AC-3, EC-3에도 적용) |
streaming.liveSyncMinLatency, liveSyncMaxLatency | streaming.liveSync.targetLatency |
streaming.liveSync* 개별 옵션 | streaming.liveSync 객체(enabled, targetLatency, targetLatencyTolerance, maxPlaybackRate, minPlaybackRate, panicMode, panicThreshold) |
streaming.forceHTTP, forceHTTPS, minBytesForProgressEvents | networking.* 으로 이동 |
manifest.dash.enableAudioGroups | manifest.enableAudioGroups |
preferredVariantRole | preferredAudioRole |
streaming.speechToText | accessibility.speechToText |
autoShowText, abr.removeLatencyFromFirstPacketTime | 제거 |
라이브 동기화 설정은 다음처럼 객체 형태로 옮겨야 합니다.
| 이전 | 이후 |
|---|---|
new shaka.Player(video) | new shaka.Player() 후 await player.attach(video) |
getAudioLanguages, getAudioLanguagesAndRoles | getAudioTracks |
selectAudioLanguage | selectAudioTrack |
getChapters | getChaptersAsync |
shaka.util.FairPlayUtils | shaka.drm.FairPlay |
setTextTrackVisibility | 제거 |
#9668 이후로는 시작 과정에서 미디어 요소의 currentTime을 직접 바꿀 수 없습니다. PR 설명에 따르면 streaming 이벤트에서 currentTime을 수정하던 방식 대신, canupdatestarttime 이벤트에서 updateStartTime을 호출해야 합니다.
v4까지는 자막 트랙을 선택하는 것과 자막을 보이게 하는 것이 별개의 동작이었습니다. #9048은 이 구분을 없애는 방향의 변경이고, #9664가 setTextTrackVisibility를 공개 API에서 제거했습니다.
autoShowText도 함께 사라졌습니다. 업그레이드 가이드에 따르면 초기 자막 트랙은 preferredTextLanguage와 preferredTextRole로만 결정합니다. 강제 자막은 #9497에서 기본으로 자동 처리되도록 바뀌었고 설정으로 조정할 수 있습니다.
커스텀 플러그인을 쓰고 있다면 다음을 확인해야 합니다.
configure() 구현이 필수이고, enableTextDisplayer는 제거되었습니다. 내장 디스플레이어의 생성자는 shaka.Player 인스턴스를 유일한 인자로 받습니다(#9515). SimpleTextDisplayer는 NativeTextDisplayer로 대체되었습니다.setManifestType() 구현이 필수이고, setSequenceMode는 제거되었습니다.transmux()에 매개변수 3개가 추가되었습니다.AdManager도 #9357로 단순해졌습니다.
initClientSide, initServerSide, initMediaTailor, initInterstitial이 제거되고 필요할 때 자동으로 초기화됩니다.setContainers로 지정합니다.video, player 매개변수가 제거되었습니다.onDashTimedMetadata가 제거되었습니다.Shaka UI를 그대로 쓰는 서비스는 코드를 고치지 않아도 화면이 달라질 수 있습니다.
| 변경 | 내용 |
|---|---|
bigButtons | addBigPlayButton 제거. 모바일 기본값은 skip_previous, play_pause, skip_next (#9636) |
customContextMenu | 데스크톱 브라우저에서 기본 활성화 (#9635) |
doubleClickForFullscreen | 모바일에서 기본 활성화 |
preferDocumentPictureInPicture | documentPictureInPicture.enabled로 이름 변경 |
airplay 버튼 | 제거. remote 버튼 사용 |
| 버튼 순서 | 기본 순서 변경 |
com.apple.hls.chapters와 라이브 챕터 지원도 함께 추가되었습니다.retryLicensing()(#9638, 이슈 #1772): 라이선스 요청이 실패한 뒤 앱이 재시도할 수 있습니다. EME에서 generateRequest()는 세션당 한 번만 호출할 수 있어, 기존 세션을 닫고 같은 initData로 새 세션을 만드는 방식입니다.streaming.stopFetchingOnPause(#9567): 일시정지 중 새 세그먼트 요청을 멈춥니다.패치는 5.0.28(7월 27일)까지 이어졌고, 체인지로그 기준 버그 수정 124건과 성능 개선 41건이 있습니다. 대부분 이후 라인과 공유됩니다.
| 분류 | 주요 항목 | 버전 |
|---|---|---|
| 재생 안정성 | 끝 지점 탐색 시 프리즈 수정 | 5.0.2 |
| 재시도 | 세그먼트 요청에 streaming.retryParameters 적용 | 5.0.5 |
| HLS | 무한 매니페스트 갱신 지연 방지 | 5.0.8 |
| 보안 | TTML backgroundImage URL 정제(CSS 주입 방지) | 5.0.10 |
| 보안 | TXml 재귀 깊이 제한(스택 오버플로 DoS 방지) | 5.0.11 |
| DRM | 키 상태 변경 중 destroy 시 TypeError 방지 | 5.0.12 |
| 썸네일 | getAllThumbnails 동시 호출 경쟁 상태 수정 | 5.0.15 |
| MSE | variant 전환 전 MediaSource 리셋 | 5.0.28 |
성능 개선은 GC 압력을 줄이는 작업이 많습니다. HLS 태그와 VTT 파싱의 배열 할당 제거(5.0.8), SegmentIndex 이진 탐색(5.0.9)이 대표적입니다. 저사양 TV 환경을 겨냥한 흐름은 이후 5.2까지 이어집니다.
5.0 라인은 현재 유지보수가 종료되었습니다. 유지보수 브랜치 목록에 v5.0은 없습니다.
new shaka.Player(video)를 attach() 방식으로 변경streaming.liveSync* 설정을 객체로 변경, networking.* 이동 반영setTextTrackVisibility를 selectTextTrack(null)로 변경, autoShowText 제거getAudioLanguages, selectAudioLanguage, getChapters를 새 API로 변경canupdatestarttime과 updateStartTime으로 지정AdManager의 init* 호출 제거, setContainers 적용