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