NanoPlayer - Release History

[4.26.1]

Release Notes

With this patch version, we resolved an issue during player.setup that could cause an unhandled exception.

Changelog

Fixed

[4.26.0]

Release Notes

This version includes several improvements. Playback attempts on mobile devices failing due to visibility state hidden at load start will now result in a dedicated event 1009. This allows for clearer differentiation from other startup errors, such as network or stream issues 2003 Not enough media data received. Further we improved playback start behavior in iOS WebView apps, which require user interaction for video playback in their WebView settings. Now, if a playback attempt is rejected due to missing user interaction, the player will emit error 1005 early on, allowing the application to prompt the user for interaction more quickly. Refer to recommended settings for iOS WebView: https://docs.nanocosmos.de/docs/nanoplayer/nanoplayer_webview#ios. In general find more information about error codes here: https://docs.nanocosmos.de/docs/nanoplayer/nanoplayer_api#NanoPlayer..errorcode.

Changelog

Improved

Fixed

[4.25.1]

Release Notes

In this patch release we enhanced the observability of player metrics to better monitor and ensure quality of service when using the Bintu configuration.

Changelog

Improved

[4.25.0]

Release Notes

With this release, we've implemented handling for repeated switch stream failures by introducing cooldown functionality, thereby enhancing the robustness of stream switching. Additionally, we've strengthened access to video elements, ensuring more reliable and stable functionality. Furthermore, we've resolved issues related to preventing multiple 2004 errors and event order discrepancies when a bintu stream group is not live during setup. Lastly, we've addressed a random playback error occurring when keepConnection was enabled, ensuring a smoother playback experience.

Changelog

Added

Improved

Fixed

[4.24.3]

Release Notes

This patch release is enabling H5Live-HLS fallbacks when access to ManagedMediaSource API is denied for locally loaded webpages in iOS WKWebView.

Changelog

Fixed

[4.24.2]

Release Notes

This patch release addresses an autoplay issue occurring when the application called player.unmute() without user interaction context. This issue could result in black frames or errors during playback start if unmuted playback was not permitted. Further we enhanced the smoothness of stream switches specifically in H5Live-HLS mode, providing a better viewing experience for users.

Changelog

Fixed

Improved

[4.24.1]

Release Notes

The update addresses an issue where playback would become stuck after repeated stream switches or pause/play actions in H5Live-HLS mode on iOS devices. Specifically, the fix resolves problems encountered with H5Live-HLS fallback when using locally loaded web pages in iOS WKWebView.

Changelog

Fixed

[4.24.0]

Release Notes

This release comes with several improvements. We added the use of a new lean response option via the Bintu API, which improves response times. Further we improved the latency recovery during playback on desktop platforms when transitioning from a hidden to visible state, enhancing user experience. Moreover, we implemented measures to prevent buffering when quality adaptations occur in streams ingested via WebRTC, ensuring smoother streaming experiences. Additionally we improved the detection of iOS desktop mode and application of background suspension, ensuring consistent behavior across browsers and modes on iOS devices. Also we addressed a bug where stream switching failed while in a paused state with keepConnection and forcePlay options enabled, improving overall functionality and stability. We added a fix regarding the unintended fallback behavior in latency control mode fastadaptive to balancedadaptive for Safari versions 17.4 and above on MacOS Sonoma. The fallback was introduced in version 4.23.1. As a last point we enabled H5Live-HLS fallbacks when access to ManagedMediaSource API is denied for locally loaded webpages in iOS WKWebView.

Changelog

Improved

Fixed

Please find more about the latency control modes feature in our documentation

[4.23.1]

Release Notes

In this latest release, we're exited to introduce enhanced playback support through the Managed Media Source API (MMSE) for iOS 17.1 and above. By default, this feature provides an upgraded media playback experience in line with desktop and Android platforms, resulting in improved latency, faster start-up times, and an overall enhanced user experience. In the event that MMSE API is unsupported or disabled, H5live-HLS will seamlessly take over on iOS.

Moreover, we've expanded support for the latency control mode balancedadaptive across all iOS versions. This empowers users to achieve lower latency while ensuring a smooth playback experience on iOS devices. For more detailed information, refer to our comprehensive feature description in the documentation.

Additionally, this version includes a general enhancement to buffer and latency control for H5live-HLS playback on iOS. These improvements contribute to an even more refined and optimized playback experience.

Changelog

Added

Improved

Fixed

Please find more about the fast playback start feature in our documentation

[4.22.3]

Release Notes

This version is improving the detection of supported browsers for iOS WebView apps with customized user agent strings.

Changelog

Improved

[4.22.2]

Release Notes

This release introduces crucial improvements and fixes to elevate your streaming experience. We have addressed issues that had impacted playback on iOS devices, ensuring a smoother experience across various scenarios. This update focuses on improving playback latencies, stream switch buffering on iOS, fullscreen layout issues, and occasional exceptions during player destruction on iOS.

Changelog

Improved

Fixed

[4.22.1]

Release Notes

This version fixes a rare issue that could lead to incorrect startup stats, mainly occuring if the browser or tab was not visible in LOADING state.

Changelog

Fixed

[4.22.0]

Release Notes

This version is introducing the new Fast Start Mode feature that enhances playback start-up times with nanoStream Cloud. This cutting-edge addition allows you to significantly reduce startup times when initiating playback. Fast Start Mode can be enabled using the configuration setting config.playback.faststart. Please note that it is disabled by default, so you have full control over its activation. The unused option config.source.options.switch.fastStart has been deprecated.

Furthermore we have improved the Adaptive Bitrate (ABR) initial switch-up behavior in case of degraded network conditions. In addition, a layout issue that occured after exiting fullscreen mode in Safari 16.5 macOS has been fixed.

Changelog

Added

Improved

Fixed

Removed

Please find more about the media error recovery feature in our documentation

[4.21.0]

Release Notes

