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.