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 adresses 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.
add startup stats to the public 'onPlay' event
{
"stats": {
"connecting": 0,
"connected": 267,
"firstFragmentReceived": 1865,
"firstFrameRendered": 2028,
"playable": 2029,
"playing": 2448
}
}
new public event 'onDestroy'
This version improves the demo page. One part is to use 'updateSource' for bintu multistream functionality.
This version adresses 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 adresses 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.