This release brings a range of enhancements and fixes to improve your experience. We have made adjustments to iOS buffer control to ensure best performance with iOS 17. All metrics events now include an event counter and an indication of Document.visibilityState to provide deeper insights into user interactions. Furthermore we've worked on enhancing iOS playback recovery. In case of network interruptions or degradations, the iOS playback will be recovered more smoothly. An issue has been resolved that previously led to a false positive PLAYING state on iOS during network interruptions. This will result in more accurate playback status representation. In addition we've addressed an issue that could occasionally lead to an incomplete or empty stats object in the onPlay event.

Changelog

Added

Improved

Fixed

[4.20.4]

Release Notes

This version fixes an issue that occurred when attempting media error recovery immediately after a switch stream fail on iOS. The issue was introduced in version 4.20.2. Additionally, an issue related to the interactionrequired error with code 1005 on iOS has been resolved. The onStreamInfo event will now be fired correctly before the onError and onPause events. This problem was introduced with the release of version 4.20.3.

Furthermore, a minor issue regarding the automute feature at delayed play attempts without prior or direct user interaction has been fixed. The same applies to unmute attempts without user interaction during playback, that was started in muted state. These attempts will now result in muted playback or, in the case of automute being disabled, in error 1005.

Changelog

Fixed

[4.20.3]

Release Notes

This version is fixing an issue in context of a media error occuring during an ongoing stream switch. The issue has been introduced in version 4.20.2.

Changelog

Fixed

[4.20.2]

Release Notes

This version is adding further improvements for error handling and automatic recovery on iOS. The improvements include detection and automatic recovery in cases of stalled video playback due to decoding issues and in cases of buffering errors that could formerly lead to playback stopping. For further informations see the feature description for media error recoveries and the errorcode definitions in the documentation.

Another improvement is related to updateSource API calls made during LOADING state. Until now, updateSource API calls made during LOADING state could run into a loading timeout, especially if initiated late in the loading phase. This will now be prevented by removing the loading timeout in case of an updateSource API call during LOADING state.

The current playback time values in onStats events are now increasing continuously without setbacks after stream switches and error recoveries on iOS to be consistent with other platforms.

Furthermore an issue related to failing rejections of unmuted autoplay on iOS has been fixed. The issue has been introduced in version 4.19.

Changelog

Added

Improved

Fixed

[4.19.2]

Release Notes

This version is introducing improvements for error handling and automatic recovery on iOS. Playback interruptions in context of stream switches in iOS low power mode have been fixed. Furthermore robustness for fullscreen handling in multi-player use cases has been increased. The improvement for classic playback on iOS 15 to avoid buffer impacts after adjusting latency has now been applied for iOS 16 as well. This was introduced in version 4.15.0.

Changelog

Improved

Fixed

Please find more about the stream group configuration feature in our documentation

Please find more about secure playback with JWT in our documentation

[4.18.0]

Release Notes

This version is introducing two new features.

Utilizing the new bintu stream group feature, it is now possible to configure an entire set of ABR streams by passing only the corresponding bintu stream group id via the player source configuration. This allows a much easier configuration for ABR playback. All existing options that are part of the configuration remain unchanged.

Please find more about the stream group configuration feature in our documentation.

Furthermore, this version is adding support for the new secure playback using JSON Web Token (JWT). The new token type can contain playback permissions for one or more stream names. This way a single token can be used for all secure use cases. It can be applied with the current entries configuration and with the new group configuration.

Please find more about secure playback with JWT in our documentation.

Since this version, the nanoStream Player will not attempt to autoplay non live streams configured via bintu stream ID or bintu group ID after the setup call. Instead it will pause with reason 'sourcestreamstopped' and emit the error event 2004 with message 'The source stream has been stopped.'. This will enable the nanoStream Player to properly initialize in the setup method and allow users to reattempt playback even if the stream was not in live state at the time of the initialization.

Changelog

Added

Improved

Please find more about the video processing feature in our documentation

[4.17.0]

Release Notes

This version is adding a new public event to the player. The event onActiveVideoElementChange is emitted when the active video element for playback has been created and if the element has been changed in case of a stream switch on iOS. The event data is providing the activeVideoElement and the complete videoElementList. Having a reference to the activeVideoElement simplifies use cases like drawing or rendering images to a canvas or saving snapshots from the video. See the api description of the event and our docs feature entry for more information.

Changelog

Added

[4.16.0]

Release Notes

This version adds the possibility to set a general H5Live server domain. A domain can be applied via config.source.general.serverDomain. This can be especially useful with configurations via source.defaults or bintu.streamid. By default, these configurations are using the standard geo-load-balanced domain namest. Please find further information in our documentation regarding this feature.

In addition an issue in relation to timed out stream switches has been fixed. Previously this could lead to a temporarily inconsistent internal stream state.

Changelog

Added

Fixed

[4.15.0]

Release Notes

This version is adding improvements for ABR playback. It implements a cooldown mechanism to control the next up-switch. Too frequent up- & down-switches will be prevented. This improves the user experience especially in case of slight but frequent buffer impacts e.g. in case of limited network ressources. Furthermore this release includes an improvement for classic playback on iOS 15 to avoid buffer impacts after adjusting latency. Also the visual switching behaviour on iOS has been improved to prevent a possible black frame effect.

Changelog

Added

Improved

Please find more about the latency control modes feature in our documentation

[4.14.2]

Release Notes

This release is solving issues related to the center view player controls and the layout in fullscreen mode. Previously in case the bottom control bar was disabled, the center view player control did not trigger related actions. It occured after a resize of the player e.g. upon entering the fullscreen mode or mobile device rotation. Furthermore a fullscreen layout issue has been resolved. Before, parts of the player were not being rendered inside of the display area under following circumstances: If CSS padding was set on the player div and the player's aspect ratio did not match the form factor of the screen.

Changelog

Fixed

[4.14.1]

Release Notes

This release introduces two new latency control modes targeting especially lowest latency use cases like live auctioning. The latency control mode can be selected via the added config.playback.latencyControlMode configuration parameter. The established latency control mode is available as the 'classic' option which remains to be the default mode. In addition the new latency control modes 'balancedadaptive' and 'fastadaptive' have been added. According to the current stream and network conditions they can adjust the latency adaptively. This allows to achieve a lower latency while keeping the playback experience smooth. Please find further information in our feature description in the documentation.

