{"version":3,"file":"cs-video-player.umd.min.js","sources":["../src/main.ts"],"sourcesContent":["import type { HlsConfig } from 'hls.js';\r\nimport Hls from 'hls.js';\r\n\r\nexport default class CsVideoPlayerHelper {\r\n\tpublic readonly hls: Hls;\r\n\treadonly #defaultHlsConfig: Partial = {\r\n\t\tautoStartLoad: true,\r\n\t\tstartPosition: -1,\r\n\t\tstartLevel: 5,\r\n\t\tdebug: false,\r\n\t\tcapLevelOnFPSDrop: false,\r\n\t\tcapLevelToPlayerSize: false,\r\n\t\tdefaultAudioCodec: undefined,\r\n\t\tinitialLiveManifestSize: 1,\r\n\t\tmaxBufferLength: 30,\r\n\t\tmaxMaxBufferLength: 600,\r\n\t\tbackBufferLength: Infinity,\r\n\t\tfrontBufferFlushThreshold: Infinity,\r\n\t\tmaxBufferSize: 60 * 1000 * 1000,\r\n\t\tmaxBufferHole: 0.1,\r\n\t\thighBufferWatchdogPeriod: 2,\r\n\t\tnudgeOffset: 0.1,\r\n\t\tnudgeMaxRetry: 3,\r\n\t\tmaxFragLookUpTolerance: 0.25,\r\n\t\tliveSyncDurationCount: 3,\r\n\t\tliveMaxLatencyDurationCount: Infinity,\r\n\t\tliveDurationInfinity: false,\r\n\t\tpreferManagedMediaSource: false,\r\n\t\tenableWorker: false,\r\n\t\tenableSoftwareAES: true,\r\n\t\tstartFragPrefetch: false,\r\n\t\ttestBandwidth: true,\r\n\t\tprogressive: false,\r\n\t\tlowLatencyMode: true,\r\n\t\tfpsDroppedMonitoringPeriod: 5000,\r\n\t\tfpsDroppedMonitoringThreshold: 0.2,\r\n\t\tappendErrorMaxRetry: 3,\r\n\t\tenableDateRangeMetadataCues: true,\r\n\t\tenableID3MetadataCues: true,\r\n\t\tenableWebVTT: true,\r\n\t\tenableIMSC1: true,\r\n\t\tenableCEA708Captions: true,\r\n\t\tstretchShortVideoTrack: false,\r\n\t\tmaxAudioFramesDrift: 10,\r\n\t\tforceKeyFrameOnDiscontinuity: true,\r\n\t\tabrEwmaFastLive: 3.0,\r\n\t\tabrEwmaSlowLive: 9.0,\r\n\t\tabrEwmaFastVoD: 3.0,\r\n\t\tabrEwmaSlowVoD: 9.0,\r\n\t\tabrEwmaDefaultEstimate: 500000,\r\n\t\tabrEwmaDefaultEstimateMax: 5000000,\r\n\t\tabrBandWidthFactor: 0.95,\r\n\t\tabrBandWidthUpFactor: 0.7,\r\n\t\tabrMaxWithRealBitrate: false,\r\n\t\tmaxStarvationDelay: 4,\r\n\t\tmaxLoadingDelay: 4,\r\n\t\tminAutoBitrate: 1,\r\n\t\temeEnabled: false\r\n\t} as const;\r\n\t#config: Partial;\r\n\t#videoSourceId = 42;\r\n\t#videoKey: string | null = null;\r\n\t#autoplay: boolean = false;\r\n\t#videoPlayerEl: HTMLVideoElement;\r\n\t#videoSourceOrigin: string;\r\n\t#videoSourceBasePath: string;\r\n\t#videoUrl: string = '';\r\n\t#fallbackToHighQuality: boolean;\r\n\r\n\r\n\tconstructor (\r\n\t\telement: HTMLVideoElement,\r\n\t\tvideoSourceOrigin: string,\r\n\t\tvideoSourceBasePath: string,\r\n\t\tstartLevel: number,\r\n\t\tfallbackToHighQuality: boolean = true,\r\n\t\tdebug: boolean = false,\r\n\t\tconfigOverrides: Partial = {}\r\n\t) {\r\n\t\tthis.#config = { ...this.#defaultHlsConfig, ...configOverrides };\r\n\t\tthis.#config.startLevel = startLevel;\r\n\t\tthis.#config.debug = debug;\r\n\t\tthis.#videoPlayerEl = element;\r\n\t\tthis.#videoSourceOrigin = videoSourceOrigin;\r\n\t\tthis.#videoSourceBasePath = videoSourceBasePath;\r\n\t\tthis.#fallbackToHighQuality = fallbackToHighQuality;\r\n\t\tthis.hls = new Hls(this.#config);\r\n\t}\r\n\r\n\tpublic loadVideo(videoKey: string, autoplay: boolean, videoSourceId: number = 42): void {\r\n\t\tthis.#videoSourceId = videoSourceId;\r\n\t\tthis.#videoKey = videoKey;\r\n\t\tthis.#autoplay = autoplay;\r\n\t\tthis.#videoUrl = this.getVideoUrl();\r\n\t\tif(this.hlsVideoIsSupported()) {\r\n\t\t\tthis.hls.loadSource(this.#videoUrl);\r\n\t\t\tthis.hls.attachMedia(this.#videoPlayerEl);\r\n\t\t\tif(this.#autoplay) {\r\n\t\t\t\tthis.hls.on(Hls.Events.MANIFEST_PARSED, () => {\r\n\t\t\t\t\tthis.#videoPlayerEl.play();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tthis.hls.on(Hls.Events.ERROR, (_event, data) => {\r\n\t\t\t\tif(data.details === Hls.ErrorDetails.MANIFEST_PARSING_ERROR) { // happens for old vidly videos that don't have an hls.m3u8 file\r\n\t\t\t\t\t// fallback to direct play\r\n\t\t\t\t\tthis.hls.detachMedia();\r\n\t\t\t\t\tthis.#videoPlayerEl.src = this.#videoUrl;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\tthis.#videoPlayerEl.src = this.#videoUrl;\r\n\t\t\tif(this.#autoplay) {\r\n\t\t\t\tthis.#videoPlayerEl.play();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic hlsVideoIsSupported(): boolean {\r\n\t\treturn Hls.isSupported(); // will return false for iOS before 17.1 on iPhones\r\n\t}\r\n\r\n\tpublic getVideoUrl(): string {\r\n\t\t// need to check for canPlayType 'application/vnd.apple.mpegurl' for iPhones running iOS 16.x and 17.0\r\n\t\tconst quality = this.hlsVideoIsSupported() || this.#videoPlayerEl.canPlayType('application/vnd.apple.mpegurl') ? 'adaptive'\r\n\t\t\t: (this.#fallbackToHighQuality ? '1080' : '480');\r\n\t\treturn `${this.#videoSourceOrigin}/${this.#videoSourceBasePath}/${this.#videoKey}?source=${this.#videoSourceId}&size=${quality}`;\r\n\t}\r\n}\r\n"],"names":["CsVideoPlayerHelper","element","videoSourceOrigin","videoSourceBasePath","startLevel","fallbackToHighQuality","debug","configOverrides","__publicField","__privateAdd","_defaultHlsConfig","_config","_videoSourceId","_videoKey","_autoplay","_videoPlayerEl","_videoSourceOrigin","_videoSourceBasePath","_videoUrl","_fallbackToHighQuality","__privateSet","__privateGet","Hls","videoKey","autoplay","videoSourceId","_event","data","quality"],"mappings":"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"}