Skip to content

Latest commit

 

History

History
1854 lines (1587 loc) · 74.3 KB

CHANGELOG.md

File metadata and controls

1854 lines (1587 loc) · 74.3 KB

2.2.8 (2017-12-06)

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

2.2.7 (2017-11-28)

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

2.2.6 (2017-11-14)

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"

2.2.5 (2017-11-02)

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

2.2.4 (2017-10-23)

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

2.2.3 (2017-10-17)

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

2.2.2 (2017-09-27)

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

2.2.1 (2017-09-01)

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

2.2.0 (2017-08-23)

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.
    • #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.
    • #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.
    • #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.

2.1.8 (2017-08-23)

Bugfixes:

  • Add player.isAudioOnly() to fix flash of audio-only icon when casting
  • Fix cast proxying of isAudioOnly and getMediaElement

2.1.7 (2017-08-14)

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

2.1.6 (2017-08-09)

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

2.1.5 (2017-07-17)

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

2.1.4 (2017-06-16)

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

2.1.3 (2017-06-06)

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

2.1.2 (2017-05-23)

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

2.0.9 (2017-05-10)

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

2.1.1 (2017-05-10)

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

2.1.0 (2017-04-25)

New features:

  • Add basic HLS support
    • VOD only
    • Widevine & clear content only
    • No support for CEA-708
    • #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
    • #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

2.0.8 (2017-04-07)

Bugfixes:

  • Suppress controls UI updates when hidden
  • Revert keyboard navigation changes in demo, failing on Firefox

2.0.7 (2017-03-29)

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

2.0.6 (2017-02-24)

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

2.0.5 (2017-01-30)

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
    • #655
  • Fix hang in destroy() when EME sessions are in a bad state
  • Fix doubling of time offset for segment-relative cues

2.0.4 (2017-01-24)

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

2.0.3 (2017-01-09)

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.
    • #635
  • Fix selectTrack() call with no text tracks
  • Fix buffering state for live streams (stop at live edge)

2.0.2 (2016-12-15)

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 - #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

2.0.1 (2016-10-26)

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

2.0.0 (2016-09-07)

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

2.0.0-beta3 (2016-07-29)

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

2.0.0-beta2 (2016-05-04)

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:

Broken Compatibility compared to v2.0.0-beta:

  • None!

1.6.5 (2016-04-08)

Bugfixes:

  • Always build the same input files to a stable output
  • Properly extern the 'xhr' property of HTTP errors

2.0.0-beta (2016-04-07)

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
    • #101
  • New plugin and build system to extend Shaka
  • 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)

1.6.4 (2016-03-03)

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

1.6.3 (2016-02-08)

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
    • #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

1.6.2 (2015-12-14)

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.

1.6.1 (2015-12-07)

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.

1.6.0 (2015-11-17)

Features:

  • Partial IE11 & PlayReady support. (Thanks, Jono!)
    • #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.)
    • #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
    • #203
    • #93
  • Removed support for the old-style ContentProtection callback, deprecated since v1.5.0.

1.5.2 (2015-11-12)

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.

1.5.1 (2015-10-07)

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.

1.5.0 (2015-09-17)

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
    • #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
    • #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.

1.4.2 (2015-09-04)

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.

1.4.1 (2015-08-18)

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 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.

1.4.0 (2015-07-06)

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.

1.3.2 (2015-07-06)

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.

1.3.1 (2015-05-22)

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.

1.3.0 (2015-04-16)

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.

1.2.3 (2015-04-07)

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.

1.2.2 (2015-03-11)

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.

1.2.1 (2015-03-10)

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.

1.2.0 (2015-02-24)

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.

1.1 (2015-01-14)

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!

1.0 (2014-12-19)

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.

0.1b (2014-11-21)

Private beta release.