Changelog

Added

Improved

Please find more about the source defaults feature in our documentation

[4.13.3]

Release Notes

This version includes a fix for a potential CSS layout issue in iOS fullscreen mode, that could lead to page elements unintendedly being displayed above the video layer. The issue has been introduced in version 4.13.2.

Changelog

Fixed

[4.13.2]

Release Notes

This version provides an improvement for iOS metadata processing. The new mode is preventing occasionally delayed metadata on iOS and is enabled by default. To go back to legacy mode it can be disabled by setting the new parameter config.playback.metadataLowDelay to false. Also an issue with changing the metadata connection at stream switch on iOS with switch method 'client' has been solved. Further this patch includes a fix for a potential css related layout issue in iOS fullscreen mode.

Changelog

Improved

Fixed

[4.13.1]

Release Notes

This version includes a patch regarding the player's style.scaling configuration and updateSource. If style.scaling is set to a different value as default 'letterbox' e.g. 'crop' or 'fill' this setting will now always be preserved during an updateSource call. Before the player styling was falling back to default values after an server-side updateSource call if the new target stream name and the previous stream name were the same. Further an issue with updateSource in PAUSED state with source.options.switch.forcePlay set to false and ABR enabled is solved, preventing unintended switching in PAUSED state.

Changelog

Fixed

[4.13.0]

Release Notes

This version introduces the new source defaults feature that simplifies the source configuration by adding defaults.service to the config.source object. If a service is set, the h5live.server object and the h5live.rtmp.url in each entry can be omitted. In this case defaults will be applied internally. Values for h5live.server and/or h5live.rtmp.url that are defined explicitly in the entry have priority. The available value for defaults.service is 'bintu' for using the standard nanoStream Cloud. See our docs feature entry for more information. Furthermore this release includes improvements in preventing exceptions in case of DOM access restrictions or unreachable DOM elements. A last change is regarding the metrics module of the player. The minimum value of the metrics.statsInterval parameter has been raised to 5 seconds.

Changelog

Added

Improved

Changed

[4.12.1]

Release Notes

This version is fixing a layout issue in fullscreen mode on iOS that occurred if special CSS position settings in the page are used. It could happen that the player becomes invisible at first fullscreen entering. Furthermore it is containing a minor fix related to config source params object and multi stream configuration.

Changelog

Fixed

[4.12.0]

Release Notes

This version is adding the option to configure the minimum number steps during an ABR initialized switch down via the adaption.downStep parameter. Potential related use case are configurations containing a higher number of qualities or configurations with rather close rendition bitrates. The detection of the available buffer time has been improved for iOS in general and iOS 15 in particular. A timing related condition that could lead to buffering after a stream switch has been fixed. The start-buffer calculation in bufferDynamic mode has been fixed to prevent out of range values. Assigning null values to non mandatory configuration parameters will no longer lead to a setup error.

Changelog

Added

Improved

Fixed

[4.11.3]

Release Notes

This version is fixing a video layout issue on iOS that occurred in the integrated WebView of a major social media app. Furthermore it is containing a fix related to the display of the player control bar after tapping on older iOS versions 12 and lower. The issues have been introduced in version 4.10.6. Moreover an issue with poster scaling and aspect ratio changing of the player is solved.

Changelog

Improved

Fixed

[4.11.0]

Release Notes

This version is adding improvements to the fullscreen mode in general and in particular for iOS.

The player background color can now be customized for standard and fullscreen mode separately via the new configuration parameter config.style.fullScreenBackgroundColor. The default value is the standard background color config.style.backgroundColor.

The following improvements to the fullscreen mode have been added for iOS Safari and Chrome

Changelog

Added

Improved

Fixed

Please find more about the media error recovery feature in our documentation

[4.10.6]

Release Notes

This version implements a fix for an issue with the control bar appearing by tapping the player's surface on iOS. The control bar didn't appear by tap in PAUSED state with keepFrame disabled.

Changelog

Fixed

[4.10.5]

Release Notes

This version provides a fix for an error related to the player view. The issue occured in case of a rejected setup call or if the config.playback object was not defined in the configuration. The player view is enabled by default (config.style.view=true).

Changelog

Fixed

[4.10.4]

Release Notes

This version implements an automatic recovery workflow for certain media errors that can occure during playback. Recoverable errors are 3003, 3100 and 1008. The allowed number of recoveries within 60 seconds (default: 3) can be customized by the new config parameter playback.mediaErrorRecoveries. Further the support of the native HTMLMediaElement attribute crossOrigin is added and can be set via the new config parameter playback.crossOrigin. The values can be 'anonymous', 'use-credentials' and 'not-set' (default).

Part of this release are minor adjustments for metrics and an improvement of the Mac OS version detection. Also an issue with the interaction of the style.keepFrame and the style.poster (since 4.9.1) functionality is fixed. Now after a pause the last frame will be kept instead of displaying the poster image with keepFrame enabled.

Changelog

Added

Improved

Fixed

[4.9.2]

Release Notes

This version comes with several small improvements and fixes. An infinite loop related to error code 1004 is now prevented. It occurred if play or pause was triggered before the player setup was finished. This non-critical error 1004 has been changed now to a warning. Further providing the correct Mac OS X version for player metrics has been improved and a wrong detection of unsupported Chromium browsers on Mac OS X has been fixed (introduced in 4.9.1). Also an error on iOS with the keepConnection option enabled has been fixed.

For the view a small fix for the style option config.style.audioPlayer related to the displayed height on mobile devices has been done.

Changelog

Improved

Fixed

[4.9.1]

Release Notes

This version introduces a redesign of the player internal icons and control bar appearance including customizable colors and transparency. The default color scheme is providing a more modern and familiar look and feel. The symbol color can be customized via the config.style.symbolColor parameter (default: "rgba(244,233,233,1)"). The control bar background color can be customized via the config.style.controlBarColor parameter (default: "rgba(0,0,0,0.5)"). The given color string can be a valid css (case insensitive) keyword, hex code with/without alpha, rgb, rgba, hsl or hsla. Example values: "white", "#ffffff", "rgba(237,125,14,0.5)". The highlighting of the clickable buttons can be disabled via config.style.buttonHighlighting=false. The animation of the clickable buttons can be disabled via config.style.buttonAnimation=false. Also the cursor at button mouseover (default: "pointer") can be customized over config.style.buttonCursor by passing a valid css cursor keyword or url.

