With this patch version, we resolved an issue during player.setup
that could cause an unhandled exception.
player.setup
that could result in an unhandled exceptionThis 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.
hidden
will now result in a dedicated error event with code 1009
and message Playback failed because the player was in visibility state 'hidden' at load start.
2003 Not enough media data received.
mediaTypesRequiringUserActionForPlayback
1005 Playback must be initialized by user gesture.
early onIn this patch release we enhanced the observability of player metrics to better monitor and ensure quality of service when using the Bintu configuration.
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.
2004
error in case a bintu streamgroup is not live at setupkeepConnection
enabledThis patch release is enabling H5Live-HLS fallbacks when access to ManagedMediaSource API is denied for locally loaded webpages in iOS WKWebView.
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.
player.unmute()
without user interaction context that could lead to black frames or errors during playback start if unmuted playback was not permittedThe 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.
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.
keepConnection
and forcePlay
options enabledfastadaptive
to balancedadaptive
for Safari 17.4+ on MacOS Sonoma (introduced in 4.23.1)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.
balancedadaptive
on iOS (all versions)fastadaptive
to balancedadaptive
modewarning
event related to switch.method
configuration on iOSkeepConnection
modeThis version is improving the detection of supported browsers for iOS WebView apps with customized user agent strings.
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.
player.destroy
on iOSThis 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.
LOADING
state at visibility hidden
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.
config.playback.faststart
, disabled by defaultonStreamInfo
and onPlay
eventconfig.source.options.switch.fastStart
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.
Document.visibilityState
in all metrics eventsplaying
state in case of iOS network interruptionsstats
object in the onPlay
eventThis 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
.
onStreamInfo
in case of the error 1005
interactionrequired
on iOSThis 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.
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.
3005
- 'An error occurred while hls playback when decoding video.'
3101
- 'An error occurred while buffering on hls playback.'
errorcode
definitionsupdateSource
API calls during LOADING stateThis 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.
onServerInfo
and onFullscreenChange
id
, player
, version
, state
in onFullscreenChange
event objectThis 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.
config.source.group
objectlive
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.
onActiveVideoElementChange
videoElementList
{Array.HTMLVideoElement} and the activeVideoElement
{HTMLVideoElement} in the event dataThis 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.
config.source.general.serverDomain
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.
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.
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.
config.playback.latencyControlMode
'classic'
, 'balancedadaptive'
, 'fastadaptive'
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.
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.
config.playback.metadataLowDelay
set to false
true
'client'
!important
flag to positionThis 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.
style.scaling
with non-default value will be preserved during updateSource
with server-side switch to the same streamsource
will be prevented from starting in PAUSED
stateThis 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.
config.source
parameter defaults.service
for simplifying configuration if the standard nanoStream Cloud is usedmetrics.statsInterval
set from 1
to 5
secondsThis 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.
params
object usage with multi stream configurationThis 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.
new option config.source.options.adaption.downStep
adaption
object1
e.g.:
"adaption": {
"rule": "deviationOfMean2",
"downStep": 2
}
bufferDynamic
is enablednull
values to non mandatory configuration parameters will no longer lead to a setup errorThis 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.
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
config.style.fullScreenBackgroundColor
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.
PAUSED
state with keepFrame
disabled on iOSThis 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
).
5xxx
config.playback
objectThis 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.
3003
(media decode error)3100
(media source ended)1008
(hls playback error)playback.mediaErrorRecoveries
, default: 3
, to set the number of max recoveries within 60 secondsonWarning
event'Recovering from media error 3003, recovery 1/3 within the last 60 seconds (12 total).'
'playbackerror'
crossOrigin
attribute for HTMLMediaElements (applies to all player-internal video & image elements)playback.crossOrigin
, default: 'not-set'
'anonymous'
'use-credentials'
'not-set'
(default), if used the attribute will not be addedThis 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.
1004
to warning "A pause call has been ignored since the player has not been set up successfully."
config.style.audioPlayer
set to true
1004
in case of play/pause before player is readyconfig.playback.keepConnection
set to true
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".
This version improves the compatibility of the player. The 'toLocaleTimeString' functionality was replaced to avoid potential issues with javascript polyfills.
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.
3200
- An unspecific media error occurred.
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.
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.
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.
style.centerView
config propertyBy 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.
source.options.switch.forcePlay
config property starts a paused playback after 'switchStream' or 'updateSource' request executionThis version contains improvements for stream swiching, buffering metrics validation and connection flags.
This version contains a minor internal metrics adjustment.
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.
playback.videoId
config property (NOT mandatory)source.options.switch.timeout
config property (we advise to use default value)style.displayMutedAutoplay
config property to show a muted audio symbol in case of muted autoplayThis 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.
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.
This version removes a warning in case only a single stream is configured.
This version handles a timestamp offset caused by stream switching to make correct time operations.
This version comes with further ABR and internal improvements and also corrects switch related parts.
This version communicates additional switchStream and updateSource API related data to the metrics service. Furthermore, the ABR prediction cycle is improved to reduce load.
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.
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.
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.
This version implements a fix to support the regular config as well as an adaptive config to setup the player.
This version implements fixes to support the initial switchUp on iOS devices.
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.
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.
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.
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.
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.
This version contains an improvement for the detection of supported browser types and versions.
This version contains an improvement for playback in iPadOS desktop browsing mode, to correctly detect H5Live MSE or LL-HLS modes for playback.
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.
This version fixes a small bug with buffer config validation.
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.
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.
config.style.backgroundColor = 'black'
config.style.fullScreenControl = true
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.
config.playback.allowSafariHlsFallback = true
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.
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.
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.
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.
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.
config.playback.timeouts = {
loading: 20,
buffering: 20,
connecting: 5
}
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.
This release patches an issue with the config handling. Now a copy of the config will be used for the setup instead of pointer.
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.
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.
config.metrics = {
accountId: 'myId',
accountKey: 'sdfhe457zsjhnrtzd8',
userId: 'myUserId',
eventId: 'myEventId',
statsInterval: 10,
customField1: 'custom',
customField2: 42,
customField3: true
}
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.
{
"stats": {
"connecting": 0,
"connected": 267,
"firstFragmentReceived": 1865,
"firstFrameRendered": 2028,
"playable": 2029,
"playing": 2448
}
}
This version improves the demo page. One part is to use 'updateSource' for bintu multistream functionality.
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.
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.
player.updateSource(source).then(function (config) {
console.log('update source ok with config: ' + JSON.stringify(config));
}, function (error) {
console.log(error);
});
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.
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.
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.
This version fixes the default value of the new config option 'playback.automute'. It is disabled by default.
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.
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.
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
This version fixes a small bug with building the capabilities array.
This version fixes a small bug with es6 syntax.
This version improves the config handling and enables setting rtmp values over the params object.
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.
config.source.h5live.params = {
'url': 'rtmp://bintu-play.nanocosmos.de',
'stream': 'dtHSa-aEWRT',
'custom_param': 'very_custom'
}
This version fixes a bug for secured playback on iOS. In case of an error the pause reason now will be correct.
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.
This version fixes a bug for Microsoft IE and Edge. Now connection errors will be parsed correctly.
This version fixes a bug in Safari Mac OS X. Now black blinking on startup will be prevented.
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).
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.
}
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.
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.
}
This version patches a bug. It fixes a loading timeout on second play call.
This version patches a bug on iOS. It fixes the pausing in the case that the player losts it's focus.
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'.
This version contains a patch for the reconnection functionality. A reconnect will be done after a calculated delay.
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.
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.
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.
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.
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.
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.
This version includes a fix for the flash fallback. It fixes an undefined error on setuo if container div id is different than 'playerDiv'.
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.
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.
}
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.
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.
The main improvements of this release are getting more stability in play detection and pausing behaviour.
The main improvements of this release are getting more stability for resuming after pause.
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.
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.
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.
Added quality handler for firefox with frame drop detection/handling.
Fixed user gesture error on Android 5/6.
Fixed is the playback start on start buffer.
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).
Added a handling to prevent playback stopping on unexpected pause calls.
Added a handling to seek over buffer gaps to keep low latency playback. This does not apply for iOS.