New Features:
- MediaCapabilities support: configs for preferred codecs, decoding attributes, and key systems
- Support more frequent segment updates during streaming
- Add callback for apps to pre-process DASH manifests
- Add chapters support
- Add support for HLS Image Media Playlists
- Add align and vertical settings to WebVttGenerator
- Add a buffer fullness method
- Progress toward FairPlay DRM w/ MSE
- Add serverCertificateUri in DRM advanced config
- Add goToLive method
Bugfixes:
- Fix choosing tracks from streaming event
- Fix multiperiod without consistent thumbnails
- Fix failure with multiple thumbnails per period
- Update Play icon after seeking from end
- Reset forced subs between loads
- Fix thumbnail position calculation
- Fix thumbnail duration, expose start time and duration
- Fix enforcement of cue alignment styles
- Fix DASH transition from dynamic to static
- Fix ARIA label on replay button
- Fix audio language switching while using AirPlay
- Show captions with rapid seek when ignoreTextStreamFailures is true
- Fix clearing buffer when requested for already-selected variant
- Fix hung playback on rapid seek
- Don't show AirPlay button if unavailable
- Fix bogus debug logs
Docs:
- Update upgrade guides
Bugfixes:
- Fix choosing tracks from streaming event
- Update Play icon after seeking from end
- Fix DASH transition from dynamic to static
- Fix ARIA label on replay button
- Fix audio language switching while using AirPlay
- Show captions with rapid seek when ignoreTextStreamFailures is true
- Fix clearing buffer when requested for already-selected variant
- Fix hung playback on rapid seek
Bugfixes:
- Fix buffering due to re-fetch in multi-period DASH
- Prioritize AVERAGE-BANDWIDTH over BANDWIDTH in HLS
- Fix EC-3 box support in DRM workaround on smart TVs
- Fix exception in UI on devices that do not support fullscreen
- Fix caption positioning and sizing when the container resizes
- Fix exceptions thrown in content with trick-mode tracks
- Filter unsupported H.264 streams in Xbox
- Fix out-of-bounds exception in LL-DASH
- Fix failures and gaps in LL-DASH
- Allow muxjs to be loaded after Shaka
- Choose the configured preferred text role at start
- Fix STORAGE_LIMIT_REACHED error masked by DOWNLOAD_SIZE_CALLBACK_ERROR
- Fix "details" field in shaka-ui-load-failed event
- Ignore network changes if ABR is disabled
- Fix ClearKey+WebM+src= playback failure
Docs:
- Document disabling Range header requests in HLS
- Add Angular integration link
Demo App:
- Add MIME type and extra config to custom assets
Bugfixes:
- Fix buffering due to re-fetch in multi-period DASH
- Prioritize AVERAGE-BANDWIDTH over BANDWIDTH in HLS
- Fix EC-3 box support in DRM workaround on smart TVs
- Fix exception in UI on devices that do not support fullscreen
- Fix caption positioning and sizing when the container resizes
- Fix exceptions thrown in content with trick-mode tracks
- Filter unsupported H.264 streams in Xbox
- Choose the configured preferred text role at start
- Fix ClearKey+WebM+src= playback failure
- Fix double-display of embedded and non-embedded captions
Docs:
- Document disabling Range header requests in HLS
- Add Angular integration link
Bugfixes:
- Prioritize AVERAGE-BANDWIDTH over BANDWIDTH in HLS
- Fix exception in UI on devices that do not support fullscreen
- Fix caption positioning and sizing when the container resizes
- Filter unsupported H.264 streams in Xbox
- Choose the configured preferred text role at start
- Fix ClearKey+WebM+src= playback failure
Docs:
- Add Angular integration link
New Features:
- Ads APIs are now STABLE (no longer BETA)
- MediaCapabilities support (BETA)
- Remove support for IE11
- Low-latency HLS (LL-HLS) and DASH (LL-DASH) support
- Make DASH keySystems configurable
- Make DRM sessionType configurable in advanced DRM config
- Add Loop, PIP, Cast, AirPlay buttons to control panel
- Network stall detection
- Store thumbnails for offline playback
- Extract HDR metadata from DASH manifests
- Make gap detection threshold configurable
- Support WebVTT default text color and default text background color
- Add support for thumbnail tracks
- Add getKeyStatuses to Player
- Parse spatial audio from manifest
- Add support for WebVTT style blocks
- Add SubViewer (SBV) support
- Add SubStation Alpha (SSA) support
- Add downloadSizeCallback before storing offline
- Extract HDR metadata from HLS manifests
- add ignoreMaxSegmentDuration config for DASH manifest
- Add navigator.storage.estimate polyfill
- Prefer unprefixed EME for Safari
- Add config to prefer native HLS playback
- Add LyRiCs (LRC) support
- Add support for SMPTE namespace 2013
- Add support for mpegB:cicp:ChannelConfiguration
- Config to prefer forced subtitles
- Change default network request timeout
- Optionally force HTTPS content URIs
- Add parameter to probeSupport to skip DRM tests
- Add autoLowLatencyMode config
- Allow apps to register a custom seek bar UI implementation
- Parse forced subtitles from manifest
- Add addTextTrackAsync
- Allow showing track labels in UI
- Allow switching between mono and stereo tracks
- Add support to side-load subtitles in src mode
- Add SubRip (SRT) subtitle support
- CEA-708 Decoder
- Added completionPercent to playback stats
- Render bold/italics/underline on SimpleTextDisplayer
- Adds VTT tag rendering for bold, italic, and underline
- CEA-608 Decoder
- Add dependencies module to allow custom dependency injection
- Add HLS PlayReady support
- Add AirPlay button to overflow menu
- Use Network Information API to react to network changes
- Added polyfill for screen.orientation
- Add support for EXT-X-SESSION-DATA in HLS
- Add forceLandscapeOnFullscreen UI config
Bugfixes:
- Assume MP4 in HLS if MIME type can't be deduced
- Fix resolution changes with lang change
- Resume previous playback speed after pause
- Fix updating of the mute icon
- Fix text writing-mode support in old versions of Tizen and WebOS
- Show replay icon instead of play when video ends
- Fix cross-browser focus outline
- Fix rapid keyboard-based seeking
- Fix holding keyboard controls
- Display cursors as pointers on overflow menu buttons
- Fix failed assertion for eviction logic
- Fix stalls on a live dash stream
- Fix HLS content type detection with text codecs
Ad Features (BETA):
- Fix the skip ad button not being clickable
- Add the original IMA event to the Shaka
AD_CLICKED
event - Add more info on serving limited ads to the tutorial
Demo App:
- Fix centering of icons, add hover effect on settings
Docs:
- Update event docs and event links
- Add the UI Theme Gallery link to the docs
- Fixed various grammatical errors and typos
- Fix offline tutorial to use the correct config
Misc:
- Allow testing with Chromium-based Edge in Karma
- Official Xbox One support
Bugfixes:
- Assume MP4 in HLS if MIME type can't be deduced
- Fix resolution changes with lang change
- Resume previous playback speed after pause
- Fix updating of the mute icon
- Fix text writing-mode support in old versions of Tizen and WebOS
- Show replay icon instead of play when video ends
- Fix cross-browser focus outline
- Fix rapid keyboard-based seeking
- Fix holding keyboard controls
- Fix stylelint on Windows
- Display cursors as pointers on overflow menu buttons
Demo App:
- Fix centering of icons, add hover effect on settings
Docs:
- Update event docs and event links
- Add the UI Theme Gallery link to the docs
- Fixed various grammatical errors and typos
Misc:
- Allow testing with Chromium-based Edge in Karma
- Official Xbox One support
Bugfixes:
- Fix stalls in some multi-Period DASH content
- Fix stylelint errors on Windows
Bugfixes:
- Fixed build error on Windows
- Exported SegmentReference.getUris
- Fix giant gaps in SSAI content
- Fix TTML background image attribute case
- Avoid setting global Cast hook
- Fix codec choice when resolutions differ
- Fix autoplay for non-zero-start VOD
- Allow playing Periods with missing text
- Support localized whitespace preservation in TTML
- Fix offline storage after a failure
- Fix repeated seek on start for some content
- Fix subtitle display in timing edge case
- Support version 1 emsg boxes
Ads (BETA):
- Change the value of the 'mpt' param we set for tracking
- Expose native IMA stream manager for SS DAI
- Hide the ad container when ads aren't playing
- Add "limited ads" section to the ads tutorial
- Expand the IMA integration tutorial
Docs:
- Fixed various typos
- Fixed outdated info and typos
- Document programmatic UI setup
- Update doc for manifest and segment ALR
- Add vue.js, nuxt.js and video.js integration examples
Demo App:
- Make it possible to add custom ad assets with no manifest uri.
- Add an ADS tab to the custom content page
- Add DAI live DASH example to DEMO app
Bugfixes:
- Fix giant gaps in SSAI content
- Fix TTML background image attribute case
- Avoid setting global Cast hook
- Fix codec choice when resolutions differ
- Fix autoplay for non-zero-start VOD
- Support localized whitespace preservation in TTML
- Fix repeated seek on start for some content
- Fix subtitle display in timing edge case
- Fixed build error on Windows
Docs:
- Fixed outdated info and typos
- Fixed various typos
- Document programmatic UI setup
- Update doc for manifest and segment ALR
Bugfixes:
- Fix memory leak in Webpack-bundled version
- Fix build in Python 3
- Fix broken build in directories with spaces
- Fix mixed clear/encrypted content on Xbox & Tizen
- Fix trick mode tracks in DASH (work around compiler bug)
- Fix DRM initialization on WebOS 3.0
- Fix segment refs for "future" DASH periods
- Recognize "m4f" extension in HLS
- Catch unhandled rejection while destroying StreamingEngine
- Fix header sizes for MP4 boxes with 64-bit size fields
- Fix load-time exception in nodejs
Ads (BETA):
- Use the correct AdsLoader
AD_ERROR
event - Expose getMinSuggestedDuration
- Add setVpaidMode to the IMA externs
Bugfixes:
- Fix build in Python 3
- Fix broken build in directories with spaces
- Fix trick mode tracks in DASH (work around compiler bug)
- Fix DRM initialization on WebOS 3.0
- Recognize "m4f" extension in HLS
- Fix header sizes for MP4 boxes with 64-bit size fields
Bugfixes:
- Fix text failures triggered by rapid stream switches
- Remove legacy Edge workarounds on new Edge
- Fix viewport anchor calculations in TTML
- Fix slow memory leak related to MediaSource object URLs
- Fix clicking in interactive client-side ads
- Improve cue comparison performance
- Fix race condition in text stream scheduling
- Fix multiple stream-merging issues with DASH multi-period content
- Fix exception when removing content from buffer
- Fix memory leak in DASH with SegmentTimeline
- Fix trick-mode tracks associated with multiple regular tracks
- Fix TS DRM failures
- Work around misreported AC-3 support on Tizen
- Ignore incompatible TrickMode streams
- Fix rare exception thrown when switching streams
- Fix rendering of line breaks in text cues
Ads (BETA):
- Fix ad disappearance when reconfiguring UI during an ad
- Fix stopping ad manager after adblock
Build:
- Fix build issues with Python 3
- Fix running build scripts on Windows
- Fix build error about stylelint paths
- Fix build failure in context of node module
Demo App:
- Fix keyboard navigation in settings
Docs:
- Clean up doc generation
- Fix docs generation for enums in ui
Bugfixes:
- Remove legacy Edge workarounds on new Edge
- Fix viewport anchor calculations in TTML
- Fix slow memory leak related to MediaSource object URLs
- Improve cue comparison performance
- Fix race condition in text stream scheduling
- Fix exception when removing content from buffer
- Work around misreported AC-3 support on Tizen
- Fix trick-mode tracks associated with multiple regular tracks
- Fix TS DRM failures
- Ignore incompatible TrickMode streams
Build:
- Fix build issues with Python 3
- Fix running build scripts on Windows
- Fix build error about stylelint paths
- Fix build failure in context of node module
Demo App:
- Fix keyboard navigation in settings
Docs:
- Clean up doc generation
- Fix docs generation for enums in ui
Bugfixes:
- Fix handling of metadata tracks for src= playback
- Fix handling of role-less audio tracks
- Fix support for multi-period encrypted live
- Export UI externs
- Fix duplicate init segment requests on manifest updates
- Fix hard-coded TTML namespaces
- Fix test failure on IE11
- Filter out "chapters" tracks during src= playback
- Fix compatibility for plugin factories
- Be more permissive in vtt files
- Fix renaming of UI base class protected members
- Make submenu CSS apply to all submenus
- Export FakeEvent for use by UI plugins
- Recognize mp4a and mp4v extensions in HLS
- Support multiple CHARACTERISTICS values in HLS
- Don't auto-play after seeking while paused in the UI
Ad changes (BETA):
- Allow apps to supply adsResponse property for IMA
Docs:
- Add link to complete list of build categories
- Correct receiver IDs in the UI tutorial
- Update required Node version
Demo App:
- Add test streams for CEA-608
- Add new low latency DASH manifest
- Remove redundant switch for manifest.dash.ignoreDrmInfo
Misc:
- Add mkdir to make all build commands self-contained
- Generate TypeScript defs with Clutz
Bugfixes:
- Fix handling of role-less audio tracks
- Export UI externs
- Fix hard-coded TTML namespaces
- Filter out "chapters" tracks during src= playback
- Fix renaming of UI base class protected members
- Export FakeEvent for use by UI plugins
- Recognize mp4a and mp4v extensions in HLS
- Support multiple CHARACTERISTICS values in HLS
- Don't auto-play after seeking while paused in the UI
Docs:
- Add link to complete list of build categories
- Update required Node version
- Correct receiver app IDs in the UI tutorial
Demo App:
- Remove redundant switch for manifest.dash.ignoreDrmInfo
Misc:
- Add mkdir to make all build commands self-contained
Bugfixes:
- Fix hiding controls on mobile after touch
- Ignore seek touch events on hidden controls
- Fix interpretation of DEFAULT and AUTOSELECT in HLS
- Avoid a race when clearing buffered content
- Allow playback of video-only HLS via configuration
- Make UITextDisplayer CSS-independent
- Remove hard-coded tts:extent namespace in TTML parser
- Don't apply seek range while content is still loading
- Fix Shaka+Cast apps using IndexedDB
- Permit applications to monkey-patch Date.now
- Fix detection of Edge Chromium as Edge
- Fix loading with global "define" set to null
- Fix missing cues in UITextDisplayer
- Fix storing modified init data for offline sessions
- Fix duplicate text streams in multi-period DASH
- Fix rapid seeking leading to infinite buffering
- Fix non-deterministic exception in StreamingEngine
- Fix bug where cue comparison throws
- Fix exception on multi-period DASH
- Fix embedded captions vanishing
- Fix application of DRM server certificate
- Fix multi-period DASH with period-specific codecs
Demo App:
- Change the menu icon to a settings icon
- Suppress bogus errors displayed during download
Docs:
- Fix references to built-in CEA 608 support, not available in this branch
- Add links to the roadmap
Bugfixes:
- Fix hiding controls on mobile after touch
- Ignore seek touch events on hidden controls
- Fix interpretation of DEFAULT and AUTOSELECT in HLS
- Avoid a race when clearing buffered content
- Allow playback of video-only HLS via configuration
- Make UITextDisplayer CSS-independent
- Remove hard-coded tts:extent namespace in TTML parser
- Don't apply seek range while content is still loading
- Fix Shaka+Cast apps using IndexedDB
- Permit applications to monkey-patch Date.now
- Fix detection of Edge Chromium as Edge
- Fix loading with global "define" set to null
- Fix missing cues in UITextDisplayer
- Fix storing modified init data for offline sessions
Demo App:
- Change the menu icon to a settings icon
Docs:
- Fix references to built-in CEA 608 support, not available in this branch
Bugfixes:
- Fix case sensitivity in KEYID format check in HLS
- Do not assume HDR for HEVC1.2 on Chromecast
- Recognize "wvtt" codec in HLS WebVTT tracks
- Fix case sensitivity for DRM content types
- PlayReady only has little-endian key IDs on Edge & IE
- Fix UI translation of "live" in Chinese
Docs:
- Improve docs on platform support
- Add doc on Application-Level Redirects
Bugfixes:
- Fix case sensitivity in KEYID format check in HLS
- Do not assume HDR for HEVC1.2 on Chromecast
- Recognize "wvtt" codec in HLS WebVTT tracks
- Fix case sensitivity for DRM content types
- PlayReady only has little-endian key IDs on Edge & IE
- Fix UI translation of "live" in Chinese
Docs:
- Improve docs on platform support
- Add doc on Application-Level Redirects
Bugfixes:
- Fix timing of VTT in HLS without map header
- Fix TTML style inheritance
- Fix ordering of cues on IE and Edge
- Fix VTTCue polyfill in uncompiled mode on Edge
- Ensure the number of variants stays stable when new periods are added
- Fix src= playback on WebOS
- Filter timeline regions by seek range
- Don't send duplicate license requests
- Don't limit segment count for VOD
- Fix data URI parsing when charset present
- Fix rendering of TTML nested cues and spacers
Ad changes (BETA):
- Add an extra log when replacing ad tag params for tracking adoption
- Properly set tracking info for SS IMA streams
Demo App:
- License header field for custom assets
Docs:
- Correct very outdated docs on test.py
Bugfixes:
- Fix TTML style inheritance
- Fix ordering of cues on IE and Edge
- Fix src= playback on WebOS
- Filter timeline regions by seek range
- Don't send duplicate license requests
- Fix data URI parsing when charset present
- Fix rendering of TTML nested cues and spacers
Docs:
- Correct very outdated docs on test.py
Bugfixes:
- Fix missing build/types/core in npm packages
- Work around stalling playback on Tizen 3
- Fix hang while shutting down Widevine DRM sessions
- Fix initial bandwidth estimate on Tizen
- Fix src= playback on Tizen 3
- Work around less 3.12.0 bug
- Improve logging of buffered ranges on WebOS
- Fix use of --test-custom-license-server in test.py
- Fix HLS discontinuity bug, broken playback with ads
- Fix disappearing captions with certain input patterns
- Fix missing captions when switching streams
- Append license for language-mapping-list to output
Ad changes (BETA):
- Proxy all client-side IMA events through the ad manager
- Fire a shaka.Player.Metadata event on detecting ID3 metadata
Docs:
- Update tutorial for seek bar color changes
- Add FAQ entry for native HLS playback in Safari
- Update tutorials and docs to async/await syntax
- Update tutorials and docs to use modern variable syntax (const/let)
Demo App:
- Fix demo behavior when UI fails to load (due to ad blocker)
Bugfixes:
- Fix failure with identical text streams
- Fix offline progress callbacks in release mode
- Fix bad segment URLs in DASH SegmentTimeline
- Correct license headers in compiled output
- Set an explicit font size for icons in UI
- Apply upstream styles for icons font in UI
- Export shaka.util.FairPlayUtils and shaka.util.BufferUtils
Ad changes (BETA):
- Correct IMA SDK URLs in service worker and docs
- Fix UI not showing up for server side ad streams
- Expose more client side IMA info to apps
Demo App:
- Fix centering of MDL icons
- Fix error text overflow
- Fix missing icon for demo app menu
Docs:
- Update Manifest Parser tutorial
Bugfixes:
- Fix background color of nested cues
- Fix seeking from Google Home app while casting
- Fix cancelation of pending network requests on load() and destroy()
- Fix pixelAspectRatio extraction from DASH
- Fix nested TTML captions with time offset
- Set explicit default font size for UI icons
- Correct license headers in compiled output and generated externs
Ad Features (BETA):
- Integration with Google IMA Ads SDK
- Ad-related UI elements
Offline Features:
- Allow offline downloads to be aborted
- Store creation time with offline assets
- Allow multiple concurrent storage operations on one Storage instance
- Make trackSelectionCallback async
- Allow storage of manifests that are missing inline init data
HLS Features:
- Add support for HLS Discontinuity
- Add support for multiple EXT-X-MAP tags
- Improve HLS startup latency
- Add variable substitution support to HLS parser
- Add a presentationDelay config for HLS live
UI Features:
- Expand translations: now available in 45 languages (18 built-in by default)
- Support setting source through HTML src attribute or source tag
- Large play button is configurable, and only shows on mobile UI by default
- Add playback speed selection to UI
- Add loop control element to UI
- Improve buffering spinner visibility
Subtitle/Caption Features:
- Add support for ebutts:linePadding in TTML
- Add support for cell resolution units and font percentage in TTML
- Add support for tts:border, tts:letterSpacing and tts:opacity in TTML
Other Features:
- Add API to set Cast content metadata in CastReceiver
- Add liveLatency to stats
- Allow configuration of presumed manifest accuracy, reduces extra fetches
- Take into account the playbackRate in bandwidth calculations
- Add check for E-AC3 JOC in DASH
- Improve startup performance by lazily creating segment indexes
- Support pre-standard DASH MIME type
- Allow running tests without Babel
Bugfixes:
- Fix background color of nested cues
- Fix seeking from Google Home app while casting
- Fix cancelation of pending network requests on load() and destroy()
Broken compatibility:
- Remove support for custom DASH ContentProtection schemas
- Signature for config callback "drm.initDataTransform" changed
Deprecated (with backward compatibility until v4.0):
- Uint8ArrayUtils.equal() moved to BufferUtils
- Factory methods are no longer called with "new"
- Config "manifest.dash.defaultPresentationDelay" moved to "manifest.defaultPresentationDelay"
- Storage.getStoreInProgress() deprecated (not needed with concurrent storage operations)
Removed after deprecation in v2.5:
- Player.selectEmbeddedTextTrack
- Player.usingEmbeddedTextTrack
- Player.getManifestUri (renamed to getAssetUri)
- load() factory parameter (replaced with MIME type parameter)
- Storage configuration fields (moved into Player config under "offline")
- UI getPlayer() moved to getControls().getPlayer()
Demo App Features:
- Added trick play controls option
- Add 'audio only' to the search terms
Bugfixes:
- Don't preload data on iOS
- Make the controls background gradient proportional
- Work around IE 11 bug in text region positioning
- Fix PlayReady key ID endianness for TiVo
- Fix shaka.log in debug builds
- Add support for null TS packets in HLS
- Fix live seek bar on touch screens
- Fix text track change after enabling text display
- Fix SegmentTimeline with t attribute missing.
- Fix various text positioning bugs
- Allow OPUS on Tizen 5 or higher
- Fix CEA caption extraction for b-frame content
- Fix module wrapper to prevent conflicting exports
New Features:
- Add option to customize the polling of expiration time
- Add new option manifest.hls.useFullSegmentsForStartTime
New Features:
- Add role information to text and audio tracks in src= mode
- Parse HLS CHARACTERISTICS attribute and populate track roles
- Recognize new CMAF file extensions cmfv, cmfa, cmft in HLS
- Add configuration to enable/disable fullscreen-on-rotate
- Add configuration to enable keyboard playback controls
- Dismiss UI overflow menus on window click
- Add non-standard DASH PlayReady UUID
Bugfixes:
- Fix FairPlay event handling
- Fix load() Promise hang on iOS
- Fix language normalization with native HLS
- Fix display of duplicate cues
- Fix TTML position parsing
- Fix display of line-positioned subtitles
- Update to mux.js 5.5.4 to fix closed caption parsing bug
- Fix language and role preferences in src= mode
- Fix extra text track in src= mode
- Fix Safari-prefixed fullscreen APIs
- Fix display of nested cues with native text display
- Fix getPlayheadTimeAsDate while loading/buffering
- Recover from timed-out Cast connection
- Fix DRM exceptions on WebOS TVs
- Fix frameRate restrictions
- Filter out metadata text tracks in Player tracks API
- Fix PlayRateController leak
- Fix buffer check in StallDetector
- Fix offline storage picking high-bandwidth codecs
- Fix nested TTML cues with non-ASCII characters
- Fix UI updates when enabling captions
- Fix ratechange events w/ src= playback
- Fix serialization of Error objects over Cast
- Fix missing EME polyfill in Cast receiver
- Use the module wrapper in debug builds
Docs:
- Fix broken docs for UI control events
- Add FAQ entry about minBufferTime
Demo App:
- Push demo app footer to the bottom of the page
New Features:
- Added 'doubleClickForFullscreen' config to UI
- Add 'loaded' event
- Update prerequisites script w/ new nodejs versions
- Export default text parser plugins
- Add config to show/hide unbuffered range at seek bar start
- Approximate segment size based on bandwidth when deciding to abort a request
- Always log config errors
- Make 'offline.trackSelectionCallback' async to allow the app to prompt the user or do other async checks
- Disable video when the media element is AUDIO
Bugfixes:
- Fix DRM-related issues on Tizen
- Fix exceptions with very large manifests on XBox One and possibly other consumer electronics platforms
- Fix UI exception joining existing Cast session
- Fix UTCTiming when autoCorrectDrift is off
- Fix EME polyfill exceptions on Edge
- Fix offline storage with some Widevine and PlayReady content
- Don't fire 'adaptation' event when not switching
- Fix rare exception in isTextTrackVisible()
- Fix bogus warnings about argument count in configs
- Fix duplicate DB objects when storing offline content
- Fix MIME type case sensitivity in HLS parser
- Fix changing UI Cast app ID to empty string
- Fix case sensitivity in TTML MIME types
- Fix exceptions for Video Futur platform
- Fix captions display alignment
- Fix Cast errors in compiled mode
Docs:
- Improve ClearKey examples
- Fix truncated UI tutorial
- Update offline.md
- Add additional links in error code reference
Demo App:
- Several service worker improvements and fixes
- Load pwacompat through npm
- Replace Live search boolean with a drop-down
- Renamed the "search" tab to "all content"
- Add search filters to the URL
- Work around Material Icons font bug
- Work around MDL button bug in iOS 13
Bugfixes:
- Fix PiP polyfill for iOS
- Ban iOS < 12
- Work around service worker registration hang on iOS
- Fix display of selected language in UI
- Fix race condition on HLS parser shutdown
- Fix StringUtils on Xbox One
- Fix selecting audio track by role when video tracks contain the same role
- Fix skipping of raw format streams in HLS
- Fix iPad 13+ detection
- Fix exception thrown for Chrome & Firefox on iOS
Docs:
- Fix typo in fairplay tutorial
Bugfixes:
- Recognize and reject raw AAC in HLS
- Fix fullscreen on Android
- Fix start time support in src= mode
- Add missing events to CastProxy Player
- Fix cast receiver UI update
New Features:
- Add corruptedFrames to stats
- Add framerate restriction to the config
- Add option to ignore empty AdaptationSets in DASH
- Add licenseTime to stats
- Add pixelAspectRatio property from DASH
- Add AirPlay support with native HLS and FairPlay
- Add option to show text/audio roles in UI
- Add "fadeDelay" option to delay fading UI controls
Demo App:
- Update asset list and metadata
New Features:
- Add audioSamplingRate property
- Ignore DASH image tracks
- Add AV1 check and more file extensions for src mode
- Allow removing text from manifests
- Allow ignoreSuggestedPresentationDelay in DASH
- Allow removing video from manifests
- Add a polyfill for EME encryption scheme queries
- Add support for ttml regions
- Add a method to select variants by label
Bugfixes:
- Fix shaka.polyfill missing in externs
- Fix width of overflow menu with wide content
- Disable indexedDB support if an error is thrown
- Fix setting robustness settings in DRM config
Bugfixes:
- Fix storing content with delayLicenseRequestUntilPlayed
- Fix check for captions in appendBuffer
- Allow 'rebufferingGoal' to change after startup
- Fix default encoding when reading files
- Throw for invalid TTML
- Fix FairPlay default initDataTransform
- Fix live seekbar on Android
- Fix undefined value in HLS request filters
- Fix Period transitions with embedded captions
- Throw error for clear-key content with src=
- Fix support for empty TTML data
- Fix multi-Period handling of key statuses
- Fix stall at end with src=
- Fix ttml background image support
New Features:
- Add config to use MSE playback on Safari
- Support storing protected content without init data in manifest
- Allow disable audio/video in manifest parsers
- Enhance ttml rendering
- Include event ID in DASH Event checks
- Add support for Label element in DASH
- Treat URL schemes as case-insensitive
- Forward change event from src= playback
- Export getMaxSegmentDuration() on presentationTimeline
- Ignore MIME parameters in Content-Type check
- Make seek & volume bar colors configurable
Demo App:
- Improve mobile Safari PWA support in demo
- Added tooltips to the search filters on the demo
- Added "report bug" button to demo
New Features:
- Conditionally remove FairPlay formatting
- Add sessionId field to network request
- Make it easier to add custom overflow menu items
- Add clearBufferOnQualityChange field to UI config
- Allow filtering out failed HLS text tracks
- Parse Accessibility tag into text "kind"
- Re-add MediaSession API
- Skip WebM streams in HLS instead of throwing
- Convert
<mspr:pro>
elements topssh
init data
Bugfixes:
- Fix duplicate resolution entries in UI menu
- Fix missing tracks, race on time during startup
- Fix spinner position on IE11
- Fix seek bar coloring when nothing buffered
- Fix scroll behavior on page load
- Don't create a UI if the app already has one
- Fix text display styling when fullscreen
- Don't enter fullscreen on double click on bottom bar
- Avoid errors when video ends
- Fix fullscreen behavior on double click and rotate
- Fix bug when clicking PIP button while casting
- Fix CEA captions with multi-Period content
Demo App:
- Added more HLS demo assets
- Exit PIP on unload in the demo
- Re-added hidden 'noinput' param to demo
Bugfixes:
- Default to transparent SMPTE-TT subtitle background
- Fix seek bar on iOS
- Allow whitespace in TTML subtitles
- Fix play button positioning on IE 11
- Match UI style with Chrome's native controls
- Stop constant spurious time updates in UI
- Fix volume slider jumping around while casting
- Fix missing seek bar in short VOD clips
- Fix demo app in Firefox private mode
- Ignore case in MIME type checks
- Fix problems with casting
New Features:
- Add command-line arg to change the test timeout.
Bugfixes:
- Fix DASH bug when ignoring minBufferTime
- Avoid changing variant when switching text lang
- Work around platform bug when seeking to end
- Allow apps to extend shaka.ui.Element
- Fix bug when adding text streams while not streaming text
- Fix edge case when switching text in multi-Period content
- Fix playback rate bug on IE11
- Make fast forwarding work when video is paused
- Fix stack overflow in StringUtils on some platforms
- Fix reading customData from standard Cast LOAD message
Docs:
- Fix constant name in UI tutorials
- Update build output name in docs
New Features:
- Use trick play for fast forward when browser doesn't support high playbackRate
Bugfixes:
- Avoid event listener leaks in the UI
- Fix style errors in TextDisplayer
- Show spinner when buffering even if other controls are hidden
- Don't recreate controls object on configure() calls
- Fix UI compilation on Windows
New Features:
- Add originalUri as a property on shaka.extern.Response
Demo App:
- Fix close button styling in compiled mode
- Fix config settings applied before playback begins
- Change the style of the download/delete button
- Fix demo error display for large errors
- Improve cvox error check
- Switch to using tippy.js for tooltips
Docs:
- Add a public roadmap document
New Features:
- Inline external CSS for quicker load
- You no longer need to include Material Design Icons font in your app
- Use clean-css plugin in less.js to minify CSS
Bugfixes:
- Deprecate ui.getPlayer for controls.getPlayer
- Fix switching text displayer mid-playback
- Improve french translations
- Improve logic for aborting network requests
- Fix initial bandwidth estimate on Chrome
- Upgrade mux.js and use minified version
- Fix exception on network retry
- Fix API-based UI setup with default config
- Allow two-argument configure() calls for UI and offline
- Add missing export on ui.Overlay.getConfiguration
- Various improvements in test reliability
- Various fixes for compatibility with newer compiler versions
Demo App:
- Fix asset card highlight on reload
- Fix reconnection to cast sessions on reload
- Fix handling of error events
- Fix centering of asset card titles
- Move download button to the corner of asset cards
- Add WebP variants for asset icons to reduce size by 88%
- Optimize app load time by pre-connecting to external origins
- Defer creating tab contents until shown
- Make name field in custom assets more permissive
- Add link to support page in footer
- Allow demo to load custom assets from hash
- Do not disable controls on startup
- Added missing config values
- Catch certificate errors in demo
- Let demo load even if storage fails to load
- Re-load current asset if page reloads
- Fix unsupported button tooltips
The UI is now out of beta! Use shaka-player.ui.js and see the UI tutorials.
Core Bugfixes:
- Fix missing variants in HLS
- Ignore manifest-provided license servers if application-provided servers are configured
- Fix range header regression that broke IIS compatibility
- Fix initial display of captions based on language preferences
- Ignore duplicate codecs in HLS
- Reject AES-128 HLS content with meaningful error
- Fix React Native createObjectURL polyfill incompatibility
- Dolby Vision fixes for Chromecast
- Fix redundant initialization of MediaSource
- Fix stalls on WebOS
- Fix missing require for SimpleTextDisplayer
- Fix broken version definition in compiled build
- Fix video reloading on audio language change
UI Bugfixes:
- Fix missing resolution menu in UI after playing audio-only content
- Fix pointer cursor on UI spacer
- Do not show PIP button if not allowed
- Fix hiding captions in UI text displayer
- Fix UI text displayer positioning on IE
- Make live stream timecode accessible to screen readers in the UI
- Fix ARIA pressed state for button in text selection menu
- Show picture-in-picture btn only when the content has video
- Fix multiline captions in UI text displayer
- Fix display of cast button in UI
- Fix conflict between PiP and fullscreen
- Fix cast receiver styling
New Core Features:
- Abort requests when network downgrading
- Add FairPlay support
- Add native HLS support on iOS and Safari
- Support src= for single-file playback
- Add 'manifestparsed' event for early access to manifest contents
- Add 'abrstatuschanged' event to help manage UI state
- Make manifest redirections sticky for updates
- Track time in "pause" state in stats
- Make Stall Detector Configurable
New UI Features:
- Add support for UI reconfiguration and layout changes
- Add support for custom UI buttons
- Add partial support for SMPTE-TT subtitles in UI text displayer
- Add PiP support in Safari
Demo App:
- Complete redesign of the demo app!
- Load non-built-in localizations from the server at runtime
- Ignore spurious errors from ChromeVox
- Don't handle non-app resources in service worker
Docs:
- Document UI events
- Update Manifest Parser documentation
- Clarify track selection callback in offline tutorial
- Fix jsdoc and markdown formatting of links
- Add link for Shaka Player Embedded
New Features:
- Introduction of Shaka Player UI library! (beta)
- Load dist/shaka-player.ui.js
- See tutorial in docs/tutorials/ui.md
- Add option to disable drift-tolerance feature for certain live streams
- Upgrade mux.js to the latest (5.1.0)
- Support HLS playlists without URI in EXT-X-MEDIA
- Add safeSeekOffset to StreamingConfiguration
- Add PlayReady license URL parsing (ms:laurl)
- Add support for HLS tags with both value and attributes
Bugfixes:
- Fixed various typos in comments and docs
- Fix CEA timestamps with presentationTimeOffset
- Fix config-based clock sync for IPR content
- Fix cast serialization of Uint8Array types
- Fix event dispatch when text tracks change
- Don't include video roles in audio-language-role pairs
- Fix MediaSource failures with certain language settings
- Fix build paths on Windows
Docs:
- Update docs to mention ignoreMinBufferTime
- Document restrictions on large timescales
- Various small docs improvements
Bugfixes:
- Reject opus content on Tizen
- Fix seekable range on HLS content with non-zero start time
Bugfixes:
- Fix HLS without URI attribute
- Handle prereleases of npm and node in build scripts
- Fix windows path handling in build scripts
- Fix cast receiver errors in getStats
- Fix spurious teardown exception on smart TVs
- Loosen gap thresholds on Chromecast
- Fix support for Safari 12
- Fix support for relative Location URLs in DASH
- Fix compliance issues in IE11 EME polyfill
- Fix PlayReady playback on Tizen
- Fix chopped playback in MS Edge
- Fix assertions when EME sessions expire
- Fix relative URIs in HLS
- Fix compilation error
New Features:
- Add extended error code for failed license request
Demo App:
- Disable offline storage on some assets
- Update DASH-IF livesim URLs
Contains everything in v2.4.5, plus...
Bugfixes:
- Fix Chromecast receiver id in the demo, broken since v2.5.0-beta
- Fix multi-period playback issues introduced in v2.5.0-beta
- Fix seekable range with non-zero start
- Misc Storage and demo fixes
- Fix support for restriction changes after playback
- Fix TextEngine buffered range calculations
New Features:
- Add support for CEA captions in DASH
- Set server certificate before Store and Delete
- Allow deferring deleting offline sessions.
- Added progress events for Fetch plugin.
- Add config field to ignore manifest minBufferTime #1547
- Add support for 'individualization-request' messages in EME
Docs:
- Update Language Normalization Documentation
Bugfixes:
- Fix erasure of the database with storage.deleteAll()
- Fix MediaSource tear down race
- Fix exception when destroying MediaSourceEngine twice
- Fix gap jumping test failures on IE/Edge/Tizen
- Fix stalls on Tizen TV
- Fix display of external subtitles
- Fix test failures on Safari
- Fix filtering of HLS audio-only content
- Preserve bandwidth estimate between loads
- Retry streaming when we get back online
- Fix Storage test contamination
- Fix advanced DRM settings pollution across key systems
- Fix TextEngine buffered range calculations
New Features:
- Optimize processXlinks
- Add support for Python3 in build scripts
- Allow new Periods to add EME init data
- Add namespace-aware parsing to TTML parser
- An external Promise polyfill is no longer required!
Demo App:
- Show logs prominently in noinput mode
- Disable uncompiled mode on browsers without async
- Restore using Enter key to load asset
Docs:
- Fix tracks sorting in Offline tutorial sample code
- Add a note about blank receiver IDs
- Rename 'video' to 'mediaElem' to make it clear that audio elements work, too
Un-Features:
- Un-ship VTTRegion support, which is currently broken in Chrome and does more harm than good
New Features:
- Drift is now tolerated in DASH live streams
- Storage can be initialized without Player
- DASH Representation IDs are now exposed in a new field in Track
- A safe margin parameter was added for clearing the buffer
- Added 'retry' event to networking engine
- Emsg not referenced in MPD will now be ignored
- Extra data given for RESTRICTIONS_CANNOT_BE_MET
- A mime type option was added to Player.load
- Added Widevine SAMPLE-AES support in HLS
- The |manifestUri| method on Player was changed to |assetUri|
- Added new request type TIMING for clock sync requests
Deprecated:
- Passing a ManifestParser factory to Player.load is deprecated and support will be removed in v3.0. Instead, please register any custom parsers with a MIME type, and pass a MIME type instead. MIME types can also be used to force the selection of any built-in manifest parsers.
- The |manifestUri| method on Player was changed to |assetUri|. The old method is deprecated and will be removed in v3.0.
Bugfixes:
- Fix spurious restrictions errors
- Don't error when skipping mp4 boxes with bad size
- Refactor HttpFetchPlugin to clarify error outcomes
- Avoid assertions about
$Time$ when it is not used - Stop proxying drmInfo() to reduce cast message sizes
- Fix compiler renaming in ParsedBox
Docs:
- Fixed docs for availabilityWindowOverride
New Features:
- Add availabilityWindowOverride configuration
Bugfixes:
- Fix repeated download of the same segment in live DASH
- Don't clear buffer with a small gap between playhead and buffer start
- Allow CDATA in text nodes.
- Skip text AdaptationSets with no segment info
- Add error code for side-loaded text with live streams
Demo app:
- Clarify persistent license error messages
Docs:
- Update docs for RESTRICTIONS_CANNOT_BE_MET
Bugfixes:
- Fix ignored configuration when input is partially invalid (v2.4.2 only)
- Silence DRM engine errors for unencrypted assets
- Fix infinite seeking with HLS on V1 Chromecasts
- Fix module wrapper to work with CommonJS, AMD, ES modules, as well as Closure and Electron
- Fix TextEngine buffered range calculations
Demo App:
- Fix custom encrypted assets in the demo app
Docs:
- Fix generated documentation problems (v2.4.2 only)
- Move CEA-608/708 to list of supported HLS features (v2.4.2 only)
Bugfixes:
- Default to a maximum of 360p for ABR when saveData == true
- Make AbrManager restrictions "soft" so they do not fail playback
- Patch Closure Compiler to fix polyfill+wrapper
- Fix assertion spam when merging a period into itself
- Upgrade WebDriver module to new W3C protocol, fixes WD tests on Firefox & IE
- Work around potential hang in transmuxer with multiplexed TS content.
Demo app:
- Support clearkey license-servers in the demo UI
Misc:
- Fix nodejs import (still not a supported environment, but does not throw)
New features:
- Support for TTML and VTT regions
- Support for CEA captions in TS content
- A video element is no longer required when
Player
is constructed - New
attach()
anddetach()
methods have been added toPlayer
to manage attachment to video elements - Allow apps to specify a preferred audio channel count
- Live stream playback can begin at a negative offset from the live edge
- Add new configure() syntax for easily setting single fields
- player.configure() returns false if player configuration is invalid
- Fetch is now preferred over XHR when available
- Request type now appears in shaka.util.Error data for HTTP errors
Broken compatibility:
- A third-party Promise polyfill is now required for IE 11 support
- Text parser plugins now take a nullable segmentStart in TextContext. All application-specific text-parsing plugins MUST be updated.
- Text-parsing plugins that produce region information must do so with the new CueRegion class. Any application-specific text-parsing plugins that produce region information MUST be updated.
- TextDisplayer plugins that handle region information must do so with the new CueRegion interface. Any application-specific TextDisplayer plugins that handle region information MUST be updated.
- The API for PresentationTimeline has changed. Manifest parser plugins that
use certain PresentationTimeline methods MUST be updated:
setAvailabilityStart()
was renamed tosetUserSeekStart()
.notifySegments()
now takes a reference array and a boolean calledisFirstPeriod
, instead of a period start time and a reference array.
Deprecated:
- NetworkingEngine.request() now returns an instance of IAbortableOperation
instead of Promise. Applications which make application-level requests
SHOULD update to use the new interface.
- The old interface will be removed in v2.5.
- Network scheme plugins now return an instance of IAbortableOperation instead
of Promise. Application-specific network scheme plugins SHOULD update to
the new interface.
- The old interface will be removed in v2.5.
Demo app:
- Improve support for custom assets and license servers in demo app URI
Misc:
- We have started transitioning the code to ES6 and the new JS style guide
Bugfixes:
- Fix non-default namespace names in DASH
- Fix use after destroy() in CastProxy
- Fix text track visibility state
- Remove licenses when wiping offline storage
- Restore backward compatibility for v2.2.x offline storage
Demo app:
- Update DASH-IF Big Buck Bunny asset
Docs:
- Fix typos and formatting
- Build docs as part of build/all.py
Bugfixes:
- Fixed manifest update frequency calculations
- Fixed repeated seeking during HLS live streaming on Chromecast
Demo app:
- Fixed updating of the app URL on Android when pasting into the custom asset field
- Added Axinom live test assets
Bugfixes:
- Handle HLS segments tags that occur before playlist tags
- Avoid telling AbrManager about key-system-restricted streams, to simplify building AbrManager plugins.
- Fixed exported enum definition for network plugin priorities
- Fixed ES5 strict mode compatibility in our module wrapper
Demo app:
- Fixed playback of VDMS assets by updating the license request details
New features:
- Do not buffer audio far ahead of video
Bugfixes:
- Fixed early seeking (immediately upon load)
- Fixed repeated seeking in HLS live (also affects DASH with timeShiftBufferDepth of zero)
- Fixed VTT+MP4 parsing with respect to TRUN box
- Fixed hang in StreamingEngine when playing at the left edge of the seek range on slow embedded devices
- Work around slow DASH parsing on embedded devices
Demo app:
- Fixed CSS for display on Chromecast and other TV devices
- Added "startTime" URL parameter for debugging purposes
New features:
- Support for non-standard DASH SegmentTemplate strings using formats other than "d" (such as "x" and "o").
Bugfixes:
- Fixed rapid seeking in zero-width seek ranges, such as in HLS live
- Fixed use of native controls for text display
- Fixed parsing of multiple 'emsg' boxes
Demo app:
- Added an "unload" button to the demo app
- Fixed enabling of TS assets in the demo app
Docs:
- Added a doc describing DASH manifests
- Fixed documentation of CONTENT_UNSUPPORTED_BY_BROWSER error
- Updated architecture diagrams
New features:
- Warn if parsing the date from UTCTiming fails
- Backpropagate language selections on track change
Bugfixes:
- Fix MP4+VTT in HLS
- Fix track selection during "streaming" event
- Work around MSE rounding errors in Edge
- shaka-project#1281
- Edge bug: https://bit.ly/2ttKiBU
- Fix IE stuck buffering at the end after replay
- Fix catastrophic backtracking in TTML text parser
- Fix infinite loop when jumping very small gaps
- Fix seek range for live content with less than a full availability window
- Remove misleading logging in DrmEngine#fillInDrmInfoDefaults
- Fix old text cues displayed after loading new text stream
- Fix truncated HLS duration with short text streams
- Fix DASH SegmentTemplate w/ duration
Docs:
- Fix out-of-date docs for error 6014 EXPIRED
- Simplify prerequisite installation on Linux
- Simplify the debugging tutorial
- Fix various typos
New features:
- Add Storage.deleteAll() to clear storage when database upgrades fail
- Make DASH default presentation delay configurable
Bugfixes:
- Fix stall during eviction with small bufferBehind values
- Fix deletion of offline licenses for demo content
- Fix compiler renaming in Player language APIs
- Rename Timeline events to include the "Event" suffix
Docs:
- Fix incorrect year in the change log
- Fix some bad annotations found while upgrading jsdoc
New features:
- All features released in 2.2.10, plus...
- DRM content is now implied by DRM config, fixes some ad insertion cases
- Add support for mp4a.40.34 mp3 in HLS
- Allow ES6 syntax
- Replaced deprecated gjslint with eslint
Bugfixes:
- All fixes released in 2.2.10, plus...
- Handle MPEGTS timestamp rollover issues, including WebVTT HLS
- Fix MP4 timescale assumptions in HLS
- Update muxjs to use new keepOriginalTimestamps option
- Avoids line-length limits when building on Windows
- Force JS files to use unix newlines on Windows
- Fix selection of text streams with no role
Docs:
- All fixes released in 2.2.10, plus...
- Fix upgrade guide links
New features:
- Update Widevine HLS parsing support for SAMPLE-AES-CTR
Bugfixes:
- Fix display of duration in Chrome cast dialog
- Compensate for rounding errors in multi-period manifests
- Delay gap-jumping until after seeking is complete
- Fix SegmentTemplate w/ duration for live
Docs:
- Add FAQ entry for file:// requests in Electron
- Fixed typos and extraneous tags
- Added missing @exportDoc annotations
New features:
- Support for HLS live streams
- Support for HLS VOD streams that do not start at t=0
- shaka-project#1011
- Previously supported through configuration, now automatic
- MPEG-2 TS content can be transmuxed to MP4 for playback on all browsers
- shaka-project#887
- Requires apps to load https://github.com/videojs/mux.js/
- Do not stream captions until they are shown
- Use NetworkInformation API to get initial bandwidth estimate
- Added a method to list language/role combinations
Demo app:
- The demo app is now a Progressive Web App (PWA) and can be used offline
- Lighthouse: improved page load latency, text contrast ratio, UI performance
- Roles can now be selected in the demo app
- Added quick links to change between compiled, debug, and uncompiled builds
Bugfixes:
- Fixed interpretation of EXT-X-START in HLS
- Fixed URI extension parsing in HLS
- Offline storage API can now download multiple items in parallel
Docs:
- FAQ, architecture diagrams, and tutorials have all been updated.
Broken compatibility:
- Text parser plugins now take a Uint8Array, not an ArrayBuffer. All application-specific text-parsing plugins MUST be updated.
Deprecated:
- The AbrManager configuration interfaces and plugin APIs which were deprecated in v2.2 have now been removed. Applications with custom AbrManager implementations MUST be upgraded to the v2.2 API now.
- The plugin interface for text parsers which was deprecated in v2.1 has now been removed.
- The
remove()
method onshaka.offline.Storage
now takes a URI instead of aStoredContent
instance. Applications which use offline storage SHOULD update to the new API. Support for the old argument will be removed in v2.4. - The
streaming.infiniteRetriesForLiveStreams
config was removed. Applications using this feature MUST use thestreaming.failureCallback
config and the methodplayer.retryStreaming()
instead.
Bugfixes:
- Fix excessive memory usage during storage
- Fix offline storage with temporary license
- Fix exception while casting
- Reduced bandwidth of cast messaging
- Fix exception when destroying TextDisplayer
- Fix presentationTimeOffset in SegmentTemplate
- Fix inconsistencies in text visibility across playbacks
- Work around bad header formatting in IE 11
- Fix Chromecast PlayReady playback
- Fix subtitle display with VTTRegion enabled in Chrome
Bugfixes:
- Do not allow seeking/startup at duration (bump back by 1s)
- Don't wait for sessions to close on DrmEngine.destroy
- Do not clear buffers on configuration changes unless required
- Ignore unsupported STYLE blocks in WebVTT
- Fix a null exception in CastReceiver.destroy
Demo app:
- Fix "ended" video control state on IE
- Fix updates to demo app URL hash on Edge & IE 11
- Fix demo app page-load race on IE 11
Bugfixes:
- Allow playhead to recover from drift
- Fix exception and race which prevented cast status updates
- Fix live broadcast startup issues
- Fix mis-detection of live streams as IPR
- Fix buffering of live streams while paused
Demo app:
- Add multi-DRM assets from VDMS
- Add certificate URI field in the custom asset section
- Fix broken HLS asset
- Update Widevine proxy URI
Docs:
- Refactor main README.md
- Fix build/README.md typo
- Fix typo in config tutorial
Bugfixes:
- Cancel network retries when the Player is destroyed
- Do not overwrite media from an earlier period when new period is shifted
- Do not assume same timescale in manifest and media
- Do not fail assertions when media references are shifted outside the period
- Fix custom builds which exclude text parsing plugins
Demo app:
- Rename demo "Autoplay" in demo UI to "Auto-load on page refresh"
New features:
- Add streaming event to allow reconfiguration before streaming starts
- Add method to get the parsed manifest structure
- Log about deprecated APIs, even in a compiled build with other logs disabled
Bugfixes:
- Fix interpretation of DASH presentationTimeOffset in SegmentBase
Bugfixes:
- Fix interpretation of DASH presentationTimeOffset in SegmentBase
Bugfixes:
- Don't enforce seek range while paused in live streams (stays paused)
- Fix start time in live streams
- Fix handling & transmission of errors from cast receiver to sender
Docs:
- Added a tutorial for the offline storage and playback APIs
New features:
- Publish an event when the CDM accepts a license
- Added assertions and logging to the debug build
- Added a debugging method on Player to get buffered ranges
Bugfixes:
- Fixed race between gap-jumping and seeking
- Fixed startTime == 0 in player.load()
- Avoid clearing buffer on configure unless restrictions change
- Fixed exceptions in the cast receiver demo
- Various fixes for concurrent use of CastProxy and related APIs
- Polyfilled various MediaSource issues on Safari 11
- Reject TS content on Safari due to MediaSource bugs
- Fixed stuck progress bar on cast receiver demo
Demo app:
- Rotating mobile devices triggers fullscreen mode
- Added robustness suggestions for Widevine
Docs:
- Fixed docs with regard to shaka.text namespace
New features:
- Support for MP4+TTML text streams with multiple MDAT boxes
Bugfixes:
- Fixed playback hangs in certain content due to rounding error
- Fixed exception when TextTrack mode is set to "disabled"
- Fixed subtitle failures in Safari
- Fixed renaming issues in compiled builds
- Fixed exceptions on Tizen 2016
- Fixed TTML region parsing
Demo app:
- Auto-select offline copy of an asset after storing it offline
- Removed YouTube-sourced assets, which were very outdated
- Added "Shaka Player History" live stream
Docs:
- Added CORS explanation to the docs
New features:
- Support MP4+TTML in HLS
Bugfixes:
- Fixed display of old text cues after loading new content
- Fixed text cue alignment in compiled mode
- Fixed exception triggered when storing offline content
- Fixed cast state when multiple cast senders exist at once
- Fixed several Cast UI issues
- Fixed (harmless) assertion failures on Cast receivers
Demo app:
- Demo UI on mobile now shows help text on store/delete button
Docs:
- Document lack of IE support on Windows 7
New features:
- Add support for EVENT type playlists in HLS
- Add new option for offline protected content without persistent licensing
- Allow applications to render their own text tracks
- Allow applications to control streaming retry behavior
- Add support for additional TTML styles
- Add channel count information for both DASH & HLS
- Add basic xlink support in DASH (actuate=onLoad only)
- Add API to limit playable/seekable range for VOD content.
- Add new error code for container/codec support issues
- The default ABR manager is much more configurable
- Add stream bandwidth info to variant tracks
- Add player.isAudioOnly()
- Expose presentation start time through player
- Add bandwidth info to switch history
- Improved Chromecast media queries
- Stricter runtime type-checking of EME cert configuration
Bugfixes:
- Fix flakiness in offline-related tests
Demo app:
- Added robustness fields to the UI
Docs:
- Updated upgrade guide for v2.2
Broken compatibility:
- The text-parsing plugin API has changed. Plugins now return shaka.text.Cue objects instead of VTTCue or TextTrackCue objects. All application-specific text-parsing plugins MUST be updated.
Deprecated:
- The configuration for a custom ABR manager has changed. Applications with
custom AbrManager implementations SHOULD now configure abrFactory instead of
abr.manager.
- shaka-project#744
- The old interface will be removed in v2.3.
- The config API for AbrManager has changed. setDefaultEstimate() and
setRestrictions() have been replaced with configure(). Applications with
custom AbrManager implementations SHOULD implement the new configure()
method.
- shaka-project#744
- The old interface will be removed in v2.3.
- The choice API for AbrManager has changed. chooseStreams() has been
replaced with chooseVariants(), and the switch callback now takes a variant.
- shaka-project#954
- The old interface will be removed in v2.3.
- The getTracks() and selectTrack() methods which were deprecated in v2.1 have now been removed.
Bugfixes:
- Add player.isAudioOnly() to fix flash of audio-only icon when casting
- Fix cast proxying of isAudioOnly and getMediaElement
Bugfixes:
- Fixed "Invalid argument" exceptions for subtitles in IE & Edge
- Fixed buffering at the end of the stream for some content in IE & Edge
- Fixed seeking with native controls in Edge
- Fixed role selection to clear audio buffer right away
Docs:
- Fixed a bug in the upgrade guide for selecting tracks and disabling ABR
New features:
- Add vp9, opus, and flac mp4 to probeSupport
Bugfixes:
- Never adapt across roles or languages
- Fix parsing byterange attribute in HlsParser
- Fix incorrect segment position after update in some DASH live streams
- Fix support for live streams with no seek range
- Fix display order of cues with identical ranges
- Fix missing cues in WVTT MP4s using default sample duration
- Accept non-integer settings in VTT
- Tolerate bandwidth of 0 or missing bandwidth
- Fix multiple pipeline flushes on some platforms
- Make it safe to install polyfills twice
Demo app:
- Fix compiled mode in the demo app. Does not affect the library. Removed defaultConfig_ reference in demo.
- Update license URI for PlayReady test asset
New features:
- Add more information to video errors in Chrome
Bugfixes:
- Fix key status problems on IE11 and Tizen TVs
- Fix period switching when streams are not yet available
- Filter out audio-only HLS variants that can't be switched to
- Fix parsing of Microsoft-packaged HLS content
- Fix rounding issues with multi-Period content
- Fix exceptions thrown in some cases when switching text tracks
- Fix DASH date parsing when timezone is missing
- Fix persistent storage detection on IE11 and Tizen TVs
- Fix test issues on Tizen
- Fix version detection when compiling from the NPM package
- Work around lack of key statuses on Tizen
Demo app:
- Fix missing fullscreen button on IE11
- Added configuration for gap jumping
Docs:
- Document HTTPS requirement for EME
- Update tutorials
- Add FAQ entry on EME robustness
- Update HLS FAQ
- Document that we test on Tizen TV now
New features:
- Allow role to be specified in selectAudioLanguage and selectTextLanguage
Bugfixes:
- Fix changing languages close to a period boundary
- Fix hang in load() when there are pending failures
- Fix DASH parser ignoring certain text streams
- Fix exceptions when side-loading text tracks
- Fix PlayReady support on Chromecast
- Fix version number issues during publication on NPM
- Fix pollution from npm on Windows
- Fix support for npm v5
Demo app:
- Fix control visibility in fullscreen mode on mobile phones
Docs:
- Updated welcome docs
- Updated list of supported platforms
- Updated FAQ
New features:
- Limit network retries for VOD, only retry forever on live
- Add stream IDs in getStats().switchHistory
- Add label attribute to tracks
- Expose role attributes on tracks
- Silence confusing browser-generated errors related to play()
Bugfixes:
- Fix offline storage in compiled mode
- Choose lowest-bandwidth codecs when multiple are possible
- Fix PlayReady on IE and Edge
- Fix rounding errors on IE11
- Clean up demo app loader
- Fix PlayReady test failures
New features:
- Make educated guesses about missing HLS info (CODECS no longer required)
- Add support for PlayReady on Chromecast and Tizen
Bugfixes:
- Fix flakiness in RESTRICTIONS_CANNOT_BE_MET errors
- Make isBrowserSupported more strict about MediaSource
- Fix detection of audio-only assets in the demo
- Fix exports and generated externs that were broken in v2.1.0 and v2.1.1
- Speed up deletion of offline content
Docs:
- Fix docs on subtitles and captions
- Add notes on adaptation to upgrade guide
Backported bugfixes from v2.1.x:
- Fix offline download stalls on Android
- Fix track restriction based on key status
- Fix exception in fullscreen polyfill on IE 11
- Fix exception when reconfiguring serverCertificate
New features:
- Separate audio and video codec in Track
- Make segment request to establish HLS media MIME type
Bugfixes:
- Fix exception in fullscreen polyfill on IE 11
- Fix exception when reconfiguring serverCertificate
- Don't fire 'trackschanged' event twice
- Fix track restriction based on key status
- Fix offline download stalls on Android
- Fix race condition in gap-jumping code
- Fix poster visibility in fullscreen mode
New features:
- Add basic HLS support
- VOD only
- Widevine & clear content only
- No support for CEA-708
- shaka-project#279
- Tolerate gaps in the presentation timeline and jump over them
- Add an indicator for critical errors
- Do not retry on HTTP 401/403 errors
- Expand player stats and track metadata
- Add loadLatency stat
- Add mimeType to tracks
- Track state changes (buffering, playing, paused, ended)
- DASH trick mode support
- Expose license expiration times through Player
- Add support for EventStream elements in DASH
- Add support for Chromecast Media Playback messages from generic senders
- Add config to ignore key system and init data in DASH manifest
- Add support for asynchronous response filters
- Filter duplicate initData from manifest by key ID
- Optionally adjust start time to segment boundary
- StringUtils and Uint8ArrayUtils are now exported, to make filters easier
- Add audio adaptation to default AbrManager
- Add an API to force the Chromecast to disconnect
- Add possibility to delay license request until playback is started
- Add API to get live stream position as Date
- Don't clear buffer if switching to the same stream
- Demo app permalink support through URL hash parameters
- Add a flag so scheme plugins can ask us to ignore cache hits for ABR
- Allow passing durations from scheme plugins to compute throughput
- Make ES6 imports easier
- Add separate restrictions to AbrManager
- Allow network plugins to see the request type
Bugfixes:
- Make language selection explicit
- Make text track visibility explicit
- Fix firing of 'trackschanged' event for multi-Period content
- Correct time parsing for MP4 VTT subtitles
- Fix playback of live when segments do not extend to the end of the Period
- Allow seeking to 0 in live streams
- Add explicit timestamps to 'emsg' events
- Fix playback of YouTube demo assets
- Allow text parsers to change during playback
Docs:
- Add offline storage to v2 upgrade guide
- Add additional docs for AbrManager
- Add manifest parser plugin tutorial
Broken Compatibility:
- Track types 'video' and 'audio' have been combined into 'variant'.
- Any application looking at track.type will need to be updated.
- Removed useRelativeCueTimestamps option
- All segmented WebVTT cue timestamps are now segment-relative
- shaka-project#726
- Plugin interface for text parsers has changed
- Both old & new interfaces still supported
- Support for old interface will be removed in v2.2
- Plugin interface for ManifestParser.start has changed
- Now takes an object with named parameters instead of positional params
- Both old & new interfaces still supported
- Support for old interface will be removed in v2.2
- Retired the INVALID_TTML error code
- Folded into the INVALID_XML error code
Bugfixes:
- Suppress controls UI updates when hidden
- Revert keyboard navigation changes in demo, failing on Firefox
New Features:
- Improved keyboard navigation in demo page for accessibility
- Play through small gaps at the start of the timeline
- Add a method for accessing the HTMLMediaElement from the Player
- Improved error reporting for HTTP errors
Bugfixes:
- Fixed a DASH compliance bug in SegmentList w/ presentationTimeOffset
- Fixed compiler renaming in emsg events.
- Fix period transitions where text streams may be absent
- Fix Firefox DRM detection
- Fix cleanup of expired EME sessions for offline
- Fix demo app error thrown when offline is not supported
- Fix infinite loop in offline storage of SegmentTemplate-based DASH
- Fix contamination between tests
New Features:
- Add Media Session info to demo
- Add support for xml:space in TTML parser
- Add fullscreenEnabled property to fullscreen polyfill
- Allow InbandEventStream elements at Representation level
- Warning for unsupported indexRange attribute
- Warning for duplicate Representation IDs
Bugfixes:
- Fix cast support broken since 2.0.3
- Fix timeout errors in cast demo
- Fix infinite buffering caused by a race
- Fix race in StreamingEngine for multi-Period content
- Hide the controls when going fullscreen on phones
- Improve calculation of
$TIME$ in SegmentTemplate - Fix YouTube asset on demo app
Bugfixes:
- Fix several bugs with multi-Period content
- Possible hang when seeking
- Fix race between buffering and Period transition
- Fix race between rapid Period transitions
- shaka-project#655
- Fix hang in destroy() when EME sessions are in a bad state
- Fix doubling of time offset for segment-relative cues
New features:
- Support for 4k on Chromecast Ultra
- Support for text tracks on Toshiba dTV
Bugfixes:
- Fixed buffering issues at the end of streams in IE/Edge
- Fixed parsing of empty divs in TTML
- Fixed subtle bug in Promise.resolve polyfill on IE
- Fixed test failures on Chromecast
Docs:
- Added additional docs for offline storage
- Updated and clarified debugging tutorial
New features:
- Treat HTTP 202 status codes as failures
Bugfixes:
- Fix race condition in StreamingEngine
- Fix race in load/unload in Player
- Update workarounds for Edge EME bugs
- Add missing events and methods to cast proxy
- Fix exclusion of standard features in custom builds
- Be more permissive of text failures
- Permit text parsing errors as well as streaming errors with the ignoreTextStreamFailures config option.
- Do not fail StreamingEngine startup because of text streams, regardless of config.
- shaka-project#635
- Fix selectTrack() call with no text tracks
- Fix buffering state for live streams (stop at live edge)
New features:
- Add support for Toshiba dTV
- TTML subtitles: Support for <br> inside a paragraph
- Parse TTML textAlign settings into align property of a VTTCue
- Improved test stability and coverage reports
Bugfixes:
- Fix DASH content type parsing
- Tolerate larger gaps at the start
- Fixes for TTML alignment, positioning and cue externs
- Keep ewma sampling from failing on 0 duration segments
- Allow text parsers to change during playback - shaka-project#571
- Fix playback when IE11 modifies the XML DOM
- Update MediaSource polyfills for Safari 10
- Throw explicit error on empty manifests
Docs:
- Link to error docs from the demo app
New features:
- Faster ABR decisions
- Add config option for using segment relative timestamps for VTT
- Log and ignore non-standard WebVTT settings instead of failing
- Make key IDs from the manifest available through DrmInfo
- Provide framerate and codecs information on video tracks
- Dispatch more useful network error when HEAD request fails
Bugfixes:
- Fix ABR quality issues when switching tracks (stutters, glitches, etc.)
- Keep user selected text track when switching audio
- Fix vtt with one digit hour
- Fix build scripts for Windows
- Fix buffering event delay
- Workaround bug in Edge buffered ranges
- Fix handling of internal-error key status
- Ignore trick mode tracks
- Fix AdaptationSetSwitching support
- Fix buffering logic when switching periods
- Use data URI content-type for manifest type detection
- Fix audio language changes on Chromecast
- Fix Chromecast receiver idle behavior when looping or replaying
- Fix exception-causing race when TextEngine is destroyed
Demo app improvements:
- Hide volume & mute buttons on mobile-sized screens
- Probe both MP4 and WebM support in DrmEngine
- Update Axinom test assets to v7
- Fix accessibility issues in the demo app
Docs:
- Rewrote the debugging tutorial
- Misc docs cleanup
The first full release of v2!
New features:
- Improved Chromecast support
- Cast from the built-in Chrome dialog as well as the video controls
- Use the built-in Chrome dialog to disconnect
- Support for in-progress recordings (IPR)
- Can be configured to tolerate text stream failures
- Ignore small gaps in the timeline
- Added EMSG box support
- Reduced test flakiness and improved test speed
- Improved VTT parsing
- Improved EME error reporting
- Improved demo app UI for touch screens
- Smaller demo app UI (video element above the fold on Nexus 5X)
Bugfixes:
- Fixed text-related issues in IE11
- Fixed a few live edge corner cases
- Fixed TTML parsing exceptions
- Fixed text encoding issues with subs
- Fixed issues with multi-period eviction
- Defined order of AdaptationSet preference (prefer high quality, low bw)
- Fixed support for manifests with multiple text formats
- Fixed support for DASH Representations with multiple Roles
- Fixed CSP compliance for Chrome apps
Planned features we cut:
- Cache-detecting bandwidth estimation
Restored Features from v1 Missing in v2.0.0-beta2:
- Offline storage and playback
- Clearkey license server support
New features:
- Built-in Chromecast support
- TTML text support
- TTML in MP4
- VTT in MP4
- Handle QuotaExceededError, automatically reduce buffering goals
- Faster template processing in DASH
- Bitrate upgrades take effect faster
- Add a specific error for missing license server URI
- Add adaptation events for language changes
- Don't treat network errors as fatal in StreamingEngine
- Provide the application access to DrmInfo structure
- Restructure test/ folder to mimic lib/ folder structure
- Upgrade closure compiler
- New logo!
Bugfixes:
- Revert ABR changes that caused bandwidth samples to be ignored
- Fix buffering of multi-period text
- Fix various ABR issues
- Fix stuck playback on seek
- Stop refreshing live manifests when unloaded
- Don't adapt between incompatible codecs (mp4a & ec-3)
- Fix race in player WRT external text tracks
- Fix Edge EME workarounds on IE11
- Work around Safari MSE bugs
- Fix relative paths in UTCTiming
- Fix source map paths on windows
- Improve demo app CSS on mobile
- Fix buffering state on unload
- Fix load/unload/destroy race conditions
- Reduce test flake (async tests still flakey on Safari)
- Fix context menu display in demo app
- Fix key status, session expiration, and DRM error dispatch
- Fix demo app play controls on Android
- Fix corner cases when seeking to the live edge
Docs:
- Add a license-wrapping tutorial
- Add track restriction docs
- Update track and adaptation docs
Broken Compatibility compared to v2.0.0-beta2:
- The asynchronous Player.support() has been replaced with the synchronous Player.isBrowserSupported() call
- AbrManager implementations must now handle a partial StreamSet map in chooseStreams()
- The wrong keys error has been dropped due to false positives
Restored Features from v1 Missing in v2.0.0-beta:
- Track restrictions API
- Custom controls demo for live
- Trick play demo
New features:
- Reduced startup latency
- Added player.resetConfiguration()
- Added response text to HTTP errors
- Demo controls redesigned with material design icons
- Emit an error if the wrong keys are retrieved
- Human-readable errors shown in demo app
- Cache-friendly bandwidth estimation
- Improved trick play and playbackRate support
- Allow apps to reset ABR manager estimates
- Support non-zero start times for VOD
Bugfixes:
- Fix playback of DASH with unaligned Representations
- Fixed race conditions on seek
- Improved drift handling
- Fixed stack overflow in StringUtils
- Improved live support
- Fixed player.addTextTrack
- Handle CDMs which don't support the same types MSE does
- Fix audio-only encrypted playback
- Fix renaming of event properties
- Warn about missing clock sync elements in live manfiests
- Add option for default clock sync URI
- Fix crash in TextEngine when subs are turned off
Docs:
- Shaka v2 upgrade guide
- Added enum values (not just names) to generated docs
Broken Compatibility compared to v2.0.0-beta:
- None!
Bugfixes:
- Always build the same input files to a stable output
- Properly extern the 'xhr' property of HTTP errors
New Features:
- DASH support for:
- Multi-Period content
- Location elements
- UTCTiming elements (for clock synchronization)
- Better browser compatibility
- Testing on Safari 9, IE 11, Edge, Firefox 45+, Opera, Chrome
- shaka-project#101
- New plugin and build system to extend Shaka
- Networking plugins
- Cache-friendly networking
- Limit memory usage by clearing old data from buffer
- Simpler, more mobile-friendly demo app
- New test assets
- Made play()/pause() independent of buffering
- Numerical error code system
- Distinguish between subtitle and caption tracks
- Separate audio & text language preferences
- Update timeShiftBufferDepth when updating the manifest
- Simplified clearkey setup using configure()
- Initial bandwidth is now configurable:
Bugfixes:
- Stopped using Date headers for clock sync
Docs:
- New tutorials!
Missing Features from v1 (to be added later):
- Custom controls demo for live streams
- Chromecast demo
- Trick play demo
- Track restrictions based on key status
- Offline support
Broken Compatibility:
- Almost everything! (v2 upgrade guide coming soon)
Bugfixes:
- Updated Promise polyfill with fixes backported from v2
- Fixed Edge EME compatibility & InvalidStateErrors
- Fixed HttpVideoSource use with clear content (Thanks, Sanborn!)
- Fixed uncompiled-mode performance regression introduced in v1.6.3
Features:
- Added opt_clearBufferOffset for audio (Thanks, Itay)
- Fetch segments from new location after manifest redirect (Thanks, Rob)
Bugfixes:
- Several IE11 stability issues and race conditions fixed
- Fixed incompatibilities when clearing the SourceBuffer
- Ignore spurious 'updateend' events
- Added stack-based messages to all assertions
- Fixed some unit test compatibility issues
- Fixed race conditions caused by Promise polyfill
- shaka-project#251
Docs:
- Update browser support docs with regard to IE & Firefox
Test app fixes:
- Fixed slider controls for IE11
- Turned off seek bar tooltips for IE11
Features:
- Added a new configure parameter to allow a user to completely disable the cache-buster. This is necessary for certain CDNs, but please note the tradeoffs before using. Bandwidth estimation can be adversely affected, particularly for low-bandwidth users.
Bugfixes:
- Fixed interpretation of startNumber for SegmentTemplate w/ duration.
Bugfixes:
- Fixed handling when all streams are removed in a manifest update.
- Fixed annotation mistakes in preparation for a new compiler release.
- Fixed Promise polyfill errors in compiled mode.
Features:
- Partial IE11 & PlayReady support. (Thanks, Jono!)
- shaka-project#176
- live and offline content not working
- non-zero start times not working
- IE11 fails to decode some test assets
- Added support for setPlaybackStartTime on live streams.
- Improved support for live streaming corner cases.
- Now builds with three different configs by default.
- Full build (all features enabled).
- DASH MP4 VOD. (Only DASH w/ SegmentBase, no WebM.)
- DASH MP4 live. (Only DASH w/o SegmentBase, no WebM.)
- shaka-project#116
- Changed startNumber implementation to be more consistent.
- Added a new Promise polyfill for IE11.
- Added support for WebM w/ unknown size in the Segment element.
Bugfixes:
- Expired sessions (for example, when using key rotation) are now cleaned up.
- Manifests can now be reprocessed without an update when availabilityStartTime passes.
Test app features:
- Added Chromecast support to the demo app. (No changes to the library for this.)
- Removed force-prefixed feature for improved IE11 support.
- Added links to the project and the docs.
Broken Compatibility:
- Removed Player methods deprecated since v1.5.0.
- enableAdaptation
- getAdaptationEnabled
- setStreamBufferSize
- getStreamBufferSize
- setLicenseRequestTimeout
- setMpdRequestTimeout
- setRangeRequestTimeout
- setPreferredLanguage
- setRestrictions
- getRestrictions
- shaka-project#203
- shaka-project#93
- Removed support for the old-style ContentProtection callback, deprecated since v1.5.0.
A roll-up of recent bugfixes.
Bugfixes:
- Fixed timestamp correction for some live streams from Elemental.
- Fixed support for manifests with different PSSHs per Representation.
- Fixed support for ContentProtection elements at both AdaptationSet and Representation level in the same manifest.
- Fixed support for bound DrmInfo callbacks.
- Fixed the 'enabled' flag of text tracks when manipulated directly by the video element.
- Fixed buffering to use the correct goal (minBufferTime) when re-buffering.
- Fixed a broken link in the documentation. (Thanks, Leandro.)
Test app features:
- Added a Widevine-encrypted version of the Sintel 4k test asset.
A roll-up of recent bugfixes.
Bugfixes:
- Fixed a major memory leak introduced in 1.5.0.
- Deleting encrypted offline content now deletes persistent sessions.
- Static content using SegmentTemplate is now truncated at the Period's duration.
- Key status error reporting is now more consistent and provides more information.
- Reduced flakiness in some tests.
- Requests used for clock sync no longer allow caching.
Features:
- Added method to set playback start time.
- Added a text-styling API.
- Added support for AdaptationSet groups.
- Added a new configuration API.
- License preprocessing can now modify HTTP method and server URL.
- Added an API to load captions not specified in the manifest.
- Added support for live streams using SegmentList.
- Added support for multiple BaseURL elements for failover.
- Gave IAbrManager implementation the ability to clear the buffer when switching streams.
- Added setNetworkCallback API to DashVideoSource to modify network requests.
- Improved error reporting for unplayable content.
- Added support for multiple DRM schemes per ContentProtection and simplified DRM scheme configuration.
- Improved documentation for license pre- and post-processing.
Bugfixes:
- Restricting all video tracks now fires an error event.
- Changing text tracks now fires an adaptation event.
- Fixed bad interactions between pausing and negative playback rates.
- Fixed support for negative r values in SegmentTimeline.
- Fixed bugs that could cause infinite buffering for certain configurations.
- Fixed exceptions fired during rapid Player destroy().
- Fixed linting with conflicting globally-installed copy of linter library.
- Fixed support for SegmentTimelines with presentationTimeOffset.
- Fixed support for apps/content which specify multiple DRM scheme configs.
Broken Compatibility:
- Removed Player methods deprecated since v1.3.0.
- getCurrentResolution
- getCurrentTime
- getDuration
- getMuted
- getVolume
- play
- pause
- requestFullscreen
- seek
- setMuted
- setVolume
- shaka-project#118
Deprecated:
- The following methods on Player are deprecated in favor of
configure()/getConfiguration() and will be removed in v1.6.0:
- enableAdaptation
- getAdaptationEnabled
- setStreamBufferSize
- getStreamBufferSize
- setLicenseRequestTimeout
- setMpdRequestTimeout
- setRangeRequestTimeout
- setPreferredLanguage
- setRestrictions
- getRestrictions
- shaka-project#93
- A new two-argument ContentProtectionCallback has been added to DashVideoSource, and the old style is deprecated and will be removed in v1.6.0.
A roll-up of recent bugfixes.
Bugfixes:
- Fix storage of duplicate session IDs for encrypted offline content.
- Specify EME sessionTypes, required in newer EME draft.
- Fix regression in rewind support, once more working outside buffered range.
- Support renamed output protection errors from newer EME draft.
- Fix seeking in custom controls on Android.
- Fix missing final chunk when storing certain videos for offline playback.
- Prevent crashing of module loaders which use 'define' but are not full AMD loaders.
Test app features:
- Added 'offline' URL param.
A roll-up of recent bugfixes and small improvements.
Bugfixes:
- An exception is no longer thrown from StreamVideoSource in uncompiled mode when the stream limits cannot be computed.
- Fixed support for multiple encrypted audio tracks.
- Fixed support for manifests that use SegmentList with a single URL.
- Fixed support for audio and video robustness settings in compiled mode.
- The MPD 'main' property is now defined in the correct class.
- The same initialization segment is no longer inserted multiple times into the SourceBuffer.
- Removed a race in Stream that could stop AdaptationEvents from firing.
- Stopped the compiler from renaming PersistentState and DistinctiveIdentifier enum values.
- Removed a race in Player.getStats() that could cause NaN stats.
- Fixed support to recover from failed segment requests.
- Made rewind, pause, play, and fast-forward consistent with normal video element behavior, the UI, and Player.setPlaybackRate().
- Improved seek handling during stream startup.
- Unnecessary seeking events during stream startup are no longer fired.
- Segment fetches are no longer retried if the Stream has been destroyed.
- Fixed support for offline in compiled mode.
Features:
- The version indicator on the demo page now displays the NPM version (if available) when the git version is unavailable.
- Added support to clear the audio buffer when switching tracks.
- Added the ability to detect and recover from multiple buffered ranges.
- Improved error messages when persistent licenses are not supported.
Testing:
- Reduced test flakiness overall.
- Certain (unavoidable) decode errors are now suppressed on Chrome Linux.
- Added waitUntilBuffered() function to help reduce test flakiness.
Code health release. Major refactoring of streaming logic.
Bugfixes:
- Overriding a license server URL in the test app no longer causes a PSSH from the MPD to be ignored.
- Fixed possible event listener leak.
Features:
- Player.destroy() now returns a Promise.
- DrmSchemeInfo now has distinctiveIdentifier, persistentState, and robustness parameters.
- Clarified buffering event policies.
- Added a license pre-processor.
- Added support for the MPD Location element.
- Custom BandwidthEstimators can now allow XHR caching.
- Added support for startNumber of 0, per the recent DASH spec corrigendum.
- Added support for server certificate APIs through DrmSchemeInfo.
- Major refactor of streaming. Switching representations is now faster and more flexible. Live stream seek ranges are more accurate.
- XHR timeout is now runtime-configurable.
- Buffering goals are now runtime-configurable.
- Alternative IAbrManager implementations can now be injected at runtime.
Test app features:
- Added "buffered ahead" and "buffered behind" indicators.
- Converted cycle buttons into checkboxes so cycling can be stopped during playback.
- Test app now jumps to live when the user clicks on the time code in a live stream.
- Added an example of a trick-play UI built on the Player API.
Testing:
- Disabled code coverage stats in unit tests by default.
- Split unit tests and integration tests into separate test runners.
- Added a Karma config file to make automated testing easier.
- Added checks for offline features to the support-testing page.
Documentation:
- Documented the fact that autoplay does not work on mobile, and why.
- Documented error events and how to handle them.
- Documented browser support and porting.
- Documented Player APIs for trick play interface.
A roll-up of recent bugfixes.
Bugfixes:
- Fixed case-sensitive scheme URI check in the test app.
- Fixed support-testing page for very old browsers.
- Fixed multi-lingual encrypted content.
- Fixed load-time exceptions in IE 9.
A roll-up of recent bugfixes and small improvements.
Bugfixes:
- Fixed some broken tests.
- Fixed buffering states.
- Fixed fullscreen polyfill installation.
- Fixed handling of live content with minimumUpdatePeriod of 0.
- Fixed selection of live content (type=dynamic).
- Fixed AJAX request timeouts.
- Fixed spec compliance for polyfilled session expiration.
- Fixed buffer time for offline playback.
- Fixed offline API consistency.
Features:
- Refactored and updated support test page.
- Simplified polyfill installation. (shaka.polyfill.installAll)
- New polyfill for CustomEvent.
- Small improvements to browser compatibility.
- (node.childNodes, node.textContent, currentScript, CSS fixes, etc.)
- Documented clock sync and CORS issues with live content.
- Documented JRE requirements.
- Test app now accepts a URL parameter to make ChromeCast testing easier.
- Stopped using deprecated methods in tests and tutorials.
- Added progress events for storing offline content.
- Documented offline APIs.
Feature release, introducing live streaming and offline playback.
Bugfixes:
- Fixed playback and buffering of streams whose index is inaccurate.
- Fixed EME spec compliance.
- Fixed FakeEventTarget exception handling.
- Fixed aggressive dead code stripping by the compiler.
- Fixed a bug in which subtitles were enabled by default without a subtitle language match.
Features:
- Added offline playback support.
- Added offline support for encrypted content (on platforms which support persistent licenses).
- Added live stream support.
- Added support for header-based clock synchronization.
- Added support for inheriting Segment{Base,List,Template} across levels in MPDs.
- Add polyfill support for fullscreen events.
- Updated EME usage to the March 12 draft.
- Added Player.getAdaptationEnabled().
- Added support for bandwidth restrictions and restrictions not based on license responses.
- Added support for requireJS and improved support for commonJS.
- Sped up integration tests and improved test robustness.
- Bandwidth estimates can now be persisted across playbacks.
- Custom bandwidth estimator objects can now be injected into the Player.
- Improved EME v0.1b polyfill consistency with native EME in Chrome.
- Improved buffering and underflow mechanisms.
- Improved error reporting if DRM info is missing.
- Improved robustness in the face of HTTP 404 and 410 errors during segment fetch.
- Improved documentation for Role tags and multilingual assets.
Test app features:
- Example player controls in the test app.
Deprecated:
- The following methods on Player are deprecated. They will be removed in
v1.4.0:
- getCurrentResolution() (replace with video.videoWidth & video.videoHeight)
- getCurrentTime()/seek() (replace with video.currentTime)
- getDuration() (replace with video.duration)
- getMuted()/setMuted() (replace with video.muted)
- getVolume()/setVolume() (replace with video.volume)
- play() (replace with video.play)
- pause() (replace with video.pause)
- requestFullscreen() (replace with video.requestFullscreen())
Broken compatibility:
- The license postprocessor callback is no longer given a Restrictions argument. See Player.getRestrictions()/setRestrictions().
- The suppressMultipleEvents flag has been dropped from DrmSchemeInfo, which changes the constructor signature. This flag interfered with key rotation.
A roll-up of recent bugfixes.
Bugfixes:
- Fixed consistency of setPlaybackRate(0).
- Fixed support for mp4a.40.5 audio content.
- Improved rewind accuracy.
- Fixed decode of query parameters in content URLs.
- Fixed FakeEventTarget for Chrome 43+.
- Removed flaky assertion in EME polyfill.
- Made AbrManager less aggressive.
- Fixed EME spec compatibility and encrypted playback in Chrome 43+.
Features:
- Added support for module.exports.
Test app features:
- Added a new 4k test asset.
Bugfixes:
- Version 1.2.1 had multiple issues with its version numbering. These are now corrected, but npm requires unique version numbers to publish. Version 1.2.1 has been pulled from npm.
Features:
- Added getAdaptationEnabled() to Player.
A roll-up of recent bugfixes, plus a few minor additions to the test app. Branched from v1.2.0.
Bugfixes:
- Try to recover from a streaming failure.
- Ignore spurious error events from the video tag.
- Update docs WRT content restrictions and folder organization.
- Fix clearkey errors in Chrome 42+.
- Fix computation of the number of segments in MpdProcessor.
- Only affects assets which use SegmentTemplate with a duration attribute.
Test app features:
- Rename a confusing asset.
- Add a button to cycle video tracks.
- Support MPD init data overrides for all DRM schemes.
Lots of internal refactoring and bugfixes, and a few new features.
Bugfixes:
- Buffer eviction no longer causes hangs on seek.
- Adaptation no longer causes hangs on looping and seeking backward.
- StreamStats no longer shows null for width and height before adaptation.
- Content with differing start times for the audio & video streams no longer exhibits A/V sync issues.
- DrmSchemeInfo's suppressMultipleEncryptedEvents flag is now correctly honored regardless of the timing of events.
- Calculations for the
$Time$ placeholder in MPD SegmentTemplates has been corrected. - The test app no longer causes mixed-content errors when served over HTTPS.
- Small mistakes in URLs and asset names in the test app have been corrected.
- Windows checkouts now have consistent newline style.
- Windows build steps documented.
Features:
- The isTypeSupported polyfill has been removed and all EME APIs have been updated to the Feb 9 2015 EME spec.
- Gaps and overlaps in SegmentTimeline are no longer treated as an error. Large gaps/overlaps will still generate a warning.
- HDCP-related failures are now translated into error events in Chrome 42+.
- The MPD Role tag is now supported as a way of indicating the main AdaptationSet for the purposes of language matching.
- More detail added to AJAX error events.
- The Player now dispatches buffering events.
- Parser support for the new v1 PSSH layout, including parsing of key IDs.
- The fullscreen polyfill has been updated and expanded.
- DashVideoSource refactored to split DASH-independent functionality into the generic StreamVideoSource. This should simplify the implementation of new video sources for non-DASH manifest formats. (Contributions welcome.)
- Automatic build numbering has been added, with version numbers appearing in the test app UI.
- The library has been published on npm and cdnjs.
- Release version numbering follows the semantic versioning spec.
Broken Compatibility:
- System IDs in PSSH objects are now hex strings instead of raw strings.
Maintenance release.
Bugfixes:
- The enabled flag for text tracks is now preserved when switching tracks. Player.enableTextTrack() is no longer required after selectTextTrack().
- The documentation for Player methods enableTextTrack, setPreferredLanguage, and getCurrentResolution has been corrected.
- The AbrManager class is now correctly destroyed.
- Clearkey support for Chrome 41+ has been fixed.
- A new polyfill has been added to compensate for Chrome 41+'s removal of MediaKeys.isTypeSupported.
- Several unused internal methods have been removed from the codebase.
- Fixed a failing assertion in one of the MediaKeys polyfills.
- Fixed failing code coverage analysis and related parse errors in several tests.
- Fixed support for MPDs with SegmentTemplate@duration and MPD@mediaPresentationDuration, but no Period@duration attribute.
Features:
- Tests are now checked for style.
- Tests have been expanded to increase coverage and exercise more Player
features:
- playback rate
- stats
- language preference
- license restrictions
- WebM/VP9
- error events
- Integration tests now run much faster.
- MediaKeys polyfills have received minor updates to improve compatibility with Chrome 41.
- New sample assets and code in app.js to demonstrate how to use a PSSH from an MPD to override what's in the content itself.
Broken Compatibility:
- None!
First public release.
Bugfixes:
- Text tracks are no longer ignored in MPD manifests.
- Adaptation decisions are now quicker and more reliable.
- (This bug was more noticeable on faster internet connections.)
- Playback no longer gets "stuck" on certain content.
- Playback no longer gets "stuck" after certain seek patterns.
- Player get/select/enable methods can now be called without a video source.
- A <video> tag's "videoWidth"/"videoHeight" attributes now update correctly on Chrome >= 40.
- Manual adaptation while paused no longer unpauses the video.
- Credentials can now be used on cross-domain license requests.
- Range headers are no longer sent for all segment requests.
- (This fixes issues with IIS.)
- A missing declaration of getVideoPlaybackQuality() has been added.
- The compiled code no longer pollutes the global namespace.
- DASH manifests using <SegmentList> are now parsed correctly.
- Formatting has been fixed in the "Shaka Player Development" tutorial.
Features:
- The Player is now reusable. You can call load() multiple times without calling destroy().
- The JS linter is now included in sources, fixing compatibility issues between versions.
- The test suite now includes playback integration tests.
- The Player has been updated to support the 01 Dec 2014 draft of the EME specification.
- The loader in load.js no longer makes assumptions about app.js. You can now use load.js to bootstrap other applications.
- The test app now uses less screen real estate.
- All custom events have been documented, and a new tutorial has been added to demonstrate how they can be used.
- The Player now has a support-check API to determine if the browser has all necessary features for playback.
- Sample code in the tutorials is now marked up to highlight changes from the previous sample.
- Code coverage in unit tests has been increased.
- Flakiness in unit tests has been reduced.
- DASH manifests using <SegmentTemplate> without a segment index or segment timeline are now supported.
- The DASH "presentationTimeOffset" attribute is now supported.
Broken Compatibility:
- ContentProtectionCallback no longer takes a "mimeType" argument.
- DrmSchemeInfo constructor no longer takes a "mimeType" argument.
- DrmSchemeInfo constructor's "initData" argument is now an object with fields instead of a Uint8Array.
- DrmSchemeInfo now takes a "withCredentials" argument.
- lib.js has been renamed to shaka-player.compiled.js.
Private beta release.