Furthermore support for poster images has been added. Poster images can be applied via the config.style.poster parameter. The string has to be a relative or absolute path to a valid "img" element source like "./assets/poster.png" or "https://[YOURDOMAIN]**/assets/poster.gif".

Changelog

Added

Improved

Fixed

[4.8.1]

Release Notes

This version improves the compatibility of the player. The 'toLocaleTimeString' functionality was replaced to avoid potential issues with javascript polyfills.

Changelog

Improved

[4.8.0]

Release Notes

This version introduces a new error code. In case the media element fires an error event without a specifc error code the new player error code 3200 with the message An unspecific media error occurred. will be passed in the onError event. Furthermore a WebSocket prototype polyfill is removed completely. This finally solves a compatibility issue with connection handling with angular/zone.

Changelog

Improved

Please find more about the fullscreen API feature in our documentation**

[4.7.8]

Release Notes

This version patches minor issues. One patch addresses a compatibility issue with angular zone.js. The other one improves the behaviour of internal iframe handling on iOS in case of unavailability.

Changelog

Improved

[4.7.6]

Release Notes

This version implements minor internal improvements for config validation and playback start. It also contains a fix related to playback suspension on iOS devices running Safari with activated desktop mode.

Furthermore, the default overlay controls are displayed properly on smaller screen widths.

Changelog

Improved

[4.7.1]

Release Notes

This version implements the fullscreen API which enables to request and exit the player's fullscreen mode. The new public event 'onFullscreenChange' indicates that the fullscreen mode has been changed.

The animations and icons in the center of the player can now be independently enabled or disabled by setting the new style.centerView config property to either true or false.

Changelog

Added

[4.6.1]

Release Notes

By enabling the source.options.switch.forcePlay config property a paused playback starts after the execution of a 'switchStream' or 'updateSource' request. This obviates the need for an additional play call. To improve the overall switching behavior paused switch completion has been added, meaning a pending 'switchStream' or 'updateSource' request will be completed as the player enters the paused state. The related completion event either 'switchStreamSuccess' or 'updateSourceSuccess' will be emitted to the application level.

This version prevents an occasional CPU load issue on Firefox. To provide additional information to the client metrics the new public event 'onServerInfo' has been added. Version 4.6.1 implements an updated version of the Bintu-Client API internally.

Changelog

Added

Improved

[4.5.6]

Release Notes

This version contains improvements for stream swiching, buffering metrics validation and connection flags.

Changelog

Improved

[4.5.2]

Release Notes

This version contains a minor internal metrics adjustment.

Changelog

Improved

[4.5.1]

Release Notes

This version implements seamless ABR and stream switching for iOS and iPadOS devices which works with 2 video elements internally. In special use cases where external video elements are used for playback an array of maximal two external video element IDs can be provided via the playback.videoId config property. Important note: On iOS devices the default z-index of the video layer had to be changed from 0 to 1. In case of using custom controls or overlays please make sure to use a z-index > 1.

The new ABR mode, adaption rule, 'deviationOfMean2' has been added. The new rule is slightly less strict and especially recommended for streams that are already more volatile on the source/ingest side.

This version adjusts the default timeout for the update source request to 20 seconds to improve the overall switching behavior.

The style.displayMutedAutoplay config property is re-enabled which shows a muted audio symbol in case of muted autoplay. The style.displayMutedAutoplay option can be disabled to maintain the recent behaviour. The handling of mute states and autoplay has been improved.

Changelog

Added

Improved

[4.3.2]

Release Notes

This version introduces the 'setAdaption' API to switch between adaption rules (ex. enable/disable ABR). Furthermore, this version implements optimizations for the ABR feature and minor internal, config and metrics adjustments. Additionally, this version prevents non-critical console errors during initialization and fixes a timeout error during client-side switchStream/updateSource.

Please find more about setAdaption API here.

Changelog

Added

Improved

Fixed

[4.2.5]

Release Notes

This version handles the usage of metrics with the old deprecated single stream configuration over 'config.source.h5live'.

See here for detailed information about the new stream configuration.

Changelog

Fixed

[4.2.4]

Release Notes

This version removes a warning in case only a single stream is configured.

Changelog

Improved

[4.2.3]

Release Notes

This version handles a timestamp offset caused by stream switching to make correct time operations.

Changelog

Fixed

[4.2.2]

Release Notes

This version comes with further ABR and internal improvements and also corrects switch related parts.

Changelog

Improved

Fixed

[4.2.1]

Release Notes

This version communicates additional switchStream and updateSource API related data to the metrics service. Furthermore, the ABR prediction cycle is improved to reduce load.

Changelog

Improved

[4.2.0]

Release Notes

This version implements the communication of switchStream and updateSource API events and data to the metrics service. In addition the internal 'streamInfo' event flow is improved and detailed stream information propagated through the event object.

Please find more about the stream switching & ABR feature in our documentation.

Changelog

Added

Improved

[4.1.4]

Release Notes

This version contains a fix for an buffering state error on iOS if static buffer tweaks are set. Now higher 'min' values doesn't lead into unrecoverable buffering.

Changelog

Fixed

[4.1.3]

Release Notes

This version implements a fix for an ‘Unhandled Promise Rejection’ error on iOS in the context of play/pause and updateSource/switchStream interactions. Furthermore, this version fixes a bug on MacOSX Mojave during buffer underrun where the playing state is not changed to ‘buffering’ which then breaks the playback.

Changelog

Fixed

[4.1.2]

Release Notes

This version implements a fix to support the regular config as well as an adaptive config to setup the player.

Changelog

Fixed

[4.1.1]

Release Notes

This version implements fixes to support the initial switchUp on iOS devices.

Changelog

Fixed

