@stormstreaming/stormstreamer 0.9.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +31 -0
  2. package/dist/amd/index.js +3448 -0
  3. package/dist/cjs/index.js +14 -0
  4. package/dist/esm/index.js +14 -0
  5. package/dist/iife/index.js +14 -0
  6. package/dist/types/StormStreamer.d.ts +75 -0
  7. package/dist/types/config/AudioData.d.ts +16 -0
  8. package/dist/types/config/ConfigManager.d.ts +18 -0
  9. package/dist/types/config/DebugData.d.ts +33 -0
  10. package/dist/types/config/IConfig.d.ts +4 -0
  11. package/dist/types/config/SettingsData.d.ts +37 -0
  12. package/dist/types/config/StorageData.d.ts +16 -0
  13. package/dist/types/config/StreamData.d.ts +25 -0
  14. package/dist/types/config/VideoData.d.ts +40 -0
  15. package/dist/types/config/enum/LogType.d.ts +7 -0
  16. package/dist/types/config/enum/ProtocolType.d.ts +7 -0
  17. package/dist/types/config/enum/ScalingType.d.ts +6 -0
  18. package/dist/types/config/enum/SecurityType.d.ts +4 -0
  19. package/dist/types/config/enum/SizeCalculationType.d.ts +5 -0
  20. package/dist/types/events/EventDispatcher.d.ts +15 -0
  21. package/dist/types/events/StormStreamerEvent.d.ts +128 -0
  22. package/dist/types/events/StormStreamerListener.d.ts +2 -0
  23. package/dist/types/index.amd.d.ts +10 -0
  24. package/dist/types/index.cjs.d.ts +10 -0
  25. package/dist/types/index.esm.d.ts +10 -0
  26. package/dist/types/index.iife.d.ts +3 -0
  27. package/dist/types/index.umd.d.ts +10 -0
  28. package/dist/types/logger/Logger.d.ts +25 -0
  29. package/dist/types/model/AbstractSourceItem.d.ts +9 -0
  30. package/dist/types/model/ClientUser.d.ts +6 -0
  31. package/dist/types/model/GatewayServerItem.d.ts +17 -0
  32. package/dist/types/model/IServerItem.d.ts +9 -0
  33. package/dist/types/model/ISourceItem.d.ts +8 -0
  34. package/dist/types/model/IStreamItem.d.ts +8 -0
  35. package/dist/types/model/QualityItem.d.ts +17 -0
  36. package/dist/types/model/RTMPSourceItem.d.ts +17 -0
  37. package/dist/types/model/RTSPSourceItem.d.ts +17 -0
  38. package/dist/types/model/StormMetaDataItem.d.ts +44 -0
  39. package/dist/types/model/StormServerItem.d.ts +17 -0
  40. package/dist/types/model/StormSourceItem.d.ts +11 -0
  41. package/dist/types/model/StreamInfo.d.ts +17 -0
  42. package/dist/types/network/AbstractSocket.d.ts +26 -0
  43. package/dist/types/network/NetworkController.d.ts +20 -0
  44. package/dist/types/network/StormPacket.d.ts +93 -0
  45. package/dist/types/network/WowzaConnection.d.ts +22 -0
  46. package/dist/types/playback/CooldownMonitor.d.ts +9 -0
  47. package/dist/types/playback/PlaybackController.d.ts +54 -0
  48. package/dist/types/playback/SoundMeter.d.ts +17 -0
  49. package/dist/types/playback/enum/ConnectionState.d.ts +8 -0
  50. package/dist/types/playback/enum/InputType.d.ts +4 -0
  51. package/dist/types/playback/enum/PublishState.d.ts +10 -0
  52. package/dist/types/playback/enum/TaskType.d.ts +7 -0
  53. package/dist/types/playback/model/InputDevice.d.ts +14 -0
  54. package/dist/types/playback/model/InputDeviceList.d.ts +9 -0
  55. package/dist/types/playback/player/AbstractPlayer.d.ts +11 -0
  56. package/dist/types/playback/player/IPlayer.d.ts +3 -0
  57. package/dist/types/playback/task/IPlaybackTask.d.ts +4 -0
  58. package/dist/types/playback/task/PauseTask.d.ts +8 -0
  59. package/dist/types/playback/task/PlayTask.d.ts +8 -0
  60. package/dist/types/playback/task/SubscribeTask.d.ts +8 -0
  61. package/dist/types/playback/task/UnsubscribeTask.d.ts +6 -0
  62. package/dist/types/stage/ScreenElement.d.ts +19 -0
  63. package/dist/types/stage/StageController.d.ts +46 -0
  64. package/dist/types/storage/StorageManager.d.ts +10 -0
  65. package/dist/types/types/AudioConfig.d.ts +4 -0
  66. package/dist/types/types/DebugConfig.d.ts +15 -0
  67. package/dist/types/types/ServerListConfig.d.ts +6 -0
  68. package/dist/types/types/SettingsConfig.d.ts +15 -0
  69. package/dist/types/types/SourceListConfig.d.ts +9 -0
  70. package/dist/types/types/StorageConfig.d.ts +4 -0
  71. package/dist/types/types/StreamConfig.d.ts +5 -0
  72. package/dist/types/types/StreamInfoConfig.d.ts +6 -0
  73. package/dist/types/types/StreamerConfig.d.ts +7 -0
  74. package/dist/types/types/VideoConfig.d.ts +9 -0
  75. package/dist/types/utilities/DomUtilities.d.ts +6 -0
  76. package/dist/types/utilities/MungeData.d.ts +18 -0
  77. package/dist/types/utilities/MungeSDP.d.ts +16 -0
  78. package/dist/types/utilities/NumberUtilities.d.ts +9 -0
  79. package/dist/types/utilities/UserCapabilities.d.ts +19 -0
  80. package/dist/umd/index.js +14 -0
  81. package/package.json +102 -0
