diff --git a/src/webapps/live/lib/red5pro/CHANGES.md b/src/webapps/live/lib/red5pro/CHANGES.md index fcd83c78..a0d36e21 100644 --- a/src/webapps/live/lib/red5pro/CHANGES.md +++ b/src/webapps/live/lib/red5pro/CHANGES.md @@ -1,5 +1,17 @@ # Changes +## 5.5.0 + +- default to srcObject in try...catch for modern browsers. (bustardcelly) +- fix for bandwidth inject in latest chrome browser. (bustardcelly) +- adding notification and retry support for autoplay restriction of subscribers. (bustardcelly) + + > * WebRTC, RTMP and HLS Subscriber support + > * muteOnAutoplayRestriction configuration property added + > * Additional subscriber events for client-side notifications of autoplay restrictions + +- allowing for decoupled socket for sharedobject connections. (bustardcelly) + ## 5.4.0 - screenfull dep update. (bustardcelly) diff --git a/src/webapps/live/lib/red5pro/MIGRATION_GUIDE.md b/src/webapps/live/lib/red5pro/MIGRATION_GUIDE.md index 5652ad9b..10b031f6 100644 --- a/src/webapps/live/lib/red5pro/MIGRATION_GUIDE.md +++ b/src/webapps/live/lib/red5pro/MIGRATION_GUIDE.md @@ -2,10 +2,25 @@ This documentation serves as a guide in migrating client-side code where a breaking change to the API has been made in a distribution. +* [5.4.0 to 5.5.0](#migrating-from-540-to-550) * [5.0.0 to 5.4.0](#migrating-from-500-to-540) * [4.0.0 to 5.0.0](#migrating-from-400-to-500) * [3.5.0 to 4.0.0](#migrating-from-350-to-400) +# Migrating from `5.4.0` to `5.5.0` + +The `5.5.0` release of the Red5 Pro HTML SDK including some modifications to `SharedObjects` to allow for "decoupling" the managament and communication API from the underlying connections for Publishers and Subscribers. In the `5.5.0` release, `SharedObjects` can now be used by themselves without requiring an already established connection to the server. + +* The `SharedObject` API has been decoupled from requiring previously established stream clients (Publisher and/or Subscriber). + * By decoupling the previous *requirement* to use a established stream client, `SharedObjects` can now be used with establishing a `WebSocket` connection and providing that as the connection to communicate over `SharedObjects`. + * The Red5 Pro HTML SDK provides a `Red5ProSharedObjectSocket` class to serve as a proxy to an underlying `WebSocket` and convenience in communicating to and from the Red5 Pro Server when using `SharedObjects`. + * The `SharedObject` API can still be employed using a stream client connection as was possible in previous SDK versions. + +Additionally, notification support for latest browser vendor restictions on the `autoplay` policy have been included. + +* Utilize the `muteOnAutoplayRestriction` initialization configuration property for Subscriber clients in order to attempt auto-muting of subscribers to allow - at least - video auto-playback when browsers enforce the muted autoplay policy. +* Listen for events related to `autoplay` restictions in order to provide a better User Experience for your customers. + # Migrating from `5.0.0` to `5.4.0` The `5.4.0` release of the Red5 Pro HTML SDK saw some minor changes related to WebRTC clients, and in particular how WebSoskcet and RTCPeerConnections are made: @@ -15,10 +30,6 @@ The `5.4.0` release of the Red5 Pro HTML SDK saw some minor changes related to W * To support backward compatiibilty for webapps out in the wild, the HTML SDK will recognize previously defaulted values and silently change the values to new default values. * The `iceServers` configuration property has been deprecated in favor of the new `rtcConfiguration` configuration property. * [Refer to section: RTCConfiguration](#rtcconfiguration) -* The `SharedObject` API has been decoupled from requiring previously established stream clients (Publisher and/or Subscriber). - * By decoupling the previous *requirement* to use a established stream client, `SharedObjects` can now be used with establishing a `WebSocket` connection and providing that as the connection to communicate over `SharedObjects`. - * The Red5 Pro HTML SDK provides a `Red5ProSharedObjectSocket` class to serve as a proxy to an underlying `WebSocket` and convenience in communicating to and from the Red5 Pro Server when using `SharedObjects`. - * The `SharedObject` API can still be employed using a stream client connection as was possible in previous SDK versions. ## RTCConfiguration diff --git a/src/webapps/live/lib/red5pro/red5pro-publisher.swf b/src/webapps/live/lib/red5pro/red5pro-publisher.swf index 31495b74..cdb46499 100644 Binary files a/src/webapps/live/lib/red5pro/red5pro-publisher.swf and b/src/webapps/live/lib/red5pro/red5pro-publisher.swf differ diff --git a/src/webapps/live/lib/red5pro/red5pro-sdk.min.js b/src/webapps/live/lib/red5pro/red5pro-sdk.min.js index 05197e5b..a8d177fa 100644 --- a/src/webapps/live/lib/red5pro/red5pro-sdk.min.js +++ b/src/webapps/live/lib/red5pro/red5pro-sdk.min.js @@ -2,8 +2,8 @@ * * red5pro-sdk - Red5 Pro HTML Publisher and Subscriber SDK. * Author: Infrared5 Inc. - * Version: 5.5.0-RC12 + * Version: 5.5.0 * Url: https://github.com/red5pro/red5pro-html-sdk#readme * */ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.red5prosdk=t():e.red5prosdk=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=211)}([function(e,t,n){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(93),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:void 0,n=[];if(n.push({level:e,stream:new i.RawStream,type:"raw"}),t){var a=t.map(function(t){t.level=e});n=n.concat(a)}o=(0,r.createLogger)({level:e,name:"red5pro-sdk",streams:n})},t.getLogger=function(){return o},t.trace=s(u.TRACE),t.info=s(u.INFO),t.debug=s(u.DEBUG),t.warn=s(u.WARN),t.error=s(u.ERROR),t.fatal=s(u.FATAL)},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){"use strict";function r(){!p&&window.screenfull&&window.screenfull.enabled&&(p=!0,window.screenfull.onchange(function(){var e=void 0,t=h.length;for(e=0;e0||e.canPlayType("application/x-mpegURL").length>0||e.canPlayType("audio/mpegurl").length>0||e.canPlayType("audio/x-mpegurl").length>0},supportsFlashVersion:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:".";return _()[0]>=e.split(t)[0]},resolveElement:function(e){try{var t=document.getElementById(e);if(!t)throw new c.NoElementFoundError("Element with id("+e+") could not be found.");return t}catch(t){throw new c.NoElementFoundError("Error in accessing element with id("+e+"). "+t.message)}},createWebSocket:function(e){return new WebSocket(e)},setVideoSource:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.onloadedmetadata=function(){(0,d.debug)("[videoelement:event]","loadedmetadata"),(0,d.debug)("[video:constraints]","Video actual dimensions are: "+e.videoWidth+", "+e.videoHeight)};try{e.srcObject=t}catch(n){(0,d.warn)("[setVideoSource:obj]","Could not set srcObject: "+n.message),S?e.mozSrcObject=t:e.src=window.URL.createObjectURL(t)}if(n)try{var r=e.play();r&&r.then(function(){return(0,d.debug)("[setVideoSource:action]","play (START)")}).catch(function(e){return(0,d.warn)("[setVideoSource:action]","play (FAULT) "+(e.message?e.message:e))})}catch(t){(0,d.warn)("[setVideoSource:action]","play (CATCH::FAULT) "+t.message);try{e.setAttribute("autoplay",!1),e.pause()}catch(e){(0,d.warn)("[setVideoSource:action]","pause (CATCH::FAULT) "+e.message)}}else try{e.setAttribute("autoplay",!1),e.pause()}catch(e){}},injectScript:function(e){var t=new u.DeferredPromise,n=document.createElement("script");return n.type="text/javascript",n.onload=function(){t.resolve()},n.onreadystatechange=function(){"loaded"!==n.readyState&&"complete"!==n.readyState||(n.onreadystatechange=null,t.resolve())},n.src=e,document.getElementsByTagName("head")[0].appendChild(n),t.promise},gUM:function(e){return(navigator.mediaDevices||navigator).getUserMedia(e)},setGlobal:function(e,t){window[e]=t},getSwfObject:function(){return window.swfobject},getEmbedObject:function(e){return document.getElementById(e)},getElementId:function(e){return e.getAttribute("id")},addOrientationChangeHandler:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];"onorientationchange"in window&&((0,d.debug)("[window:orientation]","[addOrientationChangeHandler]","adding responder."),v.push(e),t&&i()),1===v.length&&((0,d.debug)("[window:orientation]","[addOrientationChangeHandler]","onorientationchange added."),window.addEventListener("orientationchange",i))},removeOrientationChangeHandler:function(e){for(var t=v.length;--t>-1;)if(v[t]===e){v.slice(t,1);break}0===v.length&&((0,d.debug)("[window:orientation]","[removeOrientationChangeHandler]:: onorientationchange removed."),window.removeEventListener("onorientationchange",i))},addCloseHandler:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;b.splice(-1===t?b.length:t,0,e),m||window.addEventListener("unload",o)},removeCloseHandler:function(e){for(var t=b.length;--t>-1;)if(b[t]===e){b.slice(t,1);break}},invoke:function(e,t){window.hasOwnProperty(e)&&window[e].call(window,t)},toggleFullScreen:function(e){window.screenfull&&window.screenfull.enabled&&window.screenfull.toggle(e)},onFullScreenStateChange:function(e){h.push(e),r(window.screenfull)},onOrientationMetadata:l.onOrientationMetadata,hasAttributeDefined:function(e,t){var n=e.getAttribute(t);return null!==n&&void 0!==(void 0===n?"undefined":(0,s.default)(n))&&"string"==typeof n&&(""===n||"true"===n||n===t)},hasClassDefined:function(e,t){return e.classList.contains(t)},createElement:function(e,t){return"text"===e?document.createTextNode(t.toString()):document.createElement(e,t)},addSubscriptionAssignmentHandler:function(e){f.push(e),void 0===window.setSubscriberId&&(window.setSubscriberId=function(e){f.shift()(e)})},getMouseXFromEvent:function(e){return e||(e=window.event),e.pageX?e.pageX:e.clientX?e.clientX+document.body.scrollLeft+document.documentElement.scrollLeft:0},getScrollX:function(){return void 0!==window.pageXOffset?window.pageXOffset:(document.documentElement||document.body.parentNode||document.body).scrollLeft},createEvent:function(e){return document.createEvent(e)},getGlobal:function(){return window}}},function(e,t,n){e.exports={default:n(160),__esModule:!0}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.Future=t.DeferredPromise=void 0;var i=n(60),o=r(i),a=n(0),s=r(a),u=function e(){var t=this;(0,s.default)(this,e),this.resolve=void 0,this.reject=void 0,this.promise=new o.default(function(e,n){t.resolve=e,t.reject=n})},c={createIfNotExist:function(e){var t=e;return t||(t=new u),t}};t.DeferredPromise=u,t.Future=c},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(142),o=r(i),a=n(140),s=r(a),u=n(62),c=r(u);t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+(void 0===t?"undefined":(0,c.default)(t)));e.prototype=(0,s.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(o.default?(0,o.default)(e,t):e.__proto__=t)}},function(e,t,n){"use strict";t.__esModule=!0;var r=n(62),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==(void 0===t?"undefined":(0,i.default)(t))&&"function"!=typeof t?e:t}},function(e,t,n){var r=n(74)("wks"),i=n(55),o=n(11).Symbol,a="function"==typeof o;(e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))}).store=r},function(e,t,n){var r=n(11),i=n(3),o=n(20),a=n(22),s=function(e,t,n){var u,c,l,d=e&s.F,f=e&s.G,h=e&s.S,p=e&s.P,v=e&s.B,b=e&s.W,m=f?i:i[t]||(i[t]={}),_=m.prototype,y=f?r:h?r[t]:(r[t]||{}).prototype;f&&(n=t);for(u in n)(c=!d&&y&&void 0!==y[u])&&u in m||(l=c?y[u]:n[u],m[u]=f&&"function"!=typeof y[u]?n[u]:v&&c?o(l,r):b&&y[u]==l?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(l):p&&"function"==typeof l?o(Function.call,l):l,p&&((m.virtual||(m.virtual={}))[u]=l,e&s.R&&_&&!_[u]&&a(_,u,l)))};s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,s.U=64,s.R=128,e.exports=s},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,n){e.exports={default:n(151),__esModule:!0}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.WebSocketStateEventTypes=t.SharedObjectEventTypes=t.FailoverSubscriberEventTypes=t.RTMPSubscriberEventTypes=t.RTCSubscriberEventTypes=t.SubscriberEventTypes=t.FailoverPublisherEventTypes=t.RTMPPublisherEventTypes=t.RTCPublisherEventTypes=t.PublisherEventTypes=t.WebSocketStateEvent=t.SharedObjectEvent=t.SubscriberEvent=t.PublisherEvent=t.Event=void 0;var i=n(5),o=r(i),a=n(8),s=r(a),u=n(7),c=r(u),l=n(0),d=r(l),f=n(1),h=r(f),p=n(82);Object.defineProperty(t,"PublisherEventTypes",{enumerable:!0,get:function(){return p.PublisherEventTypes}}),Object.defineProperty(t,"RTCPublisherEventTypes",{enumerable:!0,get:function(){return p.RTCPublisherEventTypes}}),Object.defineProperty(t,"RTMPPublisherEventTypes",{enumerable:!0,get:function(){return p.RTMPPublisherEventTypes}}),Object.defineProperty(t,"FailoverPublisherEventTypes",{enumerable:!0,get:function(){return p.FailoverPublisherEventTypes}});var v=n(84);Object.defineProperty(t,"SubscriberEventTypes",{enumerable:!0,get:function(){return v.SubscriberEventTypes}}),Object.defineProperty(t,"RTCSubscriberEventTypes",{enumerable:!0,get:function(){return v.RTCSubscriberEventTypes}}),Object.defineProperty(t,"RTMPSubscriberEventTypes",{enumerable:!0,get:function(){return v.RTMPSubscriberEventTypes}}),Object.defineProperty(t,"FailoverSubscriberEventTypes",{enumerable:!0,get:function(){return v.FailoverSubscriberEventTypes}});var b=n(83);Object.defineProperty(t,"SharedObjectEventTypes",{enumerable:!0,get:function(){return b.SharedObjectEventTypes}});var m=n(85);Object.defineProperty(t,"WebSocketStateEventTypes",{enumerable:!0,get:function(){return m.WebSocketStateEventTypes}});var _=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;(0,d.default)(this,e),this._type=t,this._data=n}return(0,h.default)(e,[{key:"type",get:function(){return this._type}},{key:"data",get:function(){return this._data}}]),e}(),y=function(e){function t(e,n,r){(0,d.default)(this,t);var i=(0,s.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e,r));return i._publisher=n,i}return(0,c.default)(t,e),(0,h.default)(t,[{key:"publisher",get:function(){return this._publisher}}]),t}(_),g=function(e){function t(e,n,r){(0,d.default)(this,t);var i=(0,s.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e,r));return i._subscriber=n,i}return(0,c.default)(t,e),(0,h.default)(t,[{key:"subscriber",get:function(){return this._subscriber}}]),t}(_),S=function(e){function t(e,n,r){(0,d.default)(this,t);var i=(0,s.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e,r));return i._name=n,i}return(0,c.default)(t,e),(0,h.default)(t,[{key:"name",get:function(){return this._name}}]),t}(_),E=function(e){function t(e,n,r){(0,d.default)(this,t);var i=(0,s.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e,r));return i._name=n,i}return(0,c.default)(t,e),(0,h.default)(t,[{key:"name",get:function(){return this._name}}]),t}(_);t.Event=_,t.PublisherEvent=y,t.SubscriberEvent=g,t.SharedObjectEvent=S,t.WebSocketStateEvent=E},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(16),i=n(100),o=n(76),a=Object.defineProperty;t.f=n(17)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(14);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){e.exports=!n(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,n){e.exports={default:n(158),__esModule:!0}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),o=r(i),a=n(1),s=r(a),u="RED5PRO",c=function(){function e(){(0,o.default)(this,e),this._callbacks={},this._callbacks[u]=[]}return(0,s.default)(e,[{key:"_notify",value:function(e,t){var n=void 0,r=e.length;for(n=0;n1&&void 0!==arguments[1]&&arguments[1]}},{key:"toggleFullScreen",value:function(){}}]),t}(v.default),C=function(){function e(){(0,s.default)(this,e)}return(0,c.default)(e,[{key:"getVolume",value:function(){}},{key:"setVolume",value:function(e){}},{key:"setSeekTime",value:function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]}},{key:"setPlaybackDuration",value:function(e){}},{key:"getState",value:function(){}},{key:"setState",value:function(e){}},{key:"setAsVOD",value:function(e){}},{key:"enable",value:function(e){}}]),e}(),P=function(e){function t(e,n){(0,s.default)(this,t);var r=(0,d.default)(this,(t.__proto__||(0,o.default)(t)).call(this));return r.player=e,r.container=n,r._controlbar=void 0,r._playPauseButton=void 0,r._muteButton=void 0,r._volumeField=void 0,r._seekTimeField=void 0,r._timeField=void 0,r._fullScreenButton=void 0,r._state=S.PlaybackState.IDLE,r._mutedState=!1,r._resumeAfterSeek=!1,r._playbackDuration=0,r._volumeValue=1,r._onPlayPauseClickBound=r._onPlayPauseClick.bind(r),r.decorate(r.container),r}return(0,h.default)(t,e),(0,c.default)(t,[{key:"decorate",value:function(e){(0,E.debug)(w,"[decorate]");var t=m.default.createElement("div");t.classList.add("red5pro-media-control-bar"),this._playPauseButton=this._createPlayPauseButton(),this._muteButton=this._createMuteButton(),this._volumeField=this._createVolumeControl(),this._seekTimeField=this._createSeekControl(),this._timeField=this._createPlaybackTime(),this._fullScreenButton=this._createFullScreenToggle(),t.appendChild(this._playPauseButton),t.appendChild(this._timeField),t.appendChild(this._seekTimeField.view),t.appendChild(this._muteButton),t.appendChild(this._volumeField.view),t.appendChild(this._fullScreenButton),e.appendChild(t),this._controlbar=t,m.default.isTouchEnabled()?t.classList.add("red5pro-media-control-bar-show"):(this.container.addEventListener("mouseover",function(){t.classList.add("red5pro-media-control-bar-show")}),this.container.addEventListener("mouseout",function(){t.classList.remove("red5pro-media-control-bar-show")})),this.setState(S.PlaybackState.IDLE).onFullScreenChange(!1).setSeekTime(0).enable(!1)}},{key:"_onPlayPauseClick",value:function(){this.getState()===S.PlaybackState.PLAYING?this.player.pause():this.getState()===S.PlaybackState.PAUSED?this.player.resume():this.player.play()}},{key:"_createPlayPauseButton",value:function(){var e=m.default.createElement("button");return e.setAttribute("aria-label","Toggle Playback"),e.classList.add("red5pro-media-control-element"),e.classList.add("red5pro-media-element-button"),e.classList.add("red5pro-media-playpause-button"),e}},{key:"_createMuteButton",value:function(){var e=this,t=m.default.createElement("button");return t.setAttribute("aria-label","Toggle Mute Audio"),t.classList.add("red5pro-media-control-element"),t.classList.add("red5pro-media-element-button"),t.classList.add("red5pro-media-muteunmute-button"),t.addEventListener("click",function(){e.getMutedState()?(e.player.unmute(),e.setMutedState(!1)):(e.player.mute(),e.setMutedState(!0))}),t}},{key:"_createVolumeControl",value:function(){var e=this,t=new y.default("volume");return t.view.classList.add("red5pro-media-control-element"),t.view.classList.add("red5pro-media-volume-slider"),t.view.classList.add("red5pro-media-slider"),t.on(g.SliderEventTypes.CHANGE,function(t){var n=Number(t.data);e.player.setVolume(n)}),t}},{key:"_createSeekControl",value:function(){var e=this,t=new y.default("seek");return t.view.classList.add("red5pro-media-control-element"),t.view.classList.add("red5pro-media-seektime-slider"),t.view.classList.add("red5pro-media-slider"),t.on(g.SliderEventTypes.CHANGE_START,function(){e.getState()===S.PlaybackState.PLAYING&&(e._resumeAfterSeek=!0,e.player.pause())}),t.on(g.SliderEventTypes.CHANGE,function(t){var n=Number(t.data);e.player.seekTo(n,0===e._playbackDuration?void 0:e._playbackDuration),e.setSeekTime(n*e._playbackDuration,e._playbackDuration)}),t.on(g.SliderEventTypes.CHANGE_COMPLETE,function(){e._resumeAfterSeek&&e.getState()===S.PlaybackState.PAUSED&&(e._resumeAfterSeek=!1,e.player.resume())}),t}},{key:"_createPlaybackTime",value:function(){var e=m.default.createElement("span"),t=m.default.createElement("text","hello!");return e.classList.add("red5pro-media-control-element"),e.classList.add("red5pro-media-time-field"),e.appendChild(t),e}},{key:"_createFullScreenToggle",value:function(){var e=this,t=m.default.createElement("button");return t.setAttribute("aria-label","Toggle Fullscreen"),t.classList.add("red5pro-media-control-element"),t.classList.add("red5pro-media-element-button"),t.classList.add("red5pro-media-fullscreen-button"),t.addEventListener("click",function(){e.player.toggleFullScreen()}),t}},{key:"enable",value:function(e){e?(this._playPauseButton.classList.remove("red5pro-media-element-button-disabled"),this._playPauseButton.addEventListener("click",this._onPlayPauseClickBound)):(this._playPauseButton.classList.add("red5pro-media-element-button-disabled"),this._playPauseButton.removeEventListener("click",this._onPlayPauseClickBound))}},{key:"formatTime",value:function(e){var t=0,n=0===e?0:parseInt(e/60),r=0;n>=60&&(t=parseInt(n/60),n%=60),r=0===e?0:parseInt(e%60);var i=t<10?["0"+t]:[t];return i.push(n<10?["0"+n]:[n]),i.push(r<10?["0"+r]:[r]),i.join(":")}},{key:"getVolume",value:function(){return this._volumeValue}},{key:"setVolume",value:function(e){return this._volumeField.value=e,this._volumeValue=e,0===e?this.setMutedState(!0):this.getMutedState()&&this.setMutedState(!1),this}},{key:"setSeekTime",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return this._seekTimeField.value=0===t?0:e/t,0!==this._playbackDuration&&parseInt(this._playbackDuration)<=parseInt(e)&&(this._seekTimeField.value=1),this._timeField.innerText=this.formatTime(Math.floor(e)),this}},{key:"setPlaybackDuration",value:function(e){(0,E.debug)(w,"[setplaybackduration]: "+e),this._playbackDuration=e}},{key:"getState",value:function(){return this._state}},{key:"setState",value:function(e){return(0,E.debug)(w,"[setState]: "+S.PlaybackStateReadable[e]),this._state=e,this.onStateChange(this._state),this}},{key:"getMutedState",value:function(){return"muted"in this.player?this.player.muted:this._mutedState}},{key:"setMutedState",value:function(e){return this._mutedState=e,this.onMutedStateChange(this._mutedState),this}},{key:"onStateChange",value:function(e){return e===S.PlaybackState.PLAYING?(this._playPauseButton.classList.remove("red5pro-media-play-button"),this._playPauseButton.classList.add("red5pro-media-pause-button")):(this._playPauseButton.classList.add("red5pro-media-play-button"),this._playPauseButton.classList.remove("red5pro-media-pause-button")),this}},{key:"onMutedStateChange",value:function(e){e?(this._muteButton.classList.add("red5pro-media-mute-button"),this._muteButton.classList.remove("red5pro-media-unmute-button"),this._volumeField.value=0):(this._muteButton.classList.remove("red5pro-media-mute-button"),this._muteButton.classList.add("red5pro-media-unmute-button"),this._volumeField.value=this._volumeValue)}},{key:"onFullScreenChange",value:function(e){return e?(this._fullScreenButton.classList.add("red5pro-media-exit-fullscreen-button"),this._fullScreenButton.classList.remove("red5pro-media-fullscreen-button")):(this._fullScreenButton.classList.remove("red5pro-media-exit-fullscreen-button"),this._fullScreenButton.classList.add("red5pro-media-fullscreen-button")),this}},{key:"setAsVOD",value:function(e){(0,E.debug)(w,"[setAsVOD]: "+e),e?this._seekTimeField.disabled=!1:(this._seekTimeField.value=0,this._seekTimeField.disabled=!0)}},{key:"detach",value:function(){this.enable(!1),this._controlbar&&this._controlbar.parentNode===this.container&&this.container.removeChild(this._controlbar)}}]),t}(C);t.PlaybackController=k,t.PlaybackControls=C,t.PlaybackControlsImpl=P},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t,n){"use strict";var r=n(184)(!0);n(69)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){n(189);for(var r=n(11),i=n(22),o=n(30),a=n(9)("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var c=s[u],l=r[c],d=l&&l.prototype;d&&!d[a]&&i(d,a,c),o[c]=o.Array}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.isObjectEmpty=t.metadataResolutionToObject=t.deepCopy=t.deepDefine=void 0;var i=n(59),o=r(i),a=n(12),s=r(a);t.deepDefine=function(e,t,n){var r=0,i=e,o=t.pop(),a=t.length;for(r;ry;y++)if((b=t?_(a(p=e[y])[0],p[1]):_(e[y]))===c||b===l)return b}else for(v=m.call(e);!(p=v.next()).done;)if((b=i(v,_,p.value,t))===c||b===l)return b};t.BREAK=c,t.RETURN=l},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(15).f,i=n(21),o=n(9)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t){},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.RTCSessionDescription=t.RTCIceCandidate=t.RTCPeerConnection=t.updateBandwidth=t.forceUserMedia=t.getUserMedia=t.isSupported=t.determineSupportedResolution=t.quickResolutionSupport=void 0;var i=n(12),o=r(i),a=n(4),s=r(a),u=n(6),c=n(90),l=n(28),d=n(2),f=[{label:"4K(UHD)",width:3840,height:2160},{label:"1080p(FHD)",width:1920,height:1080},{label:"UXGA",width:1600,height:1200},{label:"720p(HD)",width:1280,height:720},{label:"SVGA",width:800,height:600},{label:"VGA",width:640,height:480},{label:"360p(nHD)",width:640,height:360},{label:"CIF",width:352,height:288},{label:"QVGA",width:320,height:240},{label:"QCIF",width:176,height:144},{label:"QQVGA",width:160,height:120}],h=function(e){return e.hasOwnProperty("video")&&(e.video.hasOwnProperty("width")||e.video.hasOwnProperty("height"))},p=function(e){return e.exact||e.ideal||e.max||e.min||e},v=(0,c.curry)(function(e,t){if("boolean"==typeof e.video)return!0;var n=e.video.hasOwnProperty("width")?p(e.video.width):0,r=e.video.hasOwnProperty("height")?p(e.video.height):0,i=n===t.width&&r===t.height;return i&&(0,d.debug)("[gum:isExact]","Found matching resolution for "+t.width+", "+t.height+"."),i}),b=(0,c.curry)(function(e,t){var n=e.video.hasOwnProperty("width")?p(e.video.width):0,r=e.video.hasOwnProperty("height")?p(e.video.height):0,i=n*r;return t.width*t.height0}),_=(0,c.curry)(function(e,t){var n=b(t);return(0,c.filter)(n)(e)}),y=function(e,t){e.video=!0,s.default.gUM(e).then(function(n){t.resolve({media:n,constraints:e})}).catch(function(n){var r="string"==typeof n?n:[n.name,n.message].join(": ");(0,d.debug)("[gum:getUserMedia]","Failure in getUserMedia: "+r+". Attempting other resolution tests..."),(0,d.debug)("[gUM:findformat]","Constraints declined by browser: "+(0,o.default)(e,null,2)),t.reject("Could not find proper camera for provided constraints.")})},g=function e(t,n,r){if(0==n.length)return void y(t,r);var i=n.shift();t.video.width={exact:i.width},t.video.height={exact:i.height},s.default.gUM(t).then(function(e){r.resolve({media:e,constraints:t})}).catch(function(i){var a="string"==typeof i?i:[i.name,i.message].join(": ");(0,d.debug)("[gum:getUserMedia]","Failure in getUserMedia: "+a+". Attempting other resolution tests..."),(0,d.debug)("[gUM:findformat]","Constraints declined by browser: "+(0,o.default)(t,null,2)),e(t,n,r)})},S=t.quickResolutionSupport=function(e){var t=(0,l.deepCopy)(e);return"boolean"==typeof e.video?t:(e.video.width&&(t.video.width={exact:p(e.video.width)}),e.video.height&&(t.video.height={exact:p(e.video.height)}),t)},E=t.determineSupportedResolution=function(e){(0,d.debug)("[gum:determineSupportedResolution]","Determine next neighbor based on constraints: "+(0,o.default)(e,null,2));var t=new u.DeferredPromise,n=_(f)(e),r=(0,l.deepCopy)(e);return g(r,n,t),t.promise},w=(t.isSupported=function(){return w&&k&&C},t.getUserMedia=function(e){var t=new u.DeferredPromise,n=m(f);(0,d.debug)("[gum:getUserMedia]","Is Available in format listing: "+n(e));var r=function(n){if(n){var r="string"==typeof n?n:[n.name,n.message].join(": ");(0,d.debug)("[gum:getUserMedia]","Failure in getUserMedia: "+r+". Attempting other resolution tests...")}E(e).then(function(e){t.resolve({media:e.media,constraints:e.constraints})}).catch(function(n){t.reject({error:n,constraints:e})})};if(h(e))if(n(e)){(0,d.debug)("[gum:getUserMedia]","Found constraints in list. Checking quick support for faster setup with: "+(0,o.default)(e,null,2));var i=S(e);s.default.gUM(i).then(function(e){t.resolve({media:e,constraints:i})}).catch(r)}else(0,d.debug)("[gum:getUserMedia]","Could not find contraints in list. Attempting failover..."),r();else(0,d.debug)("[gum:getUserMedia]","Constraints were not defined properly. Attempting failover..."),s.default.gUM(e).then(function(n){t.resolve({media:n,constraints:e})}).catch(r);return t.promise},t.forceUserMedia=function(e){return s.default.gUM(e)},t.updateBandwidth=function(e,t){var n=t.indexOf("m=audio"),r=t.indexOf("m=video"),i=void 0,o=void 0,a=void 0;return n>-1&&(e.audio&&(i=t.indexOf("\r\n",n),o=t.slice(0,i),a=t.slice(i+"\r\n".length,t.length),t=[o,"b=AS:"+e.audio,a].join("\r\n")),r=t.indexOf("m=video")),r>-1&&e.video&&(i=t.indexOf("\r\n",r),o=t.slice(0,i),a=t.slice(i+"\r\n".length,t.length),t=[o,"b=AS:"+e.video,a].join("\r\n")),-1===n&&-1===r&&(t=t.replace(/b=AS([^\r\n]+\r\n)/g,""),e.audio&&(t=t.replace(/a=mid:audio\r\n/g,"a=mid:audio\r\nb=AS:"+e.audio+"\r\n")),e.video&&(t=t.replace(/a=mid:video\r\n/g,"a=mid:video\r\nb=AS:"+e.video+"\r\n"))),t},window.RTCPeerConnection||window.mozRTCPeerConnection||window.webkitRTCPeerConnection),k=window.RTCIceCandidate||window.mozRTCIceCandidate||window.webkitRTCIceCandidate,C=window.RTCSessionDescription||window.mozRTCSessionDescription||window.webkitRTCSessionDescription;t.RTCPeerConnection=w,t.RTCIceCandidate=k,t.RTCSessionDescription=C},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=t.isSupported=void 0;var r=n(4),i=function(e){return e&&e.__esModule?e:{default:e}}(r);t.isSupported=function(){return i.default.supportsWebSocket()},t.create=function(e){return i.default.createWebSocket(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(12),o=r(i),a=n(5),s=r(a),u=n(0),c=r(u),l=n(1),d=r(l),f=n(8),h=r(f),p=n(7),v=r(p),b=n(42),m=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(b),_=n(4),y=r(_),g=n(19),S=r(g),E=n(13),w=n(6),k=n(2),C=function(e){function t(e,n){(0,c.default)(this,t);var r=(0,h.default)(this,(t.__proto__||(0,s.default)(t)).call(this));return r._responder=e,r._pendingPostRequests=[],r._websocket=void 0,r._connectionPromise=void 0,r._name=n,r._responseHandlers=[],r._isTerminated=!1,r._retryCount=0,r._retryLimit=1,r._readyCheckCount=0,r._readyCheckLimit=10,r._openState=0,r._onclose=r.tearDown.bind(r),r._onopenTimeout=0,r._asyncTickets=[],r}return(0,v.default)(t,e),(0,d.default)(t,[{key:"_resetOnopenTimeout",value:function(e,t){var n=this,r=setTimeout(function(){if(clearTimeout(r),1===e.readyState){for((0,k.info)(n._name,"[websocketopen]"),n._openState=1;n._pendingPostRequests.length>0;)n.post(n._pendingPostRequests.shift());n._responder&&n._responder.onSocketOpen&&n._responder.onSocketOpen(),n.trigger(new E.WebSocketStateEvent(E.WebSocketStateEventTypes.OPEN,n._name,{socket:n}))}else 0===e.readyState?++n._readyCheckCount>n._readyCheckLimit?((0,k.warn)(n._name,"WebSocket connection issue. We have waited for "+(n._readyCheckCount-1)+" samples, without any connection."),n.clearRetry(),t.reject({type:"Timeout"}),n.tearDown()):((0,k.info)(n._name,"WebSocket connection is still opening, will let it continue ("+n._readyCheckCount+")..."),n._onopenTimeout=n._resetOnopenTimeout(e,t)):(0,k.info)(n._name,"WebSocket connection attempts have ended with state ("+e.readyState+").")},500);return r}},{key:"_removeSocketHandlers",value:function(e){e&&(e.onopen=void 0,e.onmessage=void 0,e.onerror=void 0,e.onclose=void 0)}},{key:"_addSocketHandlers",value:function(e,t){var n=this;this._openState=0,this._readyCheckCount=0,clearTimeout(this._onopenTimeout),this._onopenTimeout=this._resetOnopenTimeout(e,t),e.onerror=function(e){(0,k.warn)(n._name,"[websocketerror]: Error from WebSocket. "+e.type+"."),n.clearRetry(),t.reject(e),n.trigger(new E.WebSocketStateEvent(E.WebSocketStateEventTypes.ERROR,n._name,{socket:n,error:e}))},e.onmessage=function(e){n.respond(e)},e.onclose=function(t){t.code>1e3?(0,k.warn)(n._name,"[websocketclose]: "+t.code):(0,k.debug)(n._name,"[websocketclose]: "+t.code),n._responder&&n._responder.onSocketClose&&n._responder.onSocketClose(t),n.clearRetry(),n._removeSocketHandlers(e||n._websocket),n._openState=0,n.trigger(new E.WebSocketStateEvent(E.WebSocketStateEventTypes.CLOSE,n._name,{socket:n,event:t}))}}},{key:"_onUnexpectedSocketError",value:function(e){this._responder&&this._responder.onSocketClose&&this._responder.onSocketClose(e),this.trigger(new E.WebSocketStateEvent(E.WebSocketStateEventTypes.CLOSE,this._name,{socket:this})),(0,k.warn)(this._name,"[websocketerror]: Possible Unexpected Error from WebSocket. "+e.type+", "+e.detail),this.clearRetry(),this._removeSocketHandlers(this._websocket)}},{key:"clearRetry",value:function(){this._retryCount=0,this._readyCheckCount=0,clearTimeout(this._onopenTimeout)}},{key:"setUp",value:function(e,t){var n=this,r=y.default.getIsMoz()||y.default.getIsEdge();if((0,k.debug)(this._name,"[websocket:setup] "+e+"."),this.tearDown(),this._isTerminated=!1,this._connectionPromise=t,y.default.addCloseHandler(this._onclose),this._websocket=m.create(e),this._addSocketHandlers(this._websocket,this._connectionPromise),r&&this._retryCount++>"),(0,k.debug)(this._name,"[WebSocket("+this._websocket.url+")] close() >>");try{this._websocket.close()}catch(e){(0,k.warn)(this._name,"Attempt to close WebSocket failed: "+e.message+"."),this._removeSocketHandlers(this._websocket)}finally{this._websocket&&(0,k.debug)(this._name,"<< [WebSocket("+this._websocket.url+")] close()")}(0,k.debug)(this._name,"<< [teardown]")}for(this._websocket=void 0,this._isTerminated=!0,this._openState=0;this._responseHandlers.length>0;)this._responseHandlers.shift();y.default.removeCloseHandler(this._onclose)}},{key:"getJsonFromSocketMessage",value:function(e){try{return"string"==typeof e.data?JSON.parse(e.data):e.data}catch(t){(0,k.warn)(this._name,"Could not parse message as JSON. Message= "+e.data+". Error= "+t.message)}return null}},{key:"addSharedObjectResponseHandler",value:function(e){this._responseHandlers.push(e)}},{key:"removeSharedObjectResponseHandler",value:function(e){for(var t=this._responseHandlers.length;--t>-1;)if(this._responseHandlers[t]===e)return void this._responseHandlers.splice(t,1)}},{key:"handleMessageResponse",value:function(e){var t=void 0,n=void 0,r=this._responseHandlers.length;for(t=0;t1&&void 0!==arguments[1]?arguments[1]:void 0,n=e.wsprotocol||e.protocol,r=u(e.wsport||e.port),i=e.context?[e.app,e.context].join("/"):e.app,a=n+"://"+e.host+":"+r+"/"+i+"/";if(void 0!==e.connectionParams){var l=c(e.connectionParams);t=(0,o.default)(t,l)}if(void 0!==t){var d=[];(0,s.default)(t).forEach(function(e,n){d.push([e,t[e]].join("="))}),d.length>0&&(a+="?"+d.join("&"))}return a},t.hlsSocketEndpointFromOptions=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=e.socketParams,r=e.connectionParams,i=n.protocol,a=u(n.port||("wss"===i?443:5080)),l=i+"://"+n.host+":"+a+"/"+n.app+"/";if(r){var d=c(e.connectionParams);t=(0,o.default)(t,d)}if(t){var f=[];(0,s.default)(t).forEach(function(e,n){f.push([e,t[e]].join("="))}),f.length>0&&(l+="?"+f.join("&"))}return l}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.PlaybackView=void 0;var i=n(0),o=r(i),a=n(1),s=r(a),u=n(4),c=r(u),l=n(2),d="R5ProPlaybackView",f="red5pro-subscriber",h=t.PlaybackView=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f;(0,o.default)(this,e);try{this._targetElement=c.default.resolveElement(t)}catch(e){throw(0,l.error)(d,"Could not instantiate a new instance of Red5ProSubscriber. Reason: "+e.message),e}}return(0,s.default)(e,[{key:"attachSubscriber",value:function(e){(0,l.debug)(d,"[attachsubscriber]"),e.setView(this,c.default.getElementId(this._targetElement))}},{key:"attachStream",value:function(e){var t=this.isAutoplay;(0,l.debug)(d,"[attachstream]"),c.default.setVideoSource(this._targetElement,e,t)}},{key:"isAutoplay",get:function(){return c.default.hasAttributeDefined(this._targetElement,"autoplay")}},{key:"view",get:function(){return this._targetElement}}]),e}();t.default=h},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(36),i=n(9)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t){e.exports=!0},function(e,t,n){var r=n(16),i=n(180),o=n(67),a=n(73)("IE_PROTO"),s=function(){},u=function(){var e,t=n(66)("iframe"),r=o.length;for(t.style.display="none",n(99).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("