[4.1.0]

Release Notes

This version introduces adaptive bitrate (ABR) playback where the player switches between a set of streams with different qualities to accommodate challenging network situations and avoid buffering and frame drops. A set of stream sources (entries) is expected inside the 'entries' array of the config's 'source' object. Each entry represents an indexed quality step starting with the highest quality at index 0. The 'startIndex' property sets the entry that should be used for inializing the playback. The config's 'source' object now holds an 'options' object to set the ABR 'rule' (algorithm) inside the 'adaption' object and the switch options inside the 'switch' object. To manually switch between entries the new 'switchStream' API is used which comes along with 4 new public events and error codes.

Please find more about the stream switching & ABR feature in our documentation.

Changelog

Improved

[4.0.8]

Release Notes

This version contains an improvement of the buffer state detection on Mac OS X Mojave and iOS. Non critical ‘Unhandled Promise Rejection’ logs on iOS during play/pause interactions are now being prevented.

Changelog

Improved

[4.0.7]

Release Notes

This version patches an issue with iOS 10 playing state detection and the buffer control for hls playback in general. Now playback stats will be correctly used for hls playback to indicate PLAYING and to control the buffer. This issue was introduced with the major player version 4 and doesn't effect older major versions (3 or less). Also a duplicated module declaration is removed to ensure stable builds and a small scope issue is fixed.

Changelog

Fixed

[4.0.4]

Release Notes

This version contains an improvement for the detection of supported browser types and versions. It furthermore contains an improvement for playback in iPadOS desktop browsing mode, to correctly detect H5Live MSE or LL-HLS modes for playback.

Changelog

Improved

[4.0.2]

Release Notes

BREAKING CHANGE

The new nanoStream H5Live Player version 4 brings an updated stream switch feature. We improved the old 'updateSource' functionality by the possibility to switch to another stream by server-side switch and a better client-side switch. Now the switch to another source is much more smoother and faster. The old behaviour with stopping the player by reason 'playbackrestart' and restart playback with the new source is removed except for iOS.

Please find more about the new feature in our documentation.

Changelog

Improved

Removed

[3.18.7]

Release Notes

This version contains an improvement for the detection of supported browser types and versions.

Changelog

Improved

[3.18.6]

Release Notes

This version contains an improvement for playback in iPadOS desktop browsing mode, to correctly detect H5Live MSE or LL-HLS modes for playback.

Changelog

Improved

[3.18.5]

Release Notes

This version patches the usage of the 'params' object of the config source object. Now it isn't necessary to pass 'url' & 'stream' if no 'source.h5live.rtmp' object is present.

Changelog

Fixed

[3.18.4]

Release Notes

This version fixes a small bug with buffer config validation.

Changelog

Fixed

[3.18.3]

Release Notes

This version brings an improvement for the playback stability under higher cpu/gpu load influence like heavy load in browsers caused by complex WebGL animations.

Changelog

Improved

[3.18.2]

Release Notes

This release is adding two configuration options to the config.style section. style.backgroundColor allows custom background colors via the config. style.fullScreenControl allows to show/hide the full-screen button in the inline player controls.

Changelog

Added

config.style.backgroundColor = 'black'
config.style.fullScreenControl = true

Improved

[3.18.1]

Release Notes

This release brings the possibility to allow H5Live low latency HLS playback as fallback for Safari on Mac OS X. If enabled the player will decide for Safari Mac OS X the playback method and utilize H5Live low latency HLS if appropriate. Another feature is that we added the quality stats to the metrics stats event. Also several little patches are included in this release. Now for bintu sources without explicit 'h5live' playout object in the response the rtmp object will be choosen and a missing server object in the h5live config will be catched. An 'undefined' error at destroy is fixed too. Now also playback will always be recovered on Edge if frames are dropped and the player is visible.

Changelog

Added

config.playback.allowSafariHlsFallback = true

Fixed

[3.17.4]

Release Notes

This release improves and stabilizes the metrics play event stats collection, the playback stats collection and the general metrics event error handling. There are some checks added to avoid playback interupts in case of metrics collection errors. Further the stats object in the flash fallback is updated with all possible properties. Before this resulted in an error at metrics collection.

Changelog

Improved

Fixed

[3.17.3]

Release Notes

This release contains several patches. One patch fixes a potential problem with autoplay policies regarding the play promise implementation of certain browsers. The main problem were side effects with the promise wrapper of the player and some third party libs which manipulate promises. In this cases the promise always resolved, also in case of an play start error. Another patch addresses a bug in Microsoft Edge 18. We removed the 'MediaSource.isTypeSupported' check for all Edge versions because of an inconsistancy in Edge 18. Further a bug in the 'updateSource' function for iOS is fixed. Also now the full screen icon on Chrome changes correctly.

Changelog

Fixed

[3.17.2]

Release Notes

This release patches an issue with metrics fields type. Now the fields 'accountId', 'accountKey', 'userId', 'eventId', and 'customField1' - 'customField10' must be of type String. If one of the mentioned fields has a different type, it will be silently converted to String.

Changelog

Fixed

[3.17.1]

Release Notes

With this release comes a new feature. We added new error codes and pause reasons. The errors that can occure during 'loading', 'buffering' and 'playing' state are now more specific regarding the root cause. We added the error code 1009 for playback fail in case of visibility hidden e.g. open a link as unfocused tab (ctrl + click). In this case the pause reason is 'visibilityhidden'. Further not only error 2001 'stream not found' can happen with the loading timeout. If the stream was already connected and the stream info event was fired but not enough data was received the new error code 2003 will be fired. The new pause reason in this case is 'notenoughdata'. Another new error code is 2004 that will be fired if the source stream has been stopped. This can happen during 'loading', 'buffering' and 'playing' state and results in a pause with reason 'sourcestreamstopped'. The last new error is 3100, a media error, that will be fired if the media source extension (exclude iOS) changes it's state to 'ended'. The pause reason is 'playbackerror'. For further informations see the definitions for 'errorcode' (https://demo.nanocosmos.de/nanoplayer/docs/nanoplayer/NanoPlayer.html#toc21__anchor) and 'pausereason' (https://demo.nanocosmos.de/nanoplayer/docs/nanoplayer/NanoPlayer.html#toc22__anchor). In addition we improved the h5live support detection and fixed with the behaviour on error code 3003 (MEDIA_DECODE_ERROR). Now the player don't try to replay automatically.