@@ -0,0 +1,8 @@
1
+ export declare enum ConnectionState {
2
+ NOT_INITIALIZED = 0,
3
+ STARTED = 1,
4
+ CONNECTING = 2,
5
+ CONNECTED = 3,
6
+ CLOSED = 4,
7
+ FAILED = 5
8
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum InputType {
2
+ VIDEO_INPUT = 0,
3
+ AUDIO_INPUT = 1
4
+ }
@@ -0,0 +1,10 @@
1
+ export declare enum PublishState {
2
+ NOT_INITIALIZED = "NOT_INITIALIZED",
3
+ INITIALIZED = "INITIALIZED",
4
+ CONNECTING = "CONNECTING",
5
+ PUBLISHED = "PUBLISHED",
6
+ UNPUBLISHED = "UNPUBLISHED",
7
+ STOPPED = "STOPPED",
8
+ UNKNOWN = "UNKNOWN",
9
+ ERROR = "ERROR"
10
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum TaskType {
2
+ SUBSCRIBE = "SUBSCRIBE",
3
+ UNSUBSCRIBE = "UNSUBSCRIBE",
4
+ PLAY = "PLAY",
5
+ PAUSE = "PAUSE",
6
+ STOP = " STOP"
7
+ }
@@ -0,0 +1,14 @@
1
+ export declare class InputDevice {
2
+ private readonly _inputType;
3
+ private readonly _label;
4
+ private readonly _id;
5
+ private readonly _groupID;
6
+ private _isSelected;
7
+ constructor(inputDevice: any, number: number);
8
+ private cleanLabel;
9
+ getLabel(): string;
10
+ getID(): string;
11
+ getGroupID(): string;
12
+ getIfSelected(): boolean;
13
+ setSelected(isSelected: boolean): void;
14
+ }
@@ -0,0 +1,9 @@
1
+ import { InputDevice } from "./InputDevice";
2
+ export declare class InputDeviceList {
3
+ private _internalList;
4
+ constructor();
5
+ push(item: InputDevice): number;
6
+ get(id: number): InputDevice;
7
+ getSize(): number;
8
+ getArray(): Array<InputDevice>;
9
+ }
@@ -0,0 +1,11 @@
1
+ import { PlaybackController } from "../PlaybackController";
2
+ import { Logger } from "../../logger/Logger";
3
+ import { StormStreamer } from "../../StormStreamer";
4
+ export declare class AbstractPlayer {
5
+ protected _main: StormStreamer;
6
+ protected _playbackController: PlaybackController;
7
+ protected _logger: Logger;
8
+ protected _videoObject: HTMLVideoElement;
9
+ protected _dataPacketCount: number;
10
+ getPlaybackRate(): number;
11
+ }
@@ -0,0 +1,3 @@
1
+ export interface IPlayer {
2
+ clear(): void;
3
+ }
@@ -0,0 +1,4 @@
1
+ import { TaskType } from "../enum/TaskType";
2
+ export interface IPlaybackTask {
3
+ getType(): TaskType;
4
+ }
@@ -0,0 +1,8 @@
1
+ import { IPlaybackTask } from "./IPlaybackTask";
2
+ import { TaskType } from "../enum/TaskType";
3
+ export declare class PauseTask implements IPlaybackTask {
4
+ private _isStopped;
5
+ constructor(isStopped?: boolean);
6
+ getIfStopped(): boolean;
7
+ getType(): TaskType;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { IPlaybackTask } from "./IPlaybackTask";
2
+ import { TaskType } from "../enum/TaskType";
3
+ export declare class PlayTask implements IPlaybackTask {
4
+ private readonly _streamKey;
5
+ constructor(streamKey: string);
6
+ getStreamKey(): string;
7
+ getType(): TaskType;
8
+ }
@@ -0,0 +1,8 @@
1
+ import { IPlaybackTask } from "./IPlaybackTask";
2
+ import { TaskType } from "../enum/TaskType";
3
+ export declare class SubscribeTask implements IPlaybackTask {
4
+ private readonly _streamKey;
5
+ constructor(streamKey: string);
6
+ getStreamKey(): string;
7
+ getType(): TaskType;
8
+ }
@@ -0,0 +1,6 @@
1
+ import { IPlaybackTask } from "./IPlaybackTask";
2
+ import { TaskType } from "../enum/TaskType";
3
+ export declare class UnsubscribeTask implements IPlaybackTask {
4
+ constructor();
5
+ getType(): TaskType;
6
+ }
@@ -0,0 +1,19 @@
1
+ import { StormStreamer } from "../StormStreamer";
2
+ export declare class ScreenElement {
3
+ private readonly LOG_ACTIVITY;
4
+ private _main;
5
+ private _volume;
6
+ private _isMuted;
7
+ private _isMutedByBrowser;
8
+ private _videoElement;
9
+ private _logger;
10
+ constructor(main: StormStreamer);
11
+ initialize(): void;
12
+ private onForceMute;
13
+ setVolume(value: number): void;
14
+ getVolume(): number;
15
+ setMuted(isMuted: boolean): void;
16
+ getIfMuted(): boolean;
17
+ dispatchVolumeEvent(): void;
18
+ getVideoElement(): HTMLVideoElement;
19
+ }
@@ -0,0 +1,46 @@
1
+ import { Logger } from "../logger/Logger";
2
+ import { ScalingType } from "../config/enum/ScalingType";
3
+ import { ScreenElement } from "./ScreenElement";
4
+ import { StormStreamer } from "../StormStreamer";
5
+ export declare class StageController {
6
+ private static readonly LOG_ACTIVITY;
7
+ private _screenElement;
8
+ private _videoContainer;
9
+ private _parentElement;
10
+ private _containerWidth;
11
+ private _tempContainerWidth;
12
+ private _containerHeight;
13
+ private _tempContainerHeight;
14
+ private _videoWidth;
15
+ private _videoHeight;
16
+ private _scalingMode;
17
+ private isInFullScreenMode;
18
+ private _main;
19
+ protected _logger: Logger;
20
+ private _resizeObserver;
21
+ private _autoResizeEnabled;
22
+ constructor(main: StormStreamer);
23
+ initialize(): void;
24
+ private onFullScreenChange;
25
+ attachToParent(container: string | HTMLElement): boolean;
26
+ detachFromParent(): boolean;
27
+ onResize: () => void;
28
+ private resizeVideoContainer;
29
+ private scaleVideo;
30
+ enterFullScreen(): void;
31
+ exitFullScreen(): void;
32
+ isFullScreenMode(): boolean;
33
+ private setDimension;
34
+ setSize(width: number | string, height: number | string): void;
35
+ setWidth(width: number | string): void;
36
+ setHeight(height: number | string): void;
37
+ getParentElement(): HTMLElement | null;
38
+ setScalingMode(newMode: string): void;
39
+ getContainerWidth(): number;
40
+ getContainerHeight(): number;
41
+ getScalingModeAsString(): string;
42
+ getScalingMode(): ScalingType;
43
+ getScreenElement(): ScreenElement | null;
44
+ getContainer(): HTMLElement | null;
45
+ destroy(): void;
46
+ }
@@ -0,0 +1,10 @@
1
+ import { StormStreamer } from "../StormStreamer";
2
+ export declare class StorageManager {
3
+ private readonly LOG_ACTIVITY;
4
+ private isEnabled;
5
+ private prefix;
6
+ private logger;
7
+ constructor(main: StormStreamer);
8
+ saveField(name: string, value: string): void;
9
+ getField(name: string): string | null;
10
+ }
@@ -0,0 +1,4 @@
1
+ export type AudioConfig = {
2
+ startVolume?: number;
3
+ muted?: boolean;
4
+ };
@@ -0,0 +1,15 @@
1
+ export type DebugConfig = {
2
+ console?: IDebugConsoleConfig;
3
+ container?: IDebugContainerConfig;
4
+ };
5
+ export type IDebugConsoleConfig = {
6
+ enabled?: boolean;
7
+ logTypes?: Array<string>;
8
+ monoColor?: false;
9
+ };
10
+ export type IDebugContainerConfig = {
11
+ enabled?: boolean;
12
+ logTypes?: Array<string>;
13
+ monoColor?: false;
14
+ containerID?: string;
15
+ };
@@ -0,0 +1,6 @@
1
+ export type ServerListConfig = {
2
+ host: string;
3
+ application: string;
4
+ port?: number;
5
+ ssl?: boolean;
6
+ };
@@ -0,0 +1,15 @@
1
+ import { VideoConfig } from "./VideoConfig";
2
+ import { AudioConfig } from "./AudioConfig";
3
+ import { DebugConfig } from "./DebugConfig";
4
+ import { StorageConfig } from "./StorageConfig";
5
+ export type SettingsConfig = {
6
+ autoConnect?: boolean;
7
+ autoStart?: boolean;
8
+ restartOnFocus?: boolean;
9
+ restartOnError?: boolean;
10
+ reconnectTime?: number;
11
+ video?: VideoConfig;
12
+ audio?: AudioConfig;
13
+ storage?: StorageConfig;
14
+ debug?: DebugConfig;
15
+ };
@@ -0,0 +1,9 @@
1
+ import { StreamInfoConfig } from "./StreamInfoConfig";
2
+ export type SourceListConfig = {
3
+ host?: string;
4
+ application?: string;
5
+ port?: number;
6
+ streamKey: string;
7
+ protocol: string;
8
+ streamInfo?: StreamInfoConfig;
9
+ };
@@ -0,0 +1,4 @@
1
+ export type StorageConfig = {
2
+ enabled?: boolean;
3
+ prefix?: string;
4
+ };
@@ -0,0 +1,5 @@
1
+ import { ServerListConfig } from "./ServerListConfig";
2
+ export type StreamConfig = {
3
+ streamKey?: string;
4
+ serverList?: ServerListConfig[];
5
+ };
@@ -0,0 +1,6 @@
1
+ export type StreamInfoConfig = {
2
+ label: string;
3
+ bitrate?: number;
4
+ width?: string;
5
+ height?: string;
6
+ };
@@ -0,0 +1,7 @@
1
+ import { SettingsConfig } from "./SettingsConfig";
2
+ import { StreamConfig } from "./StreamConfig";
3
+ export type StreamerConfig = {
4
+ stream: StreamConfig;
5
+ settings: SettingsConfig;
6
+ demoMode?: boolean;
7
+ };
@@ -0,0 +1,9 @@
1
+ export type VideoConfig = {
2
+ scalingMode?: "fill" | "letterbox" | "crop" | "original";
3
+ containerID?: string;
4
+ width?: number | string;
5
+ height?: number | string;
6
+ aspectRatio?: string;
7
+ sizeCalculationMethod?: "clientDimensions" | "boundingBox" | "fullBox";
8
+ resizeDebounce?: number;
9
+ };
@@ -0,0 +1,6 @@
1
+ export declare class DomUtilities {
2
+ static calculateDimensionsWithMargins(element: HTMLElement): {
3
+ width: number;
4
+ height: number;
5
+ };
6
+ }
@@ -0,0 +1,18 @@
1
+ export declare class MungeData {
2
+ private _videoCodec?;
3
+ private _audioCodec?;
4
+ private _videoBitrate?;
5
+ private _audioBitrate?;
6
+ private _videoFrameRate?;
7
+ constructor();
8
+ get videoCodec(): string | undefined;
9
+ set videoCodec(value: string);
10
+ get audioCodec(): string | undefined;
11
+ set audioCodec(value: string);
12
+ get videoBitrate(): string | undefined;
13
+ set videoBitrate(value: string);
14
+ get audioBitrate(): string | undefined;
15
+ set audioBitrate(value: string);
16
+ get videoFrameRate(): number | undefined;
17
+ set videoFrameRate(value: number);
18
+ }
@@ -0,0 +1,16 @@
1
+ import { MungeData } from "./MungeData";
2
+ export declare class MungeSDP {
3
+ private static SDPOutput;
4
+ private static videoChoice;
5
+ private static audioChoice;
6
+ private static videoIndex;
7
+ private static audioIndex;
8
+ constructor();
9
+ private addAudio;
10
+ private addVideo;
11
+ private deliverCheckLine;
12
+ private checkLine;
13
+ private getrtpMapID;
14
+ mungeSDPPublish(sdpStr: string, mungeData: MungeData): string;
15
+ mungeSDPPlay(sdpStr: string): string;
16
+ }
@@ -0,0 +1,9 @@
1
+ export declare class NumberUtilities {
2
+ static addLeadingZero(number: number): string;
3
+ static isNear(currentBuffer: number, target: number, targetMargin: number): boolean;
4
+ static generateUniqueString(length: number): string;
5
+ static parseValue: (value: number | string) => {
6
+ value: number;
7
+ isPixels: boolean;
8
+ };
9
+ }
@@ -0,0 +1,19 @@
1
+ export declare class UserCapabilities {
2
+ static hasWebSocketsSupport(): boolean;
3
+ static isMobile(): boolean;
4
+ static isCookieEnabled(): boolean;
5
+ static getOSVersion(): string;
6
+ static getBrowserName(): string;
7
+ static getBrowserVersion(): number;
8
+ static getFullBrowser(): {
9
+ name: string;
10
+ fullVersion: string;
11
+ version: number;
12
+ };
13
+ static getOS(): string;
14
+ static hasWebRTCSupport(): boolean;
15
+ static hasHLSSupport(videoObject: HTMLVideoElement | null): boolean;
16
+ static hasMSESupport(): boolean;
17
+ static hasMMSSupport(): boolean;
18
+ static isSSL(): boolean;
19
+ }
@@ -0,0 +1,14 @@
1
+ /*
2
+ * StormStreaming JavaScript Streamer
3
+ * Copyright © 2021-2024 Web-Anatomy s.c. All rights reserved.
4
+ * contact@stormstreaming.com
5
+ * https://stormstreaming.com
6
+ *
7
+ * Version: 0.9.0-beta.0
8
+ * Version: 11/28/2024, 9:22:54 AM
9
+ *
10
+ * LEGAL NOTICE:
11
+ * This software is subject to the terms and conditions defined in
12
+ * separate license conditions ('LICENSE.txt')
13
+ *
14
+ */!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).stormStreamer={})}(this,function(o){"use strict";class r{constructor(e,t,i=443,n=!0){this.host=e,this.application=t,this.port=i,this.isSSL=n,this.hasFaild=!1}getHost(){return this.host}getApplication(){return this.application}getPort(){return this.port}getIfSSL(){return this.isSSL}getIfFaild(){return this.hasFaild}setAsFaild(e){this.hasFaild=e}getData(){return{serverURL:this.getHost(),application:this.getHost(),serverPort:this.getPort(),isSSL:this.getIfSSL()}}toString(){return"host: "+this.host+" | application: "+this.application+" | port: "+this.port+" | isSSL: "+this.isSSL}}class a{constructor(e){this._serverList=new Array,this._sourceList=new Array,this._streamKey=null,this.parse(e)}parse(e){if(this._streamConfig=e,!this._streamConfig)throw new Error("Stream configuration is missing. Please check stream config!");if(void 0===this._streamConfig.serverList||null===this._streamConfig.serverList)throw new Error("StormLibrary: Server list configuration is missing. Please check the config!");if(0===this._streamConfig.serverList.length)throw new Error("StormLibrary: Server list configuration is empty. Please check the config!");for(let i=0;i<this._streamConfig.serverList.length;i++){let e,t;if(null==this._streamConfig.serverList[i].host)throw new Error('Error while parsing server object ("host" field is missing). Please check player config!');if(e=this._streamConfig.serverList[i].host,null==this._streamConfig.serverList[i].application)throw new Error('Error while parsing server object ("application" field is missing). Please check player config!');t=this._streamConfig.serverList[i].application;var n=null!=(n=this._streamConfig.serverList[i].port)?n:a.DEFAULT_CONNECTION_PORT,s=null!=(s=this._streamConfig.serverList[i].ssl)?s:a.IS_SSL_BY_DEFAULT;this._serverList.push(new r(e,t,n,s))}this._streamKey=null!=(e=this._streamConfig.streamKey)?e:this._streamKey}getServerList(){return this._serverList}getSourceList(){return this._sourceList}get streamKey(){return this._streamKey}set streamKey(e){this._streamKey=e}set serverList(e){this._serverList=e}set sourceList(e){this._sourceList=e}clearSourceList(){this._sourceList=new Array}clearServerList(){this._serverList=new Array}print(t,e=!1){if(a.PRINT_ON_STARTUP||e){t.info(this,"Server List:");for(let e=0;e<this._serverList.length;e++)t.info(this,"=> ["+e+"] "+this._serverList[e].toString());t.info(this,"StreamKey: "+this._streamKey)}}}var s,i,n;a.PRINT_ON_STARTUP=!0,a.DEFAULT_CONNECTION_PORT=443,a.IS_SSL_BY_DEFAULT=!0,(p=s=s||{}).FILL="fill",p.LETTER_BOX="letterbox",p.CROP="crop",p.ORIGINAL="original",(p=i=i||{}).CLIENT_DIMENSIONS="clientDimensions",p.BOUNDING_BOX="boundingBox",p.FULL_BOX="fullBox";class t{constructor(e){this._scalingMode=s.LETTER_BOX,this._aspectRatio="none",this._videoWidthValue=100,this._isVideoWidthInPixels=!1,this._wasVideoWidthProvided=!1,this._videoHeightValue=100,this._isVideoHeightInPixels=!1,this._wasVideoHeightProvided=!1,this._resizeDebounce=250,this._parentSizeCalculationMethod=i.CLIENT_DIMENSIONS,this.parse(e)}parse(e){if(this.videoConfig=e,null==this.videoConfig)throw new Error("Missing video configuration. Please check player config!");if(null!=this.videoConfig.aspectRatio){var e=new RegExp("^[0-9]*\\.?[0-9]+:[0-9]*\\.?[0-9]+$"),t=this.videoConfig.aspectRatio;if(!e.test(t))throw new Error('Parameter "aspectRatio" - must match "number:number" pattern ');this._aspectRatio=t,this._aspectRatio=this.videoConfig.aspectRatio}if(null!=this.videoConfig.scalingMode)switch(this.videoConfig.scalingMode.toLowerCase()){case"fill":this._scalingMode=s.FILL;break;case"letterbox":this._scalingMode=s.LETTER_BOX;break;case"crop":this._scalingMode=s.CROP;break;case"original":this._scalingMode=s.ORIGINAL;break;default:throw new Error("Unknown video scaling mode. Please check player config!")}if(void 0!==this.videoConfig.width){if(null===this.videoConfig.width)throw new Error('Parameter "width" cannot be empty');if("number"==typeof this.videoConfig.width)this._videoWidthValue=this.videoConfig.width,this._isVideoWidthInPixels=!0;else{if("string"!=typeof this.videoConfig.width)throw new Error('Unknown type for parameter "width" - it must be a number or a string! ');this.videoConfig.width.toLowerCase().endsWith("px")?(this._videoWidthValue=parseInt(this.videoConfig.width),this._isVideoWidthInPixels=!0):this.videoConfig.width.toLowerCase().endsWith("%")&&(this._videoWidthValue=parseInt(this.videoConfig.width),this._isVideoWidthInPixels=!1)}this._wasVideoWidthProvided=!0}if(void 0!==this.videoConfig.height){if(null===this.videoConfig.height)throw new Error('Parameter "height" cannot be empty');if("number"==typeof this.videoConfig.height)this._videoHeightValue=this.videoConfig.height,this._isVideoHeightInPixels=!0;else{if("string"!=typeof this.videoConfig.height)throw new Error('Unknown type for parameter "height" - it must be a number or a string!');this.videoConfig.height.toLowerCase().endsWith("px")?(this._videoHeightValue=parseInt(this.videoConfig.height),this._isVideoHeightInPixels=!0):this.videoConfig.height.toLowerCase().endsWith("%")&&(this._videoHeightValue=parseInt(this.videoConfig.height),this._isVideoHeightInPixels=!1)}this._wasVideoHeightProvided=!0}if(void 0!==this.videoConfig.sizeCalculationMethod&&null!==this.videoConfig.sizeCalculationMethod)switch(this.videoConfig.sizeCalculationMethod){case"clientDimensions":this._parentSizeCalculationMethod=i.CLIENT_DIMENSIONS;break;case"boundingBox":this._parentSizeCalculationMethod=i.BOUNDING_BOX;break;case"fullBox":this._parentSizeCalculationMethod=i.FULL_BOX}this._containerID=null!=(e=this.videoConfig.containerID)?e:null,this._resizeDebounce=null!=(t=this.videoConfig.resizeDebounce)?t:this._resizeDebounce}get scalingMode(){return this._scalingMode}get containerID(){return this._containerID}get videoWidthValue(){return this._videoWidthValue}get videoWidthInPixels(){return this._isVideoWidthInPixels}get videoWidthProvided(){return this._wasVideoWidthProvided}get videoHeightValue(){return this._videoHeightValue}get videoHeightInPixels(){return this._isVideoHeightInPixels}get videoHeightProvided(){return this._wasVideoHeightProvided}get aspectRatio(){return this._aspectRatio}get resizeDebounce(){return this._resizeDebounce}set resizeDebounce(e){this._resizeDebounce=e}set videoWidthValue(e){this._videoWidthValue=e}set videoWidthInPixels(e){this._isVideoWidthInPixels=e}set videoHeightValue(e){this._videoHeightValue=e}set videoHeightInPixels(e){this._isVideoHeightInPixels=e}set containerID(e){this._containerID=e}set scalingMode(e){switch(e.toLowerCase()){case"fill":this._scalingMode=s.FILL;break;case"letterbox":this._scalingMode=s.LETTER_BOX;break;case"crop":this._scalingMode=s.CROP;break;case"original":this._scalingMode=s.ORIGINAL;break;default:throw new Error("Unknown video scaling mode. Please check player config!")}}get parentSizeCalculationMethod(){return this._parentSizeCalculationMethod}print(e){let t="";switch(this._scalingMode){case s.FILL:t="fill";break;case s.LETTER_BOX:t="letterbox";break;case s.CROP:t="crop";break;case s.ORIGINAL:t="original"}e.info(this,"VideoConfig :: containerID: "+this._containerID),e.info(this,"VideoConfig :: scalingMode: "+t),e.info(this,"VideoConfig :: width: "+this._videoWidthValue+(this._isVideoWidthInPixels?"px":"%")+(this._wasVideoWidthProvided?" (provided)":" (default)")),e.info(this,"VideoConfig :: height: "+this._videoHeightValue+(this._isVideoHeightInPixels?"px":"%")+(this._wasVideoHeightProvided?" (provided)":" (default)")),e.info(this,"VideoConfig :: aspectRatio: "+this._aspectRatio)}}(p=n=n||{})[p.TRACE=0]="TRACE",p[p.INFO=1]="INFO",p[p.SUCCESS=2]="SUCCESS",p[p.WARNING=3]="WARNING",p[p.ERROR=4]="ERROR";class h{constructor(e){this._consoleLogEnabled=!1,this._enabledConsoleTypes=[n.INFO,n.ERROR,n.SUCCESS,n.TRACE,n.WARNING],this._consoleMonoColor=!1,this._containerLogEnabled=!1,this._enabledContainerTypes=[n.INFO,n.ERROR,n.SUCCESS,n.TRACE,n.WARNING],this._containerLogMonoColor=!1,this.parse(e)}parse(e){this._debugConfig=e,this._debugConfig&&(this._consoleLogEnabled=null!=(e=null==(e=null==(e=this._debugConfig)?void 0:e.console)?void 0:e.enabled)?e:this._consoleLogEnabled,this._consoleMonoColor=null!=(e=null==(e=null==(e=this._debugConfig)?void 0:e.console)?void 0:e.monoColor)?e:this._consoleMonoColor,this._enabledConsoleTypes=null!=(e=this.parseLogTypes(null==(e=null==(e=this._debugConfig)?void 0:e.console)?void 0:e.logTypes))?e:this._enabledConsoleTypes,this._containerLogEnabled=null!=(e=null==(e=null==(e=this._debugConfig)?void 0:e.container)?void 0:e.enabled)?e:this._containerLogEnabled,this._containerLogMonoColor=null!=(e=null==(e=null==(e=this._debugConfig)?void 0:e.container)?void 0:e.monoColor)?e:this._containerLogMonoColor,this._enabledContainerTypes=null!=(e=this.parseLogTypes(null==(e=null==(e=this._debugConfig)?void 0:e.container)?void 0:e.logTypes))?e:this._enabledContainerTypes,this._containerID=null!=(e=null==(e=null==(e=this._debugConfig)?void 0:e.container)?void 0:e.containerID)?e:this._containerID)}parseLogTypes(e){return null==e?void 0:e.map(e=>{switch(e.toLowerCase()){case"info":return n.INFO;case"error":return n.ERROR;case"warning":return n.WARNING;case"success":return n.SUCCESS;case"trace":return n.TRACE;default:throw new Error("Unsupported log type: "+e)}})}get consoleLogEnabled(){return this._consoleLogEnabled}set consoleLogEnabled(e){this._consoleLogEnabled=e}get enabledConsoleTypes(){return this._enabledConsoleTypes}set enabledConsoleTypes(t){this._enabledConsoleTypes=new Array;for(let e=0;e<t.length;e++)switch(t[e].toLowerCase()){case"info":this._enabledConsoleTypes.push(n.INFO);break;case"error":this._enabledConsoleTypes.push(n.ERROR);break;case"warning":this._enabledConsoleTypes.push(n.WARNING);break;case"success":this._enabledConsoleTypes.push(n.SUCCESS);break;case"trace":this._enabledConsoleTypes.push(n.TRACE)}}get containerLogEnabled(){return this._containerLogEnabled}set containerLogEnabled(e){this._consoleLogEnabled=e}get consoleLogMonoColor(){return this._consoleMonoColor}set consoleLogMonoColor(e){this._consoleMonoColor=e}get enabledContainerTypes(){return this._enabledContainerTypes}set enabledContainerTypes(t){this._enabledContainerTypes=new Array;for(let e=0;e<t.length;e++)switch(t[e].toLowerCase()){case"info":this._enabledContainerTypes.push(n.INFO);break;case"error":this._enabledContainerTypes.push(n.ERROR);break;case"warning":this._enabledContainerTypes.push(n.WARNING);break;case"success":this._enabledContainerTypes.push(n.SUCCESS);break;case"trace":this._enabledContainerTypes.push(n.TRACE)}}get containerID(){return this._containerID}set containerID(e){this._containerID=e}get containerLogMonoColor(){return this._containerLogMonoColor}set containerLogMonoColor(e){this._containerLogMonoColor=e}print(e,t=!1){if(h.PRINT_ON_STARTUP||t){let t="";for(let e=0;e<this._enabledConsoleTypes.length;e++)switch(this._enabledConsoleTypes[e]){case n.TRACE:t+="TRACE, ";break;case n.SUCCESS:t+="SUCCESS, ";break;case n.WARNING:t+="WARNING, ";break;case n.INFO:t+="INFO, ";break;case n.ERROR:t+="ERROR, "}e.info(this,"Console:: enabled: "+this._consoleLogEnabled),e.info(this,"Console:: logTypes: "+t),e.info(this,"Console:: monoColor: "+this._consoleMonoColor);let i="";for(let e=0;e<this._enabledContainerTypes.length;e++)switch(this._enabledContainerTypes[e]){case n.TRACE:i+="TRACE, ";break;case n.SUCCESS:i+="SUCCESS, ";break;case n.WARNING:i+="WARNING, ";break;case n.INFO:i+="INFO, ";break;case n.ERROR:i+="ERROR, "}e.info(this,"Container:: enabled: "+this._containerLogEnabled),e.info(this,"Container:: logTypes: "+i),e.info(this,"Container:: containerID: "+this._containerID),e.info(this,"Container:: monoColor: "+this._consoleMonoColor)}}}h.PRINT_ON_STARTUP=!0;class l{constructor(e){this._startVolume=100,this._isMuted=!1,this.parse(e)}parse(e){this._audioConfig=e,this._audioConfig&&(this._startVolume=null!=(e=null==(e=this._audioConfig)?void 0:e.startVolume)?e:this._startVolume,this._isMuted=null!=(e=null==(e=this._audioConfig)?void 0:e.muted)?e:this._isMuted)}get startVolume(){return this._startVolume}set startVolume(e){this._startVolume=e}get muted(){return this._isMuted}set muted(e){this._isMuted=e}print(e,t=!1){(l.PRINT_ON_STARTUP||t)&&e.info(this,"Audio :: startVolume: "+this._startVolume+" | isMuted: "+this._isMuted)}}l.PRINT_ON_STARTUP=!0;class c{constructor(e){this._enabled=!0,this._prefix="storm",this.parse(e)}parse(e){this._storageConfig=e,this._enabled=null!=(e=null==(e=this._storageConfig)?void 0:e.enabled)?e:this._enabled,this._prefix=null!=(e=null==(e=this._storageConfig)?void 0:e.prefix)?e:this._prefix}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get prefix(){return this._prefix}set prefix(e){this._prefix=e}print(e,t=!1){(c.PRINT_ON_STARTUP||t)&&e.info(this,"Storage :: startVolume: "+this._enabled+" | prefix: "+this._prefix)}}c.PRINT_ON_STARTUP=!0;class d{constructor(e){this._restartOnError=!0,this._reconnectTime=1,this._autoStart=!1,this._autoConnect=!0,this.startOnDOMReady=!1,this.iOSOnDomReadyFix=!0,this._restartOnFocus=!0,this.parse(e)}parse(e){this._settingsConfig=e,this._autoConnect=null!=(e=this._settingsConfig.autoConnect)?e:this._autoConnect,this._autoStart=null!=(e=this._settingsConfig.autoStart)?e:this._autoStart,this._restartOnFocus=null!=(e=this._settingsConfig.restartOnFocus)?e:this._restartOnFocus,this._restartOnError=null!=(e=this._settingsConfig.restartOnError)?e:this._restartOnError,this._reconnectTime=null!=(e=this._settingsConfig.reconnectTime)?e:this._reconnectTime,this._videoData=new t(null!=(e=this._settingsConfig.video)?e:null),this._audioData=new l(null!=(e=this._settingsConfig.audio)?e:null),this._storageData=new c(null!=(e=this._settingsConfig.storage)?e:null),this._debugData=new h(null!=(e=this._settingsConfig.debug)?e:null)}getAudioData(){return this._audioData}getVideoData(){return this._videoData}getStorageData(){return this._storageData}getIfRestartOnError(){return this._restartOnError}getReconnectTime(){return this._reconnectTime}get autoStart(){return this._autoStart}set autoStart(e){this._autoStart=e}get autoConnect(){return this._autoConnect}get restartOnFocus(){return this._restartOnFocus}getDebugData(){return this._debugData}getIfStartOnDOMReadyEnabled(){return this.startOnDOMReady}getIfIOSOnDomStartFixEnabled(){return this.iOSOnDomReadyFix}print(e,t=!1){(d.PRINT_ON_STARTUP||t)&&(e.info(this,"SettingsConfig :: autoConnect: "+this._autoConnect),e.info(this,"SettingsConfig :: autoStart: "+this._autoStart),e.info(this,"SettingsConfig :: restartOnError: "+this._restartOnError),e.info(this,"SettingsConfig :: reconnectTime: "+this._reconnectTime),e.info(this,"SettingsConfig :: enabledProtocols: "),this._videoData.print(e),this._audioData.print(e),this._debugData.print(e),this._debugData.print(e))}}d.PRINT_ON_STARTUP=!0;class g{constructor(e){this.PRINT_ON_STARTUP=!0,this.demoMode=!1,this.parse(e)}parse(e){if(this.configTemplate=e,null==this.configTemplate.stream)throw new Error("No stream field was provided. Please check your player config!");this.streamData=new a(this.configTemplate.stream),this.settingsData=new d(null!=(e=this.configTemplate.settings)?e:null),this.demoMode=null!=(e=this.configTemplate.demoMode)&&e}getStreamData(){return this.streamData}getSettingsData(){return this.settingsData}getIfDemoMode(){return this.demoMode}print(e,t=!1){(this.PRINT_ON_STARTUP||t)&&(this.streamData.print(e),this.settingsData.print(e))}}class u{static addLeadingZero(e){return e<10?"0"+e:String(e)}static isNear(e,t,i){return Math.abs(e-t)<=i}static generateUniqueString(t){let i="";var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",s=n.length;for(let e=0;e<t;e++)i+=n.charAt(Math.floor(Math.random()*s));return i}}u.parseValue=e=>{var t;return"string"==typeof e?(t=e.toLowerCase().endsWith("px"),{value:parseInt(e,10),isPixels:t}):{value:e,isPixels:!0}};class _{constructor(e,t){this.colorOrder=["red","green","blue","orange","black","violet"],this._logMemory=[],this._streamerInstanceID=-1,this._debugConfig=e,this._stormStreamer=t,this._streamerInstanceID=this._stormStreamer.getStreamerID();e=this.colorOrder.length<t.getStreamerID()?this.colorOrder.length-1:t.getStreamerID();this._monoColor=this.colorOrder[e]}info(e,t){e=this.logData(e,t);this._debugConfig.consoleLogEnabled&&0<=this._debugConfig.enabledConsoleTypes.indexOf(n.INFO)&&(t=this._debugConfig.consoleLogMonoColor?this._monoColor:_.INFO_COLOR,console.log("%c "+e,"color: "+t)),this._debugConfig.containerLogEnabled&&0<=this._debugConfig.enabledContainerTypes.indexOf(n.INFO)&&(t=this._debugConfig.containerLogMonoColor?this._monoColor:_.INFO_COLOR,this.writeToContainer(e,t))}warning(e,t){e=this.logData(e,t);this._debugConfig.consoleLogEnabled&&0<=this._debugConfig.enabledConsoleTypes.indexOf(n.WARNING)&&(t=this._debugConfig.consoleLogMonoColor?this._monoColor:_.WARNING_COLOR,console.log("%c "+e,"color: "+t)),this._debugConfig.containerLogEnabled&&0<=this._debugConfig.enabledContainerTypes.indexOf(n.WARNING)&&(t=this._debugConfig.containerLogMonoColor?this._monoColor:_.WARNING_COLOR,this.writeToContainer(e,t))}error(e,t){e=this.logData(e,t);this._debugConfig.consoleLogEnabled&&0<=this._debugConfig.enabledConsoleTypes.indexOf(n.ERROR)&&(t=this._debugConfig.consoleLogMonoColor?this._monoColor:_.ERROR_COLOR,console.log("%c "+e,"color: "+t)),this._debugConfig.containerLogEnabled&&0<=this._debugConfig.enabledContainerTypes.indexOf(n.ERROR)&&(t=this._debugConfig.containerLogMonoColor?this._monoColor:_.ERROR_COLOR,this.writeToContainer(e,t))}success(e,t){e=this.logData(e,t);this._debugConfig.consoleLogEnabled&&0<=this._debugConfig.enabledConsoleTypes.indexOf(n.SUCCESS)&&(t=this._debugConfig.consoleLogMonoColor?this._monoColor:_.SUCCESS_COLOR,console.log("%c "+e,"color: "+t)),this._debugConfig.containerLogEnabled&&0<=this._debugConfig.enabledContainerTypes.indexOf(n.SUCCESS)&&(t=this._debugConfig.containerLogMonoColor?this._monoColor:_.SUCCESS_COLOR,this.writeToContainer(e,t))}trace(e,t){e=this.logData(e,t);this._debugConfig.consoleLogEnabled&&0<=this._debugConfig.enabledConsoleTypes.indexOf(n.TRACE)&&(t=this._debugConfig.consoleLogMonoColor?this._monoColor:_.TRACE_COLOR,console.log("%c "+e,"color: "+t)),this._debugConfig.containerLogEnabled&&0<=this._debugConfig.enabledContainerTypes.indexOf(n.TRACE)&&(t=this._debugConfig.containerLogMonoColor?this._monoColor:_.TRACE_COLOR,this.writeToContainer(e,t))}logData(e,t){var i=new Date,n=u.addLeadingZero(i.getHours()),s=u.addLeadingZero(i.getMinutes()),i=u.addLeadingZero(i.getSeconds());let o=String(this._streamerInstanceID);0<=this._streamerInstanceID&&(o+="|"+this._streamerInstanceID);n="[Storm-ID:"+o+"] ["+n+":"+s+":"+i+"] :: "+t;return this._logMemory.push(n),n}writeToContainer(e,t){var i,n=this._debugConfig.containerID;n&&(n=document.getElementById(n),(i=document.createElement("span")).innerText=e,i.style.color=t,n.appendChild(i))}setPlayerID(e){this._streamerInstanceID=e}getAllLogs(){return this._logMemory}}_.INFO_COLOR="blue",_.WARNING_COLOR="orange",_.ERROR_COLOR="red",_.SUCCESS_COLOR="green",_.TRACE_COLOR="black";class e{constructor(){this.bandwidthCapabilities=0}setBandwidthCapabilities(e){this.bandwidthCapabilities=e}getBandwidthCapabilities(){return this.bandwidthCapabilities}}class m{static hasWebSocketsSupport(){return null!=window.WebSocket}static isMobile(){return new RegExp("Mobile|mini|Fennec|Android|iP(ad|od|hone)").test(navigator.userAgent)}static isCookieEnabled(){let e=!!navigator.cookieEnabled;return"undefined"!=typeof navigator.cookieEnabled||e||(document.cookie="testcookie",e=-1!=document.cookie.indexOf("testcookie")),e}static getOSVersion(){let e="Unknown version",t=m.getOS();if(null!=t){var i;switch(new RegExp("Windows").test(t)&&(i=new RegExp("Windows (.*)"),e=null!=i.exec(t)[1]?i.exec(t)[1]:e,t="Windows"),t){case"Mac OS":case"Mac OS X":case"Android":var n=new RegExp("(?:Android|Mac OS|Mac OS X|MacPPC|MacIntel|Mac_PowerPC|Macintosh) ([\\.\\_\\d]+)");e=n.exec(navigator.userAgent)[1];break;case"iOS":n=new RegExp("OS (\\d+)_(\\d+)_?(\\d+)?");e=(e=n.exec(navigator.userAgent))[1]+"."+e[2]+"."+(0|e[3])}}return e}static getBrowserName(){return m.getFullBrowser().name}static getBrowserVersion(){return m.getFullBrowser().version}static getFullBrowser(){var e=navigator.userAgent;let t=navigator.appName,i=""+parseFloat(navigator.appVersion),n=parseInt(navigator.appVersion,10),s,o,r;return-1!=(o=e.indexOf("Opera"))?(t="Opera",i=e.substring(o+6),-1!=(o=e.indexOf("Version"))&&(i=e.substring(o+8))):-1!=(o=e.indexOf("MSIE"))?(t="Microsoft Internet Explorer",i=e.substring(o+5)):"Netscape"==t&&-1!=e.indexOf("Trident/")?(t="Microsoft Internet Explorer",i=e.substring(o+5),-1!=(o=e.indexOf("rv:"))&&(i=e.substring(o+3))):-1!=(o=e.indexOf("Chrome"))?(t="Chrome",(-1<e.indexOf("FBAV")||-1<e.indexOf("FBAN"))&&(t="Facebook"),-1<e.indexOf("OPR")&&(t="Opera"),-1<e.indexOf("SamsungBrowser")&&(t="Samsung"),i=e.substring(o+7)):-1!=(o=e.indexOf("Safari"))?(t="Safari",i=e.substring(o+7),-1!=(o=e.indexOf("Version"))&&(i=e.substring(o+8)),-1!=e.indexOf("CriOS")&&(t="Chrome"),-1!=e.indexOf("FxiOS")&&(t="Firefox")):-1!=(o=e.indexOf("Firefox"))?(t="Firefox",i=e.substring(o+8)):(s=e.lastIndexOf(" ")+1)<(o=e.lastIndexOf("/"))&&(t=e.substring(s,o),i=e.substring(o+1),t.toLowerCase()==t.toUpperCase())&&(t=navigator.appName),-1!=(r=(i=-1!=(r=(i=-1!=(r=i.indexOf(";"))?i.substring(0,r):i).indexOf(" "))?i.substring(0,r):i).indexOf(")"))&&(i=i.substring(0,r)),n=parseInt(""+i,10),isNaN(n)&&(i=""+parseFloat(navigator.appVersion),n=parseInt(navigator.appVersion,10)),{name:t,fullVersion:i,version:n}}static getOS(){let e="Unknown OS";var t,i=[{os:"Windows 10",code:"(Windows 10.0|Windows NT 10.0)"},{os:"Windows 8.1",code:"(Windows 8.1|Windows NT 6.3)"},{os:"Windows 8",code:"(Windows 8|Windows NT 6.2)"},{os:"Windows 7",code:"(Windows 7|Windows NT 6.1)"},{os:"Windows Vista",code:"Windows NT 6.0"},{os:"Windows Server 2003",code:"Windows NT 5.2"},{os:"Windows XP",code:"(Windows NT 5.1|Windows XP)"},{os:"Windows 2000",code:"(Windows NT 5.0|Windows 2000)"},{os:"Windows ME",code:"(Win 9x 4.90|Windows ME)"},{os:"Windows 98",code:"(Windows 98|Win98)"},{os:"Windows 95",code:"(Windows 95|Win95|Windows_95)"},{os:"Windows NT 4.0",code:"(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)"},{os:"Windows CE",code:"Windows CE"},{os:"Windows 3.11",code:"Win16"},{os:"Android",code:"Android"},{os:"Open BSD",code:"OpenBSD"},{os:"Sun OS",code:"SunOS"},{os:"Chrome OS",code:"CrOS"},{os:"Linux",code:"(Linux|X11(?!.*CrOS))"},{os:"iOS",code:"(iPhone|iPad|iPod)"},{os:"Mac OS X",code:"Mac OS X"},{os:"Mac OS",code:"(Mac OS|MacPPC|MacIntel|Mac_PowerPC|Macintosh)"},{os:"QNX",code:"QNX"},{os:"UNIX",code:"UNIX"},{os:"BeOS",code:"BeOS"},{os:"OS/2",code:"OS\\/2"},{os:"Search Bot",code:"(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)"}];for(t in i){var n=i[t];if(new RegExp(n.code).test(navigator.userAgent)){e=n.os;break}}return e}static hasWebRTCSupport(){let t=!1;try{navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia||window.RTCPeerConnection;t=!0}catch(e){t=!1}return t}static hasHLSSupport(e){return null!==e&&Boolean(e.canPlayType("application/vnd.apple.mpegURL")||e.canPlayType("audio/mpegurl"))}static hasMSESupport(){var e=window.MediaSource=window.MediaSource||window.WebKitMediaSource;return window.SourceBuffer=window.SourceBuffer||window.WebKitSourceBuffer,e&&"function"==typeof e.isTypeSupported}static hasMMSSupport(){return window.ManagedMediaSource}static isSSL(){return"https:"===location.protocol}}class C{constructor(e){var t;this.LOG_ACTIVITY=!1,this.isEnabled=!0,this.prefix="",this.logger=e.getLogger(),this.isEnabled=null!=(t=null==(t=null==(t=e.getConfigManager())?void 0:t.getSettingsData())?void 0:t.getStorageData().enabled)?t:this.isEnabled,this.prefix=null!=(t=null==(e=null==(t=e.getConfigManager())?void 0:t.getSettingsData())?void 0:e.getStorageData().prefix)?t:this.prefix,this.LOG_ACTIVITY&&this.logger.info(this,"Creating new StorageManager")}saveField(e,t){1==this.isEnabled&&(this.LOG_ACTIVITY&&this.logger.info(this,"Saving data: "+e+" | "+t),localStorage.setItem(this.prefix+e,t))}getField(e){var t;return 1==this.isEnabled?(t=localStorage.getItem(this.prefix+e),this.LOG_ACTIVITY&&this.logger.info(this,"Grabbing data: "+e+" | "+t),t):null}}var p="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function f(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function v(){return A.Date.now()}var S=NaN,b="[object Symbol]",E=/^\s+|\s+$/g,w=/^[-+]0x[0-9a-f]+$/i,I=/^0b[01]+$/i,x=/^0o[0-7]+$/i,V=parseInt,p="object"==typeof p&&p&&p.Object===Object&&p,L="object"==typeof self&&self&&self.Object===Object&&self,A=p||L||Function("return this")(),F=Object.prototype.toString,U=Math.max,B=Math.min;function M(e){var t=typeof e;return e&&("object"==t||"function"==t)}function T(e){if("number"==typeof e)return e;if("symbol"==typeof(i=e)||!!(t=i)&&"object"==typeof t&&F.call(i)==b)return S;var t;if("string"!=typeof(e=M(e)?M(t="function"==typeof e.valueOf?e.valueOf():e)?t+"":t:e))return 0===e?e:+e;e=e.replace(E,"");var i=I.test(e);return i||x.test(e)?V(e.slice(2),i?2:8):w.test(e)?S:+e}var O,D,H=f(function(n,i,e){var s,o,r,a,h,l,c=0,d=!1,g=!1,t=!0;if("function"!=typeof n)throw new TypeError("Expected a function");function u(e){var t=s,i=o;return s=o=void 0,c=e,a=n.apply(i,t)}function _(e){var t=e-l;return void 0===l||i<=t||t<0||g&&r<=e-c}function m(){var e,t=v();if(_(t))return C(t);h=setTimeout(m,(e=i-((t=t)-l),g?B(e,r-(t-c)):e))}function C(e){return h=void 0,t&&s?u(e):(s=o=void 0,a)}function p(){var e=v(),t=_(e);if(s=arguments,o=this,l=e,t){if(void 0===h)return c=e=l,h=setTimeout(m,i),d?u(e):a;if(g)return h=setTimeout(m,i),u(l)}return void 0===h&&(h=setTimeout(m,i)),a}return i=T(i)||0,M(e)&&(d=!!e.leading,g="maxWait"in e,r=g?U(T(e.maxWait)||0,i):r,t="trailing"in e?!!e.trailing:t),p.cancel=function(){void 0!==h&&clearTimeout(h),s=l=o=h=void(c=0)},p.flush=function(){return void 0===h?a:C(v())},p});class z{constructor(e){this.LOG_ACTIVITY=!0,this._volume=100,this._isMuted=!1,this._isMutedByBrowser=!1,this.onForceMute=()=>{this._isMuted=!0,this._isMutedByBrowser=!0,this.dispatchVolumeEvent()},this._main=e,this._logger=e.getLogger(),this._videoElement=document.createElement("video"),this._main.addEventListener("playbackForceMute",this.onForceMute,!1);let t=null!=(e=null==(e=this._main.getConfigManager())?void 0:e.getSettingsData().getAudioData().startVolume)?e:100,i=null!=(e=null==(e=this._main.getConfigManager())?void 0:e.getSettingsData().getAudioData().muted)&&e;null!=(null==(e=this._main.getStorageManager())?void 0:e.getField("volume"))&&(t=Number(this._main.getStorageManager().getField("volume"))),null!=(null==(e=this._main.getStorageManager())?void 0:e.getField("muted"))&&"true"==this._main.getStorageManager().getField("muted")&&(i=!0,this._isMutedByBrowser=!0),this._volume=t,this._isMuted=i,this.LOG_ACTIVITY&&this._logger.info(this,"VideoElement :: Start Volume: "+this._volume+" | Muted: "+this._isMuted),this._videoElement.volume=this._volume/100,this._videoElement.muted=this._isMuted,this._videoElement.setAttribute("playsinline","playsinline"),this._videoElement.setAttribute("webkit-playsinline","webkit-playsinline"),this._main.dispatchEvent("videoElementCreate",{ref:this._main,videoElement:this._videoElement}),this.initialize()}initialize(){this._videoElement.onload=function(e){},this._videoElement.onstalled=e=>{this._logger.info(this,"VideoElement :: onstalled")},this._videoElement.onerror=e=>{this._logger.info(this,"VideoElement :: onerror :: "+JSON.stringify(e))},this._videoElement.onvolumechange=()=>{this.dispatchVolumeEvent()},this._videoElement.onpause=()=>{},this._videoElement.ontimeupdate=function(e){},this._videoElement.onended=e=>{this._logger.info(this,"VideoElement :: onended")},this._videoElement.onplay=()=>{}}setVolume(e){this._isMuted&&0<e&&this.setMuted(!1),this._volume=e,this._videoElement.volume=e/100,this._main.getStorageManager().saveField("volume",String(e)),0==e&&this.setMuted(!0)}getVolume(){return this._volume}setMuted(e){this._isMuted=e,this._videoElement.muted=e,this._isMutedByBrowser=!1,this._main.getStorageManager().saveField("muted",String(e)),0!=this.getVolume()||e||this.setVolume(100)}getIfMuted(){return this._isMuted}dispatchVolumeEvent(){var e=this._isMutedByBrowser?"browser":"user",t={volume:this._volume,isMuted:this._isMuted,type:e};this.LOG_ACTIVITY&&this._logger.info(this,"ScreenElement :: Event: onVolumeChange: "+JSON.stringify(t)),this._main.dispatchEvent("volumeChange",{ref:this._main,volume:this._volume,muted:this._isMuted,invokedBy:e})}getVideoElement(){return this._videoElement}}class R{static calculateDimensionsWithMargins(e){var t=window.getComputedStyle(e),e=e.getBoundingClientRect(),i=parseFloat(t.paddingLeft),n=parseFloat(t.paddingRight),s=parseFloat(t.paddingTop),o=parseFloat(t.paddingBottom),r=parseFloat(t.borderLeftWidth),a=parseFloat(t.borderRightWidth),h=parseFloat(t.borderTopWidth),t=parseFloat(t.borderBottomWidth);return{width:e.width-i-n-r-a,height:e.height-s-o-h-t}}}class y{constructor(e){this._containerWidth=0,this._tempContainerWidth=0,this._containerHeight=0,this._tempContainerHeight=0,this._videoWidth=0,this._videoHeight=0,this._scalingMode=s.FILL,this.isInFullScreenMode=!1,this._autoResizeEnabled=!0,this.onFullScreenChange=()=>{null==document.fullscreenElement?(this.isInFullScreenMode=!1,this._logger.info(this,"The library has exited FullScreen mode!"),this._main.dispatchEvent("fullScreenExit",{ref:this._main})):(this.isInFullScreenMode=!0,this._logger.info(this,"The library has entered FullScreen mode!"),this._main.dispatchEvent("fullScreenEnter",{ref:this._main}))},this.onResize=()=>{if(null!=this._parentElement){var e=this._main.getConfigManager().getSettingsData().getVideoData().parentSizeCalculationMethod;switch(this._videoContainer.style.display="none",e){case i.CLIENT_DIMENSIONS:this._tempContainerWidth=this._parentElement.clientWidth,this._tempContainerHeight=this._parentElement.clientHeight;break;case i.BOUNDING_BOX:this._tempContainerWidth=this._parentElement.getBoundingClientRect().width,this._tempContainerHeight=this._parentElement.getBoundingClientRect().height;break;case i.FULL_BOX:this._tempContainerWidth=R.calculateDimensionsWithMargins(this._parentElement).width,this._tempContainerHeight=R.calculateDimensionsWithMargins(this._parentElement).height}this._logger.info(this,"onResize called: "+this._tempContainerWidth+"x"+this._tempContainerHeight+" ("+e+")"),this.resizeVideoContainer(),this.scaleVideo(),this._videoContainer.style.display="block",this._main.dispatchEvent("resizeUpdate",{ref:this._main,width:this._tempContainerWidth,height:this._tempContainerHeight})}},this._main=e,this._logger=e.getLogger(),this._logger.info(this,"Creating new StageController"),this.initialize()}initialize(){var e=null!=(e=null==(e=null==(e=null==(e=this._main.getConfigManager())?void 0:e.getSettingsData())?void 0:e.getVideoData())?void 0:e.containerID)?e:null,t=(this._scalingMode=null!=(t=null==(t=this._main.getConfigManager())?void 0:t.getSettingsData().getVideoData().scalingMode)?t:s.FILL,this._videoContainer=document.createElement("div"),this._videoContainer.setAttribute("id","stormLibrary_"+this._main.getStreamerID()),this._videoContainer.style.overflow="hidden",this._videoContainer.style.position="relative",this._videoContainer.classList.add("stormLibrary"),this._screenElement=new z(this._main),this._videoContainer.appendChild(this._screenElement.getVideoElement()),this._main.getConfigManager().getSettingsData().getVideoData().resizeDebounce);this._resizeObserver=0<t?new ResizeObserver(H(()=>()=>{this._autoResizeEnabled&&this.onResize()},t,{leading:!1,trailing:!0})):new ResizeObserver(()=>{this._autoResizeEnabled&&this.onResize()}),document.addEventListener("fullscreenchange",this.onFullScreenChange,!1),document.addEventListener("webkitfullscreenchange",this.onFullScreenChange,!1),document.addEventListener("mozfullscreenchange",this.onFullScreenChange,!1),document.addEventListener("webkitendfullscreen",this.onFullScreenChange,!1),this._screenElement.getVideoElement().addEventListener("webkitendfullscreen",this.onFullScreenChange,!1),e?this.attachToParent(e):this._logger.warning(this,'Could not create HTMLObject for the library - "containerID" was not provided')}attachToParent(e){let t=!1,i=null;return"string"==typeof e?(this._logger.info(this,"Attaching container to ID: "+e),i=document.getElementById(e)):e instanceof HTMLElement&&(this._logger.info(this,"Attaching container to HTMLElement: "+e),i=e),i===this._parentElement?(this._logger.warning(this,"attachToParent :: container is the same"),!1):(i&&this._videoContainer?(this._parentElement=i,this._parentElement.appendChild(this._videoContainer),this._resizeObserver.observe(this._parentElement),this._parentElement.addEventListener("transitionend",()=>{this.onResize()}),this._main.dispatchEvent("containerChange",{ref:this._main,container:this._parentElement}),this.onResize(),t=!0):this._logger.warning(this,"attachToParent :: container was not found"),t)}detachFromParent(){let e=!1;return null!=this._parentElement&&null!=this._videoContainer?(this._logger.info(this,"Detaching from parent: "+this._videoContainer),this._parentElement.removeChild(this._videoContainer),this._resizeObserver&&(this._resizeObserver.unobserve(this._parentElement),this._resizeObserver.disconnect()),this._autoResizeEnabled&&this._parentElement.removeEventListener("transitionend",this.onResize),this._main.dispatchEvent("containerChange",{ref:this._main,container:null}),e=!0):this._logger.info(this,"Failed detaching from parent!"),this._parentElement=null,e}resizeVideoContainer(){var e=this._main.getConfigManager().getSettingsData().getVideoData().videoWidthInPixels,t=this._main.getConfigManager().getSettingsData().getVideoData().videoHeightInPixels,i=this._main.getConfigManager().getSettingsData().getVideoData().videoWidthValue,n=this._main.getConfigManager().getSettingsData().getVideoData().videoHeightValue,s=this._main.getConfigManager().getSettingsData().getVideoData().aspectRatio;let o=0,r=0;var a=Number(s.split(":")[0]),h=Number(s.split(":")[1]);"none"==s?(e?o=i:null!=this._parentElement&&(o=this._tempContainerWidth*i/100),t?r=n:null!=this._parentElement&&0==(r=this._tempContainerHeight*n/100)&&0!=this._videoHeight&&0!=this._videoWidth&&(r=this._videoHeight*o/this._videoWidth)):(e?o=i:null!=this._parentElement&&(o=this._tempContainerWidth*i/100),r=o*h/a),this._containerWidth=Math.ceil(o),this._containerHeight=Math.ceil(r),this._videoWidth=this._containerWidth,this._videoHeight=this._containerHeight,null!==this._videoContainer&&(this._videoContainer.style.width=this._containerWidth+"px",this._videoContainer.style.height=this._containerHeight+"px")}scaleVideo(){if(null!==this._screenElement){let e=0,t=0,i=0,n=0;switch(this._scalingMode){case s.FILL:i=this._containerWidth,n=this._containerHeight;break;case s.CROP:i=this._containerWidth,(n=this._videoHeight*this._containerWidth/this._videoWidth)>=this._containerHeight?(e=0,t=(n-this._containerHeight)/2*-1):(n=this._containerHeight,i=this._videoWidth*this._containerHeight/this._videoHeight,t=0,e=(i-this._containerWidth)/2*-1);break;case s.LETTER_BOX:i=this._containerWidth,(!((n=this._videoHeight*this._containerWidth/this._videoWidth)<=this._containerHeight)||(e=0,t=(n-this._containerHeight)/2*-1,n>this._containerHeight))&&(n=this._containerHeight,i=this._videoWidth*this._containerHeight/this._videoHeight,t=0,e=(i-this._containerWidth)/2*-1);break;case s.ORIGINAL:i=this._videoWidth,n=this._videoHeight,e=(this._videoWidth-this._containerWidth)/-2,t=(this._videoHeight-this._containerHeight)/-2}this._screenElement.getVideoElement().style.left=Math.floor(e)+"px",this._screenElement.getVideoElement().style.top=Math.floor(t)+"px",this._screenElement.getVideoElement().style.width=Math.ceil(i)+"px",this._screenElement.getVideoElement().style.height=Math.ceil(n)+"px",this._screenElement.getVideoElement().style.position="absolute",this._screenElement.getVideoElement().style.objectFit="fill"}}enterFullScreen(){var e;null!=(e=this._screenElement)&&e.getVideoElement().webkitEnterFullScreen?null!=(e=this._screenElement)&&e.getVideoElement().webkitEnterFullScreen():null!=(e=this._screenElement)&&e.getVideoElement().requestFullscreen()}exitFullScreen(){var e;null!=(e=this._screenElement)&&e.getVideoElement().webkitExitFullscreen?document.webkitExitFullscreen():document.exitFullscreen()}isFullScreenMode(){return this.isInFullScreenMode}setDimension(e,t){var i="width"===e?"videoWidth":"videoHeight";let n,s;if("number"==typeof t)s=t,n=!0;else{if("string"!=typeof t)throw new Error(`Unknown value for parameter "${e}" - it must be a number or a string!`);s=parseInt(t),n=t.toLowerCase().endsWith("px")}this._main.getConfigManager().getSettingsData().getVideoData()[i+"Value"]=s,this._main.getConfigManager().getSettingsData().getVideoData()[i+"InPixels"]=n,this.resizeVideoContainer(),this.scaleVideo()}setSize(e,t){this.setDimension("width",e),this.setDimension("height",t)}setWidth(e){this.setDimension("width",e)}setHeight(e){this.setDimension("height",e)}getParentElement(){return this._parentElement}setScalingMode(e){switch(e.toLowerCase()){case"fill":this._scalingMode=s.FILL;break;case"crop":this._scalingMode=s.CROP;break;case"letterbox":this._scalingMode=s.LETTER_BOX;break;case"original":this._scalingMode=s.ORIGINAL}this.scaleVideo()}getContainerWidth(){return this._containerWidth}getContainerHeight(){return this._containerHeight}getScalingModeAsString(){let e="";switch(this._scalingMode){case s.FILL:e="fill";break;case s.CROP:e="crop";break;case s.LETTER_BOX:e="letterbox";break;case s.ORIGINAL:e="original"}return e}getScalingMode(){return this._scalingMode}getScreenElement(){return this._screenElement}getContainer(){return this._videoContainer}destroy(){this.detachFromParent()}}y.LOG_ACTIVITY=!0;class N{constructor(){}addAudio(e,t){let i="",n="",s=!1;for(const o of e.split(/\r\n/))o.length<=0||(0===o.indexOf("m=audio")?i="audio":0===o.indexOf("m=video")&&(i="video"),n=n+o+"\r\n","audio"!==i)||0!=="a=rtcp-mux".localeCompare(o)||s||(n+=t,s=!0);return n}addVideo(e,t){e=e.split(/\r\n/);let i="",n=!1,s=!1;for(const r of e)r.length<=0||(r.includes("a=rtcp-rsize")&&(s=!0),r.includes("a=rtcp-mux"));let o=!1;for(const a of e)a.startsWith("m=video")&&(o=!0),i=i+a+"\r\n",o&&(0==="a=rtcp-rsize".localeCompare(a)&&!n&&s&&(i+=t,n=!0),0==="a=rtcp-mux".localeCompare(a)&&n&&!s&&(i+=t,n=!0),0!=="a=rtcp-mux".localeCompare(a)||n||s||(n=!0));return i}deliverCheckLine(e,t){for(const n in N.SDPOutput){var i=N.SDPOutput[n];if(i.includes(e)){if(e.includes("VP9")||e.includes("VP8")){let e="";for(const s of i.split(/\r\n/))e=e+s+"\r\n";return t.includes("audio")&&(N.audioIndex=parseInt(n)),t.includes("video")&&(N.videoIndex=parseInt(n)),e}return t.includes("audio")&&(N.audioIndex=parseInt(n)),t.includes("video")&&(N.videoIndex=parseInt(n)),i}}return""}checkLine(t){if(t.startsWith("a=rtpmap")||t.startsWith("a=rtcp-fb")||t.startsWith("a=fmtp")){var i=t.split(":");if(1<i.length){i=i[1].split(" ");if(!isNaN(parseInt(i[0]))&&!i[1].startsWith("http")&&!i[1].startsWith("ur")){let e=N.SDPOutput[i[0]];return e=e||"",e+=t+"\r\n",N.SDPOutput[i[0]]=e,!1}}}return!0}getrtpMapID(e){var t=new RegExp("a=rtpmap:(\\d+) (\\w+)/(\\d+)"),e=e.match(t);return e&&3<=e.length?e:null}mungeSDPPublish(e,t){N.SDPOutput={},N.videoChoice="42e01f",N.audioChoice="opus",N.videoIndex=-1,N.audioIndex=-1;e=e.split(/\r\n/);let i="header",n=!1,s="";null!=t.videoCodec&&""!==t.videoCodec&&(N.videoChoice=t.videoCodec),null!=t.audioCodec&&""!==t.audioCodec&&(N.audioChoice=t.audioCodec);for(const a of e)a.length<=0||this.checkLine(a)&&(s=s+a+"\r\n");s=this.addAudio(s,this.deliverCheckLine(N.audioChoice,"audio"));var o,r,e=(s=this.addVideo(s,this.deliverCheckLine(N.videoChoice,"video"))).split(/\r\n/);s="";for(const h of e)if(!(h.length<=0)){let e;if(0===h.indexOf("m=audio")&&-1!==N.audioIndex)e=h.split(" "),s+=e[0]+" "+e[1]+" "+e[2]+" "+N.audioIndex+"\r\n",i="audio",n=!1;else if(0===h.indexOf("m=video")&&-1!==N.videoIndex)e=h.split(" "),s+=e[0]+" "+e[1]+" "+e[2]+" "+N.videoIndex+"\r\n",i="video",n=!1;else{if(s+=h,0===h.indexOf("a=rtpmap")&&(i="bandwidth",n=!1),"chrome"!==m.getBrowserName().toLowerCase()&&"safari"!==m.getBrowserName().toLowerCase()||0!==h.indexOf("a=mid:")&&0!==h.indexOf("a=rtpmap")||n||(0==="audio".localeCompare(i)?(void 0!==t.audioBitrate&&""!==t.audioBitrate&&(s=(s+="\r\nb=CT:"+t.audioBitrate)+"\r\nb=AS:"+t.audioBitrate),n=!0):0==="video".localeCompare(i)?(void 0!==t.videoBitrate&&""!==t.videoBitrate&&(s=(s+="\r\nb=CT:"+t.videoBitrate)+"\r\nb=AS:"+t.videoBitrate,void 0!==t.videoFrameRate)&&(s+="\r\na=framerate:"+t.videoFrameRate),n=!0):"chrome"===m.getBrowserName().toLowerCase()&&0==="bandwidth".localeCompare(i)&&null!==(r=this.getrtpMapID(h))&&(o=r[2].toLowerCase(),0!=="vp9".localeCompare(o)&&0!=="vp8".localeCompare(o)&&0!=="h264".localeCompare(o)&&0!=="red".localeCompare(o)&&0!=="ulpfec".localeCompare(o)&&0!=="rtx".localeCompare(o)||void 0!==t.videoBitrate&&(s+="\r\na=fmtp:"+r[1]+" x-google-min-bitrate="+t.videoBitrate+";x-google-max-bitrate="+t.videoBitrate),0!=="opus".localeCompare(o)&&0!=="isac".localeCompare(o)&&0!=="g722".localeCompare(o)&&0!=="pcmu".localeCompare(o)&&0!=="pcma".localeCompare(o)&&0!=="cn".localeCompare(o)||void 0!==t.audioBitrate&&(s+="\r\na=fmtp:"+r[1]+" x-google-min-bitrate="+t.audioBitrate+";x-google-max-bitrate="+t.audioBitrate))),"firefox"===m.getBrowserName().toLowerCase()&&0===h.indexOf("c=IN")){if(0==="audio".localeCompare(i)){""!==t.audioBitrate&&"string"==typeof t.audioBitrate&&(o=parseInt(t.audioBitrate),s=(s+="\r\nb=TIAS:"+(1e3*o*.95-16e3)+"\r\n")+"b=AS:"+o+"\r\nb=CT:"+o+"\r\n");continue}if(0==="video".localeCompare(i)){""!==t.videoBitrate&&"string"==typeof t.videoBitrate&&(r=parseInt(t.videoBitrate),s=(s+="\r\nb=TIAS:"+1e3*(1e3*r*.95-16e3)+"\r\n")+"b=AS:"+r+"\r\nb=CT:"+r+"\r\n");continue}}s+="\r\n"}}return s}mungeSDPPlay(e){let n="";for(const r of e.split(/\r\n/))if(0!==r.length){if(r.includes("profile-level-id")){var s=r.substr(r.indexOf("profile-level-id")+17,6);let e=Number("0x"+s.substr(0,2)),t=Number("0x"+s.substr(2,2)),i=Number("0x"+s.substr(4,2));66<e&&(e=66,t=224,i=31),0===t&&(t=224);var o=("00"+e.toString(16)).slice(-2).toLowerCase()+("00"+t.toString(16)).slice(-2).toLowerCase()+("00"+i.toString(16)).slice(-2).toLowerCase();n+=r.replace(s,o)}else n+=r;n+="\r\n"}return n}}N.SDPOutput={},(p=O=O||{})[p.VIDEO_INPUT=0]="VIDEO_INPUT",p[p.AUDIO_INPUT=1]="AUDIO_INPUT";class k{constructor(e,t){if(this._groupID="",this._isSelected=!1,null==e)throw new Error("no input device");if(void 0===e.deviceId||null===e.deviceId)throw new Error("no deviceID");if(this._id=e.deviceId,void 0===e.kind||null===e.kind)throw new Error("no device kind");switch(e.kind){case"videoinput":this._inputType=O.VIDEO_INPUT;break;case"audioinput":this._inputType=O.AUDIO_INPUT;break;default:throw new Error("incorrect kind")}null!==e.label&&""!==e.label?this._label=this.cleanLabel(e.label):this._label=this._inputType==O.VIDEO_INPUT?"Camera "+t:"Microphone "+t,void 0!==e.groupId&&null!==e.groupId&&(this._groupID=e.groupId)}cleanLabel(e){return e}getLabel(){return this._label}getID(){return this._id}getGroupID(){return this._groupID}getIfSelected(){return this._isSelected}setSelected(e){this._isSelected=e}}class W{constructor(){this._internalList=new Array}push(t){let i=!1;if(0<this._internalList.length){for(let e=0;e<this._internalList.length;e++)""!==this._internalList[e].getGroupID()&&this._internalList[e].getGroupID()==t.getGroupID()&&(i=!0,this._internalList[e]=t);return 0==i?this._internalList.push(t):this._internalList.length}return this._internalList.push(t)}get(e){return this._internalList[e]}getSize(){return this._internalList.length}getArray(){return this._internalList}}o.PublishState=void 0,(L=o.PublishState||(o.PublishState={})).NOT_INITIALIZED="NOT_INITIALIZED",L.INITIALIZED="INITIALIZED",L.CONNECTING="CONNECTING",L.PUBLISHED="PUBLISHED",L.UNPUBLISHED="UNPUBLISHED",L.STOPPED="STOPPED",L.UNKNOWN="UNKNOWN",L.ERROR="ERROR";class G{constructor(e){this._instant=0,this._slow=0,this.clip=0,this._main=e}attach(e){this._stream=e,this.audioContext=new AudioContext,this.microphone=this.audioContext.createMediaStreamSource(e),this.processor=this.audioContext.createScriptProcessor(2048,1,1),this.microphone.connect(this.processor),this.processor.connect(this.audioContext.destination),this.processor.onaudioprocess=e=>{this.onAudioProcess(e)}}detach(){null!==this.microphone&&this.microphone.disconnect(),null!==this.processor&&this.processor.disconnect()}clear(){this._instant=0,this._slow=0,this.clip=0}onAudioProcess(e){var t=e.inputBuffer.getChannelData(0);let i,n=0,s=0;for(i=0;i<t.length;++i)n+=t[i]*t[i],.99<Math.abs(t[i])&&(s+=1);this._instant=Math.sqrt(n/t.length),this._slow=.05*this._instant+.95*this._slow,this.clip=s/t.length,console.log("sound",this._instant,this._slow),this._main.dispatchEvent("soundMeter",{ref:this._main,high:this._instant,low:this._slow})}}class X{constructor(e){this._isWindowActive=!0,this._peerConnectionConfig={iceServers:[]},this._isMicrophoneMuted=!1,this._constraints={video:{width:{min:"640",ideal:"1024",max:"1024"},height:{min:"360",ideal:"576",max:"576"},frameRate:{min:24,ideal:30,max:30}},audio:!0},this._publishState=o.PublishState.NOT_INITIALIZED,this.onServerDisconnect=()=>{},this.onServerConnect=()=>{this._peerConnection=new RTCPeerConnection(this._peerConnectionConfig),this._peerConnection.onicecandidate=e=>{this.onIceCandidate(e)},this._peerConnection.onconnectionstatechange=e=>{this.onConnectionStateChange(e)},this._peerConnection.onnegotiationneeded=e=>{this._peerConnection.createOffer(e=>{this.onDescriptionSuccess(e)},e=>{this.onDescriptionError(e)}).catch(e=>{console.log(e)})};var e,t=this._stream.getTracks();for(e in t)this._peerConnection.addTrack(t[e],this._stream)},this.onDescriptionSuccess=t=>{var e;const i={applicationName:null==(e=null==(e=this._main.getNetworkController())?void 0:e.getConnection().getCurrentServer())?void 0:e.getApplication(),streamName:null==(e=this._main.getConfigManager())?void 0:e.getStreamData().streamKey,sessionId:"[empty]"};t.sdp=this._mungeSDP.mungeSDPPublish(t.sdp,{audioBitrate:"64",videoBitrate:"1500",videoFrameRate:30,videoCodec:"42e01f",audioCodec:"opus"}),this._peerConnection.setLocalDescription(t).then(()=>{var e;null!=(e=this._main.getNetworkController())&&e.sendMessage('{"direction":"publish", "command":"sendOffer", "streamInfo":'+JSON.stringify(i)+', "sdp":'+JSON.stringify(t)+"}")}).catch(e=>{console.log(e)})},this.visibilityChange=()=>{"hidden"===document.visibilityState?this.onWindowBlur():"visible"===document.visibilityState&&this.onWindowFocus()},this.onWindowBlur=()=>{this._isWindowActive&&this._logger.warning(this,"Player window is no longer in focus!"),this._isWindowActive=!1},this.onWindowFocus=()=>{this._isWindowActive||this._logger.info(this,"Player window is focused again!"),this._isWindowActive=!0},this._main=e,this._logger=e.getLogger(),this._logger.info(this,"Creating new PlaybackController"),this._mungeSDP=new N,this._soundMeter=new G(this._main),this.initialize()}initialize(){var e;this._main.addEventListener("serverConnect",this.onServerConnect,!1),this._main.addEventListener("serverDisconnect",this.onServerDisconnect,!1),document.addEventListener("visibilitychange",this.visibilityChange),window.addEventListener("blur",this.onWindowBlur),window.addEventListener("focus",this.onWindowFocus),null!=(e=this._main.getConfigManager())&&e.getSettingsData().autoConnect?(this._logger.info(this,"Initializing NetworkController (autoConnect is true)"),null!=(e=this._main.getNetworkController())&&e.initialize()):this._logger.warning(this,"Warning - autoConnect is set to false, switching to standby mode!"),null!=(null==(e=this._main.getConfigManager())?void 0:e.getStreamData().streamKey)&&this.startWebRTC()}startWebRTC(){try{navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(this._constraints).then(e=>{this.onUserMediaSuccess(e)}).catch(e=>{this.onUserMediaError(e)}):(this._logger.error(this,"WebRTCStreamer :: Browser does not support WebRTC"),this._main.dispatchEvent("compatibilityError",{ref:this._main,message:"WebRTC is not supported"}))}catch(e){this.onUserMediaError(e)}}publish(e){this._publishState==o.PublishState.PUBLISHED&&this.closeStream(),this._main.getConfigManager().getStreamData().streamKey=e,this.startWebRTC()}unpublish(){this.closeStream()}onUserMediaSuccess(e){this._logger.success(this,"WebRTCStreamer :: WebRTC UserMedia successfully retrieved"),this._stream=e,this._soundMeter.attach(this._stream),this.setPublishState(o.PublishState.INITIALIZED),null!=this._cameraList&&null!=this._microphoneList||this.grabDevices();var t=this._main.getStageController().getScreenElement().getVideoElement();t.srcObject=e,t.autoplay=!0,t.playsInline=!0,null!=(e=this._main.getNetworkController())&&e.start()}onUserMediaError(e){switch(e.message){case"Permission denied":case"The request is not allowed by the user agent or the platform in the current context, possibly because the user denied permission.":case"The request is not allowed by the user agent or the platform in the current context.":this._logger.warning(this,"WebRTCStreamer :: No permission to access camera & microphone"),this._main.dispatchEvent("inputDeviceDenied",{ref:this._main});break;case"The object can not be found here.":case"Requested device not found":this._logger.warning(this,"WebRTCStreamer :: Could not access camera or microphone"),this._main.dispatchEvent("inputDeviceError",{ref:this._main});break;default:this._logger.warning(this,"WebRTCStreamer :: Unsupported onUserMediaError: "+e.message)}}onSocketMessage(e){var t=JSON.parse(e);switch(Number(t.status)){case 200:var i=t.sdp,n=(void 0!==i&&this._peerConnection.setRemoteDescription(new RTCSessionDescription(i),()=>{},()=>{}),t.iceCandidates);if(void 0!==n)for(var s in n)this._peerConnection.addIceCandidate(new RTCIceCandidate(n[s]));break;case 503:this._main.dispatchEvent("streamKeyInUse",{ref:this._main,streamKey:this._main.getConfigManager().getStreamData().streamKey}),this.setPublishState(o.PublishState.ERROR)}}onConnectionStateChange(e){if(null!==e)switch(e.currentTarget.connectionState){case"connecting":this._logger.info(this,"WebRTCStreamer :: Event: onStreamerConnecting"),this.setPublishState(o.PublishState.CONNECTING);break;case"connected":this._logger.info(this,"WebRTCStreamer :: Event: onStreamerConnected"),this.setPublishState(o.PublishState.PUBLISHED),1==this._isMicrophoneMuted&&this.muteMicrophone(!1);break;case"disconnected":this._logger.info(this,"WebRTCStreamer :: Event: onStreamerDisconnected"),this.setPublishState(o.PublishState.UNPUBLISHED);break;case"failed":this._logger.info(this,"WebRTCStreamer :: Event: onPlayerFailed"),this.setPublishState(o.PublishState.ERROR);break;default:this._logger.info(this,"WebRTCStreamer :: Unsupported onConnectionStateChange: "+e.currentTarget.connectionState)}}grabDevices(){navigator.mediaDevices.enumerateDevices().then(t=>{this._cameraList=new W,this._microphoneList=new W;for(let e=0;e<t.length;e++)try{var i,n;"videoinput"===t[e].kind?(i=new k(t[e],e),this._cameraList.push(i)):"audioinput"===t[e].kind&&(n=new k(t[e],e),this._microphoneList.push(n))}catch(e){this._logger.error(this,"WebRTCStreamer :: Input Device Error: "+e)}if(0==this._cameraList.getSize())this._main.dispatchEvent("noCameraFound",{ref:this._main});else if(0==this._microphoneList.getSize())this._main.dispatchEvent("noCameraFound",{ref:this._main});else{this._logger.info(this,"Camera list:");for(let e=0;e<this._cameraList.getSize();e++)this._logger.info(this,"=> ["+e+"] InputDevice: "+this._cameraList.get(e).getLabel());this._logger.info(this,"Microphone list:");for(let e=0;e<this._microphoneList.getSize();e++)this._logger.info(this,"=> ["+e+"] InputDevice: "+this._microphoneList.get(e).getLabel());this._selectedCamera=this.pickCamera(),this._selectedMicrophone=this.pickMicrophone()}}).catch(()=>{this._main.dispatchEvent("inputDeviceError",{ref:this._main})})}selectCamera(t){var i;for(let e=0;e<this._cameraList.getSize();e++)if(this._cameraList.get(e).getID()==t){this._selectedCamera=this._cameraList.get(e),null!=(i=this._main.getStorageManager())&&i.saveField("cameraID",this._selectedCamera.getID());break}this.closeStream(),this._constraints.video.deviceId=this._selectedCamera.getID(),this.startWebRTC()}selectMicrophone(t){var i;for(let e=0;e<this._microphoneList.getSize();e++)if(this._microphoneList.get(e).getID()==t){this._selectedMicrophone=this._microphoneList.get(e),null!=(i=this._main.getStorageManager())&&i.saveField("microphoneID",this._selectedMicrophone.getID());break}this.closeStream(),this._constraints.audio={deviceId:this._selectedMicrophone.getID()},this.startWebRTC()}pickCamera(){for(let e=0;e<this._cameraList.getSize();e++)this._cameraList.get(e).setSelected(!1);var e=null!=(e=null==(e=this._main.getStorageManager())?void 0:e.getField("cameraID"))?e:null;return null==this._selectedCamera||null==e?this._selectedCamera=this._cameraList.get(0):this.selectCamera(e),this._selectedCamera.setSelected(!0),this._main.dispatchEvent("deviceListUpdate",{ref:this._main,cameraList:this._cameraList.getArray(),microphoneList:this._microphoneList.getArray()}),this._selectedCamera}pickMicrophone(){for(let e=0;e<this._microphoneList.getSize();e++)this._microphoneList.get(e).setSelected(!1);var e=null!=(e=null==(e=this._main.getStorageManager())?void 0:e.getField("microphoneID"))?e:null;return null==this._selectedMicrophone||null==e?this._selectedMicrophone=this._microphoneList.get(0):this.selectMicrophone(e),this._selectedMicrophone.setSelected(!0),this._main.dispatchEvent("deviceListUpdate",{ref:this._main,cameraList:this._cameraList.getArray(),microphoneList:this._microphoneList.getArray()}),this._selectedMicrophone}muteMicrophone(t){if(this._publishState==o.PublishState.PUBLISHED)if(null!==this._stream){t?this._logger.success(this,"WebRTCStreamer :: Unmuting microphone"):this._logger.success(this,"WebRTCStreamer :: Muting microphone");for(let e=0;e<this._stream.getAudioTracks().length;e++)this._stream.getAudioTracks()[e].enabled=t;this._isMicrophoneMuted=!t}else this._logger.warning(this,"WebRTCStreamer :: Stream object not present!");else this._logger.warning(this,"WebRTCStreamer :: Not ready to change microphone")}onDescriptionError(e){this._logger.info(this,"WebRTCStreamer :: onDescriptionError: "+JSON.stringify(e))}onIceCandidate(e){e.candidate}closeStream(){this._stream&&this._stream.getTracks().forEach(function(e){e.stop()}),this._soundMeter.detach(),void 0!==this._peerConnection&&null!==this._peerConnection&&this._peerConnection.close(),this.setPublishState(o.PublishState.UNPUBLISHED)}getCurrentCamera(){return this._selectedCamera}getCurrentMicrophone(){return this._selectedMicrophone}setPublishState(e){this._publishState=e,this._main.dispatchEvent("publishStateChange",{ref:this._main,state:this._publishState})}getCameraList(){return this._cameraList.getArray()}getMicrophoneList(){return this._microphoneList.getArray()}getPlayer(){return this._selectedPlayer}destroy(){var e;this.closeStream(),null!=(e=this._selectedPlayer)&&e.clear(),this._selectedPlayer=null,this._main.removeEventListener("serverConnect",this.onServerConnect),document.removeEventListener("visibilitychange",this.visibilityChange),window.removeEventListener("blur",this.onWindowBlur),window.removeEventListener("focus",this.onWindowFocus)}}(p=D=D||{})[p.NOT_INITIALIZED=0]="NOT_INITIALIZED",p[p.STARTED=1]="STARTED",p[p.CONNECTING=2]="CONNECTING",p[p.CONNECTED=3]="CONNECTED",p[p.CLOSED=4]="CLOSED",p[p.FAILED=5]="FAILED";class K extends class{constructor(){this.CONNECTION_TIMEOUT=5,this.isBinary=!0,this._connectionState=D.NOT_INITIALIZED,this._messageCount=0,this._disconnectedByUser=!1,this._isConnected=!1,this._sequenceNumber=-1}startConnection(){this._disconnectedByUser=!1,this._messageCount=0,this._isConnected=!1,this._disconnectedByUser=!1,this._connectionState=D.CONNECTING,this.socket=new WebSocket(this.socketURL),this.isBinary&&(this.socket.binaryType="arraybuffer"),this.socket.onopen=e=>{clearTimeout(this._connectionTimeout),this._sequenceNumber++,this._connectionState=D.CONNECTED,this.onSocketOpen(e)},this.socket.onmessage=e=>{this._messageCount++,this.onSocketMessage(e)},this.socket.onclose=e=>{clearTimeout(this._connectionTimeout),this._connectionState==D.CONNECTED?(this._connectionState=D.CLOSED,this.onSocketClose(e)):this._connectionState=D.FAILED},this.socket.onerror=e=>{if(clearTimeout(this._connectionTimeout),this._connectionState==D.CONNECTING&&this.onSocketError(e),this._connectionState==D.CONNECTED)try{this.socket.close()}catch(e){}},this._connectionTimeout=setTimeout(()=>{try{this.socket.close()}catch(e){}this._connectionState==D.CONNECTING&&(this._connectionState=D.FAILED,this.onSocketError(new ErrorEvent("connectionTimeout")))},1e3*this.CONNECTION_TIMEOUT)}onSocketOpen(e){}onSocketClose(e){}onSocketMessage(e){}onSocketError(e){}onError(e){}sendData(e){if(this._connectionState==D.CONNECTED&&null!==this.socket){if(null!=e)return void this.socket.send(e);this.onError("no data to send")}this.onError("socket not connected")}getConnectionState(){return this._connectionState}disconnect(e=!0){this._isConnected=!1,this._connectionState=D.CLOSED,e&&(this._logger.warning(this,"Disconnected by user"),this._disconnectedByUser=e),null!=this.socket&&(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close())}destroy(){void 0!==this.socket&&null!==this.socket&&(this.socket.onopen=null,this.socket.onmessage=null,this.socket.onclose=null,this.socket.onerror=null,this.socket.close()),this._connectionState=D.CLOSED}getSocketURL(){return this.socketURL}}{constructor(e,t){super(),this._logger=e.getLogger(),this._main=e,this._networkController=t,this.initialize()}initialize(){this._logger.info(this,"Starting new connection with a storm server"),this.pickServerFromList(this._main.getConfigManager().getStreamData().getServerList()),null!=this._currServer?(this.socketURL=this.createURL(this._currServer),this._logger.info(this,"Starting WebSocket connection with: "+this.socketURL),this._main.dispatchEvent("serverConnectionInitiate",{ref:this._main,serverURL:this.socketURL}),this._main.getConfigManager().getIfDemoMode()?(this._logger.warning(this,"Player is in demo mode, and will not connect with a server!"),this._main.dispatchEvent("authorizationComplete",{ref:this._main})):this.startConnection()):this._logger.error(this,"Connection with the server could not be initialized!")}onSocketOpen(e){this._logger.success(this,"Connection with the server has been established!"),this._main.dispatchEvent("serverConnect",{ref:this._main,serverURL:this.socketURL,sequenceNum:this._sequenceNumber}),this._isConnected=!0}onSocketError(e){this._isConnected=!1,this._disconnectedByUser||(this._logger.error(this,"Connection with the server failed"),this._main.dispatchEvent("serverConnectionError",{ref:this._main,serverURL:this.socketURL,restart:this._main.getConfigManager().getSettingsData().getIfRestartOnError(),sequenceNum:this._sequenceNumber}),0==this._isConnected&&(this._currServer.setAsFaild(!0),this.initiateReconnect()))}onSocketClose(e){this._isConnected=!1,this._disconnectedByUser?this._logger.warning(this,"Force disconnect from server!"):(this._logger.error(this,"Connection with the server has been closed"),this._main.dispatchEvent("serverDisconnect",{ref:this._main,serverURL:this.socketURL,restart:this._main.getConfigManager().getSettingsData().getIfRestartOnError(),sequenceNum:this._sequenceNumber}),this.initiateReconnect())}onSocketMessage(e){this._networkController.onMessage(e)}createURL(e){var t="";return(t+=e.getIfSSL()?"wss://":"ws://")+e.getHost()+(":"+e.getPort())+"/webrtc-session.json"}initiateReconnect(){var e=this._main.getConfigManager().getSettingsData().getIfRestartOnError();const t=this._main.getConfigManager().getSettingsData().getReconnectTime();this._disconnectedByUser||e&&(null!=this._reconnectTimer&&clearTimeout(this._reconnectTimer),this._reconnectTimer=setTimeout(()=>{this.pickServerFromList(this._main.getConfigManager().getStreamData().getServerList()),null!=this._currServer&&(this._logger.info(this,`Will reconnect to the server in ${t} seconds...`),this.socketURL=this.createURL(this._currServer),this._logger.info(this,"Starting WebSocket connection with: "+this.socketURL),this._main.dispatchEvent("serverConnectionInitiate",{ref:this._main,serverURL:this.socketURL}),this.startConnection())},1e3*t))}pickServerFromList(t){let i=null;for(let e=0;e<t.length;e++)if(!t[e].getIfFaild()){i=t[e];break}null==i?(this._logger.error(this,"All connections failed!"),this._main.dispatchEvent("allConnectionsFailed",{ref:this._main,mode:"none"}),this._currServer=null):this._currServer=i}isConnectionActive(){return this._isConnected}getCurrentServer(){return this._currServer}destroy(){super.destroy(),null!=this._reconnectTimer&&clearTimeout(this._reconnectTimer)}}class j{constructor(e){this._currentStreamKey="none",this._lastState="",this.onServerConnect=()=>{},this.onServerDisconnect=()=>{this._lastState="none"},this.onMessage=e=>{var t;null!=(t=this._main.getPlaybackController())&&t.onSocketMessage(e.data)},this._main=e,this._logger=e.getLogger(),this._main.addEventListener("serverConnect",this.onServerConnect,!1),this._main.addEventListener("serverDisconnect",this.onServerDisconnect,!1)}initialize(){null!=this._connection&&(this._connection.getConnectionState()==D.CONNECTING||this._connection.getConnectionState()==D.CONNECTED?this._logger.info(this,"Connection is alive, not doing anything!"):(this._logger.info(this,"Connection is dead, restarting!"),this._connection.startConnection()))}start(){this._connection=new K(this._main,this)}stop(){this._connection.disconnect(!0),this._lastState=""}sendMessage(e){this._connection.isConnectionActive()&&this._connection.sendData(e)}getConnection(){return this._connection}getCurrentStreamKey(){return this._currentStreamKey}}class P extends class{constructor(){this._isRemoved=!1,this._listeners={}}addEventListener(t,i,e=!0){this._listeners[t]||(this._listeners[t]=[]);let n=!1;if(null!=this._listeners[t]&&0<this._listeners[t].length)for(let e=0;e<this._listeners[t].length;e++)if(this._listeners[t][e][1]==i){n=!0;break}return this._logger.success(this,"Registering a new event: "+t),!n&&(this._listeners[t].push([t,i,e]),!0)}removeEventListener(t,i){let n=!1;if(null!=this._listeners[t]&&0<this._listeners[t].length)for(let e=0;e<this._listeners[t].length;e++){var s=this._listeners[t][e];if(i){if(s[1]==i){if(1!=s[2])break;n=!0,this._listeners[t].splice(e,1);break}}else n=!0,1==s[2]&&this._listeners[t].splice(e,1)}return this._logger.success(this,"Removing listener: "+t),n}removeAllEventListeners(){this._logger.success(this,"Removing all listeners!");for(const i in this._listeners){var e=i,t=this._listeners[e];if(t&&0<t.length)for(let e=t.length-1;0<=e;e--)!0===t[e][2]&&t.splice(e,1)}}dispatchEvent(t,i){if(!this._isRemoved&&null!=this._listeners[t]&&0<this._listeners[t].length)for(let e=0;e<this._listeners[t].length;e++)this._listeners[t][e][1].call(this,i)}}{constructor(e,t=!1){super(),this.DEV_MODE=!0,this.STREAMER_VERSION="0.9.0-beta.0",this.COMPILE_DATE="11/28/2024, 9:22:53 AM",this.STREAMER_BRANCH="Experimental",this.STREAMER_PROTOCOL_VERSION=1,this._initialized=!1,"undefined"!=typeof window&&window.document&&window.document.createElement?(!this.DEV_MODE||"StormStreamerArray"in window||(window.StormStreamerArray=[]),window.StormStreamerArray.push(this),this._streamerID=P.NEXT_STREAMER_ID++,null!=e&&(this.setStreamConfig(e),t)&&this.initialize()):console.error('StormLibrary Creation Error - No "window" element in the provided context!')}initialize(){if(!this._isRemoved){if(null==this._configManager)throw Error("Stream Config was not provided for this library! A properly configured object must be provided through the constructor or via the setConfig method before using the initialize() method.");this._storageManager=new C(this),this._stageController=new y(this),this._networkController=new j(this),this._playbackController=new X(this),this._clientUser=new e,this._initialized=!0,this.dispatchEvent("streamerReady",{ref:this})}}setStreamConfig(e){this._isRemoved||(e=JSON.parse(JSON.stringify(e)),null==this._configManager?(this._configManager=new g(e),this._logger=new _(this._configManager.getSettingsData().getDebugData(),this),this._logger.info(this,"StreamerID: "+this._streamerID),this._logger.info(this,"Version: "+this.STREAMER_VERSION+" | Compile Date: "+this.COMPILE_DATE+" | Branch: "+this.STREAMER_BRANCH),this._logger.info(this,"UserCapabilities :: Browser: "+m.getBrowserName()+" "+m.getBrowserVersion()),this._logger.info(this,"UserCapabilities :: Operating System: "+m.getOS()+" "+m.getOSVersion()),this._logger.info(this,"UserCapabilities :: isMobile: "+m.isMobile()),this._logger.info(this,"UserCapabilities :: hasMSESupport: "+m.hasMSESupport()),this._logger.info(this,"UserCapabilities :: hasWebSocketSupport: "+m.hasWebSocketsSupport()),this._logger.info(this,"UserCapabilities :: hasWebRTCSupport: "+m.hasWebRTCSupport()),this._configManager.print(this._logger)):(this._logger.info(this,"StreamConfig has been overwritten, dispatching streamConfigChanged!"),this._configManager=new g(e),this._configManager.print(this._logger),this.dispatchEvent("streamConfigChange",{ref:this,newConfig:this._configManager})))}stop(){}isConnected(){var e;return null!=(e=null==(e=this._networkController)?void 0:e.getConnection().isConnectionActive())&&e}attachToContainer(e){var t;return!!this._initialized&&null!=(t=null==(t=this._stageController)?void 0:t.attachToParent(e))&&t}detachFromContainer(){var e;return!!this._initialized&&null!=(e=null==(e=this._stageController)?void 0:e.detachFromParent())&&e}getContainer(){var e;return null!=(e=null==(e=this._stageController)?void 0:e.getParentElement())?e:null}mute(){null!=this._stageController&&null!=this._stageController.getScreenElement()?this._stageController.getScreenElement().setMuted(!0):this._configManager.getSettingsData().getAudioData().muted=!0}unmute(){null!=this._stageController&&null!=this._stageController.getScreenElement()?this._stageController.getScreenElement().setMuted(!1):this._configManager.getSettingsData().getAudioData().muted=!1}isMute(){var e;return null!=(e=null!=(e=null==(e=null==(e=this._stageController)?void 0:e.getScreenElement())?void 0:e.getIfMuted())?e:this._configManager.getSettingsData().getAudioData().muted)&&e}toggleMute(){var e=this.isMute();return e?this.unmute():this.mute(),!e}setVolume(e){var t;void 0===(null==(t=null==(t=this._stageController)?void 0:t.getScreenElement())?void 0:t.setVolume(e))&&(this._configManager.getSettingsData().getAudioData().startVolume=e)}getVolume(){var e;return null!=(e=null==(e=null==(e=this._stageController)?void 0:e.getScreenElement())?void 0:e.getVolume())?e:this._configManager.getSettingsData().getAudioData().startVolume}getCameraList(){var e;return null!=(e=null==(e=this._playbackController)?void 0:e.getCameraList())?e:null}getMicrophoneList(){var e;return null!=(e=null==(e=this._playbackController)?void 0:e.getMicrophoneList())?e:null}setCamera(e){var t;null!=(t=this._playbackController)&&t.selectCamera(e)}setMicrophone(e){var t;null!=(t=this._playbackController)&&t.selectMicrophone(e)}getCurrentCamera(){return this._playbackController.getCurrentCamera()}getCurrentMicrophone(){return this._playbackController.getCurrentMicrophone()}muteMicrophone(e){var t;null!=(t=this._playbackController)&&t.muteMicrophone(e)}publish(e){var t;null!=(t=this._playbackController)&&t.publish(e)}unpublish(){var e;null!=(e=this._playbackController)&&e.unpublish()}setSize(e,t){this._initialized?this._stageController.setSize(e,t):(e=u.parseValue(e),t=u.parseValue(t),this._configManager.getSettingsData().getVideoData().videoWidthValue=e.value,this._configManager.getSettingsData().getVideoData().videoWidthInPixels=e.isPixels,this._configManager.getSettingsData().getVideoData().videoHeightValue=t.value,this._configManager.getSettingsData().getVideoData().videoHeightInPixels=t.isPixels)}setWidth(e){this._initialized?this._stageController.setWidth(e):(e=u.parseValue(e),this._configManager.getSettingsData().getVideoData().videoWidthValue=e.value,this._configManager.getSettingsData().getVideoData().videoWidthInPixels=e.isPixels)}setHeight(e){this._initialized?this._stageController.setHeight(e):(e=u.parseValue(e),this._configManager.getSettingsData().getVideoData().videoHeightValue=e.value,this._configManager.getSettingsData().getVideoData().videoHeightInPixels=e.isPixels)}getWidth(){return this._initialized?this._stageController.getContainerWidth():this._configManager.getSettingsData().getVideoData().videoWidthInPixels?this._configManager.getSettingsData().getVideoData().videoWidthValue:0}getHeight(){return this._initialized?this._stageController.getContainerHeight():this._configManager.getSettingsData().getVideoData().videoHeightInPixels?this._configManager.getSettingsData().getVideoData().videoHeightValue:0}setScalingMode(e){this._stageController?this._stageController.setScalingMode(e):this._configManager.getSettingsData().getVideoData().scalingMode=e}getScalingMode(){return this._stageController?this._stageController.getScalingMode():this._configManager.getSettingsData().getVideoData().scalingMode}updateToSize(){this._initialized&&this._stageController.onResize()}makeScreenshot(){let i=document.createElement("canvas"),n=i.getContext("2d");return new Promise(t=>{var e;null!=this._stageController&&(i.width=this._stageController.getScreenElement().getVideoElement().videoWidth,i.height=this._stageController.getScreenElement().getVideoElement().videoHeight,e=this._stageController.getScreenElement().getVideoElement(),n)?(n.drawImage(e,0,0,i.width,i.height),i.toBlob(e=>{t(e)},"image/png")):t(null)})}enterFullScreen(){this._initialized&&this._stageController&&this._stageController.enterFullScreen()}exitFullScreen(){this._initialized&&this._stageController&&this._stageController.exitFullScreen()}isFullScreenMode(){return!(!this._initialized||!this._stageController)&&this._stageController.isFullScreenMode()}getStreamerID(){return this._streamerID}getLogger(){return this._logger}getConfigManager(){return this._configManager}getNetworkController(){return this._networkController}getPlaybackController(){return this._playbackController}getStageController(){return this._stageController}getVideoElement(){var e;return null!=(e=null==(e=null==(e=this._stageController)?void 0:e.getScreenElement())?void 0:e.getVideoElement())?e:null}isInitialized(){return this._initialized}getVersion(){return this.STREAMER_VERSION}getBranch(){return this.STREAMER_BRANCH}getStorageManager(){return this._storageManager}dispatchEvent(e,t){super.dispatchEvent(e,t)}destroy(){var e;this._logger.warning(this,"Destroying library instance, bye, bye!"),this._initialized=!1,this._isRemoved=!0,null!=(e=this._networkController)&&e.getConnection().destroy(),null!=(e=this._stageController)&&e.destroy(),null!=(e=this._playbackController)&&e.destroy(),this.removeAllEventListeners()}}P.NEXT_STREAMER_ID=0,o.StormStreamer=P,o.create=function(e){return new P(e)}});