Changelog

Added

Improved

Fixed

[3.16.0]

Release Notes

This release introduces new features and several patches. Now it's possible to configure playback timeouts via the new 'config.playback.timeouts' object. You can set timeouts for 'loading' and 'buffering' in a range of 10-60 seconds (default: 20) and for 'connecting' in a range of 5-30 seconds (default: 5). If the timeouts are reached, an error will be thrown and the player stops. Another feature addresses the metrics. Now also the 'LOADING' event will be sent. Furthermore if the player restarts in case of 'updateSource' while in playing state the pause event will be triggered with the new pause reason 'playbackrestart' before the replay attempt. The new version includes patches for the full screen functionality in general and for Internet Explorer (IE) in special. General the full screen icon changes now if exited by ESC and for IE the size is now correctly measured. Another patch fixes the volume change by the controls in IE. Two patches address the bintu service. The first one fixes a bug if the view is disabled and the bintu stream is not live or the services rejects. Now no view will be created in case of an bintu error. The other one enables to use 'updateSource' with a bintu source. In general now within the 'updateSource' promise the error handling is improved too. Further there are patches for displaying muted autoplay correctly and hiding the playbutton in the middle if switching streams using 'updateSource' while playing.

Changelog

Added

config.playback.timeouts = {
    loading: 20,
    buffering: 20,
    connecting: 5
}

Fixed

[3.15.6]

Release Notes

This version addresses an issue with the full screen functionality on iOS Safari. The player now can go full screen within nested iframes. NOTE: The iframe(s) must have the attribute 'allowfullscreen="allowfullscreen|true"]**' or just 'allowfullscreen'. Another issue adressed is the handling of stable playback after viewport lost on IE/Edge. Here the detection is improved to prevent misbehaviour in case of not related framedropping.

Changelog

Fixed

[3.15.5]

Release Notes

This release patches an issue with the config handling. Now a copy of the config will be used for the setup instead of pointer.

Changelog

Fixed

[3.15.4]

Release Notes

This release patches an issue with bintu sources. Now after a successful bintu call the parsed rtmp config will be passed correctly. This issue was introduced in version 3.15.3.

Changelog

Fixed

[3.15.3]

Release Notes

With this release come new features and some patches. One feature is about firing 'onError' with new error codes in case of a setup error. See the docs for more information (https://demo.nanocosmos.de/nanoplayer/docs/nanoplayer/NanoPlayer.html#toc21__anchor). Also a warnings will be fired if config properties are not valid or from wrong type. The other introduces a new metrics api which enables internal event logging and data aggregation with a nanocosmos backend. Please contact our sales team (mailto:sales@nanocosmos.de) for more information and see './js/nanoplayer-metrics-config.js' in the 'Demo Package'. This release also includes patches for IE/Edge regarding play stats and stable playback after viewport lost. Now also 'Windows 10' will be detected correctly and on 'Destroy' pause will be fired only if playing.

Changelog

Added

config.metrics = {
    accountId: 'myId',
    accountKey: 'sdfhe457zsjhnrtzd8',
    userId: 'myUserId',
    eventId: 'myEventId',
    statsInterval: 10,
    customField1: 'custom',
    customField2: 42,
    customField3: true
}

Fixed

[3.14.1]

Release Notes

This version comes with some new features. The first one addresses the public 'onPlay' event. Now some startup stats will be passed in the event object. These values represent the different states during startup from 'connecting', 'connected', 'firstFragmentReceived', 'firstFrameRendered', 'playable' and at least 'playing', the total startup time. The second feature is the new public event 'onDestroy'. This event is fired when the player is destroyed. In relation to that new feature we introduced the new pause reason 'destroy'. If the player is playing on destroy, the player will be paused with this new reason.

Changelog

Added

{
    "stats": {
        "connecting": 0,
        "connected": 267,
        "firstFragmentReceived": 1865,
        "firstFrameRendered": 2028,
        "playable": 2029,
        "playing": 2448
    }
}

[3.13.5]

Release Notes

This version improves the demo page. One part is to use 'updateSource' for bintu multistream functionality.

Changelog

Improved

[3.13.3]

Release Notes

This version addresses an issue with mimetype changes on 'updateSource'. Now it can be switched between different mimetypes e.g. video/audio and video only.

Changelog

Fixed

[3.13.2]

Release Notes

This version brings a new feature. Now it's possible to change the source without call setup again. The new feature is available over the new public function 'player.updateSource', which is a Promise.

Changelog

Added

player.updateSource(source).then(function (config) {
    console.log('update source ok with config: ' + JSON.stringify(config));
}, function (error) {
    console.log(error);
});

[3.12.5]

Release Notes

This version corrects two small issues. The playback wasn't stopped on iOS on tab change. Now on every 'focus lost' on mobile devices the playback will be paused with reason 'playbacksuspended'. The second fix addresses the 'playback started' detection on iOS.

Changelog

Fixed

[3.12.4]

Release Notes

In this version an issue with the loading icon is handled. The loading icon didn't disappear on play of video only streams. The issue was introduced with the previous version and only affected video only streams.

Changelog

Fixed

[3.12.3]

Release Notes

One part of this release addresses the correct indication of an audio symbol in case of muted autoplay or audio only. The second issue that is adressed handles the muted state on reset after an unsuccessful (denied) muted autoplay (automuted) on iOS. The last improvement is related to the behaviour in case of multiple destroy calls.

Changelog

Fixed

[3.12.2]

Release Notes

This version fixes the default value of the new config option 'playback.automute'. It is disabled by default.

Changelog

Fixed

[3.12.1]

Release Notes

This version fixes an issue related to repeated setup calls without destroy calls in between. Now during the setup call a destroy/clean up will be performed internally if required.

Changelog

Fixed

[3.12.0]

Release Notes

This version brings a new feature for autoplay. There is a new option 'config.playback.automute' (disabled by default) which enables muted autoplay on browsers with autoplay policies. In case the play call is rejected by a policy the player will be muted to autoplay. Another feature is the option 'config.style.displayMutedAutoplay' (enabled by default) which shows a muted symbol if playback was started with autoplay and muted. There is also a small fix for detecting playing state on iOS.

Changelog

Added

Fixed

[3.11.0]

Release Notes

This version introduces a new event 'onStreamInfoUpdate' to indicate stream format changes. The event object is the same like in 'onStreamInfo' with the changed values

Changelog

Added

[3.10.3]

Release Notes

This version fixes a small bug with building the capabilities array.

Changelog

Fixed

[3.10.2]

Release Notes

This version fixes a small bug with es6 syntax.

Changelog

Fixed

[3.10.1]

Release Notes

This version improves the config handling and enables setting rtmp values over the params object.

Changelog

Fixed

[3.10.0]

Release Notes

This version brings a new config option. It's now possible to add custom query params to the connection string. For this there is the new object 'config.source.h5live.params'. Parameters can be added as key/value pair e.g.:

config.source.h5live.params = {
    'url': 'rtmp://bintu-play.nanocosmos.de',
    'stream': 'dtHSa-aEWRT',
    'custom_param': 'very_custom'
}

In this example we pass directly the rtmp settings, 'url' and 'stream'. If a 'config.source.h5live.rtmp' object is declared, it will be overwritten. This will result for websocket in a connection string like this:

wss://bintu-play.nanocosmos.de/h5live/stream/?url=rtmp%3A%2F%2Fbintu-play.nanocosmos.de%3A80%2Fplay&stream=dtHSa-aEWRT&custom_param=very_custom&cid=405498&pid=43377944190

This version also contains fixes for a wrong buffering state detection on iOS and one for the view. In the view now a configured 'scaling' mode will be keeped over the whole lifetime of the player.

Changelog

Added

config.source.h5live.params = {
    'url': 'rtmp://bintu-play.nanocosmos.de',
    'stream': 'dtHSa-aEWRT',
    'custom_param': 'very_custom'
}

Fixed

[3.9.7]

Release Notes

This version fixes a bug for secured playback on iOS. In case of an error the pause reason now will be correct.

Changelog

Fixed

[3.9.6]

Release Notes

This version brings several improvements and some fixes. Improvements are a better error message in case of an unsupported browser and the re-enabeling of buffer increase automation in case of significant frame dropping in Firefox to reach stable playback. Fixed are occasionally stream start problems in Firefox with streams encoded by the Open Broadcaster Software Studio and a wrong object path of the quality object as part of the stats event object.

Changelog

Improved

Fixed

[3.9.2]

Release Notes

This version fixes a bug for Microsoft IE and Edge. Now connection errors will be parsed correctly.

Changelog

Fixed

[3.9.1]

Release Notes

This version fixes a bug in Safari Mac OS X. Now black blinking on startup will be prevented.

Changelog

Fixed

[3.9.0]

Release Notes

This version brings a new security option. It's now possible to secure streams and play them back savely with the NanoPlayer. After a stream is marked as secured, it's only possible to playback by giving the credentials via 'config.h5live.security'. New errors will thrown if the token is invalid/mismatching (4901), the service is rejected (4900), the credentials are incomplete or expired (4903) and the service is not found (4904).

Changelog

Added

security: {
    token: 'ewr6tzv345zw4z7ezuw4cf3c', // The security service token.
    expires: '1519819200', // The time the token expires (system time).
    options: '15', // The security options.
    tag: 'anyTag' // The custom tag to decrypt the token.
}

[3.8.2]

Release Notes

This version brings a new feature and several patches. We now enable adaptive buffer handling. This can be enabled by setting the new 'config.tweaks.buffewrDynamic'. In case of short time bufferings the buffer will be stabilized. If stable playback is reached after a defined cooldown time, it will be tried to decrease the buffer till the original values. Please see documentation for further informations. The patches bring improvements for Microsoft Edge / IE and iOS. Also network related fixes are included.

Changelog

Added

bufferDynamic: {
    offsetThreshold: 2, //  The threshold time between two bufferings in seconds. If the measured value is lower, the buffer will be increased by offsetStep.
    offsetStep: 0.5, // The step to increase in seconds. Also the step to decrease in cooldown.
    cooldownTime: 10 // The time to check stable playback. If stable playback is detected, the buffer values will be decreased till original buffer values are reached.
}

Fixed

[3.7.2]

Release Notes

This version patches a bug. It fixes a loading timeout on second play call.

Changelog

Fixed

[3.7.1]

Release Notes

This version patches a bug on iOS. It fixes the pausing in the case that the player losts it's focus.

Changelog

Fixed

[3.7.0]

Release Notes

This version brings new features. A new member variable is added, 'player.id'. Its a unique string of 11 characters to identify the player instance. Additionally this player id will be passed through the event object of all public events as 'event.id'. Now the player version will be passed as 'event.version' too. In the stream info event additionally the stream url will be passed as 'event.data.streamInfo.url'.

Changelog

Added

Fixed

[3.6.7]

Release Notes

This version contains a patch for the reconnection functionality. A reconnect will be done after a calculated delay.

Changelog

Fixed

[3.6.6]

Release Notes

This version contains patches for mobile playback, especially for iOS. A potentially performance impairing issue in the internal processing on iOS has been removed. If config.playback.forceTech is set to 'h5live', h5live playback will now be forced for all platforms including iOS. The nanocosmos logo has been removed from the flash fallback module. Automatic pausing on lost focus has been added for Android too.

Changelog

Added

Changed

Fixed

[3.5.2]

Release Notes

This version contains a patch for the full screen functionality. Now full screen will only be exited, if the full screen element is the player instance. Before it exited every full screen on destroy without a check.

Changelog

Fixed

[3.5.1]

Release Notes

This release brings new features. There are new statistics available via the 'onStats' event. Now the bitrate in Bit/s will be measured and also the network framerate in fps. For both it will be measured the current value over one second and the minimum, maximum and average over the last 10 seconds. They are accessable over the 'event.data.stats.bitrate' and the 'event.data.stats.framerate' objects. This feature is not available on iOS and the values are always '0' in this case. Another feature is auto rotation for mobile streams from our nanoStream Mobile Apps. Its enabled if 'playback.metadata' is set to true.

Changelog

Added

Fixed

[3.4.1]

Release Notes

This version contains patches for iOS full screen functionality if meta tag 'viewport' is set and the autoplay policy of Safari 11, where only muted autoplay is allowed.

Changelog

Improved

Fixed

[3.4.0]

Release Notes

This version contains improved connectivity and latency for iOS 11 compared to iOS 10, and a workaround for an internal iOS11 system issue. It is highly recommended to use this version to avoid potentially higher network load and degraded user experience for iOS 11 users.

Changelog

Improved

[3.3.4]

Release Notes

This version includes a fix for the muted state of the player, if the player will be set up muted. The state wasn't changed and no event was fired. Now the 'onMuted' event fires immediately with the setuo promise.

Changelog

Fixed

[3.3.3]

Release Notes

This version includes a fix for the flash fallback. It fixes an undefined error on setuo if container div id is different than 'playerDiv'.

Changelog

Fixed

[3.3.2]

Release Notes

This release brings many features. We introduce the new 'keepConnection' functionality (supported with h5live server 1.8.0.0 and higher). This enables to have always a connection to the h5live server (websocket only), also if the player is not playing. Another main feature is the new reconnect logic. It enables reconnects to the h5live server in case of recoverable network errors. If the player is playing, the playback resumes after a successful reconnect. Related to the reconnect we added the value 'connectDelay' to the event 'onLoading', that if positive and not zero indicates that a reconnect is imminent. Also now the network error 4503: service unavailable will be dispatched and passed through the 'onError' event. For diagnostics of the websocket connection we now use 'performance.mark()' to log different states of the connection with timestamps. In this release are also several fixes. There are fixes for the scaling functionality, the h5live source parsing with bintu rtmp playout object only and at least we removed flash test embed on player load.

Changelog

Added

reconnect: {
    minDelay: 2, //  The minimum time to reconnect in seconds. The lowest possible value is 1 sec.
    maxDelay: 10, // The maximum time to reconnect in seconds.
    delaySteps: 10, // This number of steps till the maximum delay should reached.
    maxRetries: 10 // The maximum count of reconnect tries. If set to zero no reconnect will be done.
}

Fixed

[3.2.2]

Changelog

Improved

[3.2.1]

Changelog

Improved

[3.2.0]

Release Notes

In this release we added the opportunity to create an audio player without video functionality. This can be enabled by setting in the style object of the config the new property 'audioPlayer' to 'true', for example 'config.style.audioPlayer = true'. Controls can be enabled/disabled. The size can be customized via 'width' and 'height'. Default is 640px * 51px.

Changelog

Added

[3.1.0]

Release Notes

With this release comes improvements for the playback on iOS devices. We introduce an adaptive buffer control depending on the buffer requirements of the iOS video element to achieve smooth playback while attempting to keep the latency as low possible. The adaptive buffer control is enabled by default for iOS clients. There is a direct correlation between the integrity of the rtmp source stream and the buffer requirements.

The second improvement is that it's now possible to configure the buffer settings also for iOS devices directly. If the buffer tweaks will be set via config, the adaptive buffer control will be disabled and the given value will be used as discret values.

Changelog

Added

[3.0.11]

Release Notes

The main improvements of this release are getting more stability in play detection and pausing behaviour.

Changelog

Fixed

[3.0.10]

Changelog

Fixed

[3.0.9]

Release Notes

The main improvements of this release are getting more stability for resuming after pause.

Changelog

Improved

[3.0.4]

Changelog

Improved

[3.0.3]

Changelog

Fixed

[3.0.2]

Release Notes

BREAKING CHANGE

The automatic fallback to the nanoStream Cloud h5live server has been removed. As a result providing the h5live.server configuration object is now mandatory, except if the server configuration is done through the bintu API by providing a bintu source. For playback from the nanoStream Cloud without the bintu API the following values have to be set.

source.h5live.server.websocket = 'wss://bintu-h5live.nanocosmos.de:443/h5live/stream';
source.h5live.server.hls = 'https://bintu-h5live.nanocosmos.de:443/h5live/http/playlist.m3u8';
source.h5live.server.progressive = 'https://bintu-h5live.nanocosmos.de:443/h5live/http/stream.mp4';

For the On-Premise setup this server values have to be replaced with the own server urls.

BREAKING CHANGE

The seperate configuration of the rtmp url for the fallback to flash player, the source.rtmp object, has been removed. Instead the rtmp url and stream name from the source.h5live.rtmp object will be used in this case.

Since this version the last video frame can be kept displayed after pausing the player, instead of displaying a black frame. The related configuration option is 'style.keepFrame' = [true/false]**, which is enabled by default.

Support for playback of audio only streams has been added (at least server version 1.7 required). An audio symbol can be displayed during the playback of an audio only stream. The related configuration option is 'style.displayAudioOnly' = [true/false]**, which is enabled by default.

Changelog

Added

Removed

Fixed

[2.8.1]

Release Notes

The main changes of this release are adding quality metrics for firefox to detect frame dropping and handling by buffer increasing. Fixed is the user gesture error on playback start by tapping on the interaction playbutton on Android 5/6. Fixed is the playback start on start buffer.

Changelog

Added

Fixed

[2.7.1]

Release Notes

The main changes of this release are improvements for playback on safari. The stream does not stops anymore in case of large gaps in buffer or unexpected pause calls. It is added a handling to keep low latency playback in case of multiple buffered ranges by a seek over buffer gaps (exclude iOS).

Changelog

Added

Fixed

[2.4.1]

Changelog

Added

[2.3.8]

Changelog

Added

[2.3.4]

Changelog

Added

Fixed

[2.0.3]

Changelog

Added

Fixed

[1.5.4]

Changelog

Added

Fixed