strataplayer 1.2.7 → 1.2.9
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.
- package/dist/hls.cjs.js.map +1 -1
- package/dist/hls.es.js.map +1 -1
- package/dist/index.d.ts +9 -7
- package/dist/strataplayer.cjs.js.map +1 -1
- package/dist/strataplayer.es.js.map +1 -1
- package/package.json +20 -1
package/dist/hls.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls.cjs.js","sources":["../plugins/HlsPlugin.ts"],"sourcesContent":["\nimport { StrataCore, IPlugin } from '../core/StrataCore';\nimport * as HlsModule from 'hls.js';\n\n// Handle environment differences where Hls might be a default export or module export\nconst Hls = (HlsModule as any).default || HlsModule;\n\nexport class HlsPlugin implements IPlugin {\n name = 'HlsPlugin';\n private hls: any = null;\n private core: StrataCore | null = null;\n\n init(core: StrataCore) {\n this.core = core;\n\n // Listen for load requests\n this.core.events.on('load', (data: { url: string, type: string }) => {\n // Only proceed if type matches HLS\n if (data.type === 'hls' || data.url.includes('.m3u8')) {\n if (Hls.isSupported()) {\n this.loadHls(data.url);\n } else if (this.core!.video.canPlayType('application/vnd.apple.mpegurl')) {\n // Native HLS fallback (Safari) - Core sets src, we do nothing\n // Core already handles setting video.src if standard\n this.core!.video.src = data.url;\n }\n } else {\n // If we had an active HLS instance but switched to MP4, destroy it\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n }\n });\n\n // Listen for quality changes from UI\n this.core.events.on('quality-request', (index: number) => {\n if (this.hls) {\n this.hls.currentLevel = index;\n }\n });\n\n // Listen for audio track changes from UI\n this.core.events.on('audio-track-request', (index: number) => {\n if (this.hls) {\n this.hls.audioTrack = index;\n }\n });\n }\n\n private loadHls(url: string) {\n if (this.hls) {\n this.hls.destroy();\n }\n\n this.hls = new Hls({\n autoStartLoad: true,\n startLevel: -1, // Auto\n capLevelToPlayerSize: true, // Performance opt\n });\n\n this.hls.loadSource(url);\n this.hls.attachMedia(this.core!.video);\n\n this.hls.on(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => {\n const levels = data.levels.map((lvl: any, idx: number) => ({\n height: lvl.height,\n bitrate: lvl.bitrate,\n index: idx\n }));\n this.core!.store.setState({ qualityLevels: levels });\n });\n\n // Handle Audio Tracks\n this.hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (event: any, data: any) => {\n const tracks = data.audioTracks.map((track: any, idx: number) => ({\n label: track.name || track.lang || `Audio ${idx + 1}`,\n language: track.lang || '',\n index: idx\n }));\n this.core!.store.setState({\n audioTracks: tracks,\n currentAudioTrack: this.hls!.audioTrack\n });\n });\n\n this.hls.on(Hls.Events.LEVEL_SWITCHED, (event: any, data: any) => {\n // Update current quality only if in auto mode to show what's playing\n // If manual, state is already set\n });\n\n this.hls.on(Hls.Events.ERROR, (event: any, data: any) => {\n if (data.fatal) {\n // Pass fatal errors to Core to handle the retry loop visibly\n const msg = data.details || 'Unknown HLS Error';\n this.core!.triggerError(msg, true);\n\n // Cleanup if needed, but core.load() will eventually destroy and re-init this plugin\n }\n });\n }\n\n destroy() {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n }\n}\n"],"names":["Hls","HlsModule","HlsPlugin","__publicField","core","data","index","url","event","levels","lvl","idx","tracks","track","msg"],"mappings":"wiBAKMA,EAAOC,EAAkB,SAAWA,EAEnC,MAAMC,CAA6B,CAAnC,cACLC,EAAA,YAAO,aACCA,EAAA,WAAW,MACXA,EAAA,YAA0B,MAElC,KAAKC,EAAkB,CACrB,KAAK,KAAOA,EAGZ,KAAK,KAAK,OAAO,GAAG,OAASC,GAAwC,CAE/DA,EAAK,OAAS,OAASA,EAAK,IAAI,SAAS,OAAO,EAC9CL,EAAI,cACN,KAAK,QAAQK,EAAK,GAAG,EACZ,KAAK,KAAM,MAAM,YAAY,+BAA+B,IAGrE,KAAK,KAAM,MAAM,IAAMA,EAAK,KAI1B,KAAK,MACP,KAAK,IAAI,QAAA,EACT,KAAK,IAAM,KAGjB,CAAC,EAGD,KAAK,KAAK,OAAO,GAAG,kBAAoBC,GAAkB,CACpD,KAAK,MACP,KAAK,IAAI,aAAeA,EAE5B,CAAC,EAGD,KAAK,KAAK,OAAO,GAAG,sBAAwBA,GAAkB,CACxD,KAAK,MACP,KAAK,IAAI,WAAaA,EAE1B,CAAC,CACH,CAEQ,QAAQC,EAAa,CACvB,KAAK,KACP,KAAK,IAAI,QAAA,EAGX,KAAK,IAAM,IAAIP,EAAI,CACjB,cAAe,GACf,WAAY,GACZ,qBAAsB,EAAA,CACvB,EAED,KAAK,IAAI,WAAWO,CAAG,EACvB,KAAK,IAAI,YAAY,KAAK,KAAM,KAAK,EAErC,KAAK,IAAI,GAAGP,EAAI,OAAO,gBAAiB,CAACQ,EAAYH,IAAc,CACjE,MAAMI,EAASJ,EAAK,OAAO,IAAI,CAACK,EAAUC,KAAiB,CACzD,OAAQD,EAAI,OACZ,QAASA,EAAI,QACb,MAAOC,CAAA,EACP,EACF,KAAK,KAAM,MAAM,SAAS,CAAE,cAAeF,EAAQ,CACrD,CAAC,EAGD,KAAK,IAAI,GAAGT,EAAI,OAAO,qBAAsB,CAACQ,EAAYH,IAAc,CACtE,MAAMO,EAASP,EAAK,YAAY,IAAI,CAACQ,EAAYF,KAAiB,CAChE,MAAOE,EAAM,MAAQA,EAAM,MAAQ,SAASF,EAAM,CAAC,GACnD,SAAUE,EAAM,MAAQ,GACxB,MAAOF,CAAA,EACP,EACF,KAAK,KAAM,MAAM,SAAS,CACxB,YAAaC,EACb,kBAAmB,KAAK,IAAK,UAAA,CAC9B,CACH,CAAC,EAED,KAAK,IAAI,GAAGZ,EAAI,OAAO,eAAgB,CAACQ,EAAYH,IAAc,CAGlE,CAAC,EAED,KAAK,IAAI,GAAGL,EAAI,OAAO,MAAO,CAACQ,EAAYH,IAAc,CACvD,GAAIA,EAAK,MAAO,CAEd,MAAMS,EAAMT,EAAK,SAAW,oBAC5B,KAAK,KAAM,aAAaS,EAAK,EAAI,CAGnC,CACF,CAAC,CACH,CAEA,SAAU,CACJ,KAAK,MACP,KAAK,IAAI,QAAA,EACT,KAAK,IAAM,KAEf,CACF"}
|
|
1
|
+
{"version":3,"file":"hls.cjs.js","sources":["../plugins/HlsPlugin.ts"],"sourcesContent":["\r\nimport { StrataCore, IPlugin } from '../core/StrataCore';\r\nimport * as HlsModule from 'hls.js';\r\n\r\n// Handle environment differences where Hls might be a default export or module export\r\nconst Hls = (HlsModule as any).default || HlsModule;\r\n\r\nexport class HlsPlugin implements IPlugin {\r\n name = 'HlsPlugin';\r\n private hls: any = null;\r\n private core: StrataCore | null = null;\r\n\r\n init(core: StrataCore) {\r\n this.core = core;\r\n\r\n // Listen for load requests\r\n this.core.events.on('load', (data: { url: string, type: string }) => {\r\n // Only proceed if type matches HLS\r\n if (data.type === 'hls' || data.url.includes('.m3u8')) {\r\n if (Hls.isSupported()) {\r\n this.loadHls(data.url);\r\n } else if (this.core!.video.canPlayType('application/vnd.apple.mpegurl')) {\r\n // Native HLS fallback (Safari) - Core sets src, we do nothing\r\n // Core already handles setting video.src if standard\r\n this.core!.video.src = data.url;\r\n }\r\n } else {\r\n // If we had an active HLS instance but switched to MP4, destroy it\r\n if (this.hls) {\r\n this.hls.destroy();\r\n this.hls = null;\r\n }\r\n }\r\n });\r\n\r\n // Listen for quality changes from UI\r\n this.core.events.on('quality-request', (index: number) => {\r\n if (this.hls) {\r\n this.hls.currentLevel = index;\r\n }\r\n });\r\n\r\n // Listen for audio track changes from UI\r\n this.core.events.on('audio-track-request', (index: number) => {\r\n if (this.hls) {\r\n this.hls.audioTrack = index;\r\n }\r\n });\r\n }\r\n\r\n private loadHls(url: string) {\r\n if (this.hls) {\r\n this.hls.destroy();\r\n }\r\n\r\n this.hls = new Hls({\r\n autoStartLoad: true,\r\n startLevel: -1, // Auto\r\n capLevelToPlayerSize: true, // Performance opt\r\n });\r\n\r\n this.hls.loadSource(url);\r\n this.hls.attachMedia(this.core!.video);\r\n\r\n this.hls.on(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => {\r\n const levels = data.levels.map((lvl: any, idx: number) => ({\r\n height: lvl.height,\r\n bitrate: lvl.bitrate,\r\n index: idx\r\n }));\r\n this.core!.store.setState({ qualityLevels: levels });\r\n });\r\n\r\n // Handle Audio Tracks\r\n this.hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (event: any, data: any) => {\r\n const tracks = data.audioTracks.map((track: any, idx: number) => ({\r\n label: track.name || track.lang || `Audio ${idx + 1}`,\r\n language: track.lang || '',\r\n index: idx\r\n }));\r\n this.core!.store.setState({\r\n audioTracks: tracks,\r\n currentAudioTrack: this.hls!.audioTrack\r\n });\r\n });\r\n\r\n this.hls.on(Hls.Events.LEVEL_SWITCHED, (event: any, data: any) => {\r\n // Update current quality only if in auto mode to show what's playing\r\n // If manual, state is already set\r\n });\r\n\r\n this.hls.on(Hls.Events.ERROR, (event: any, data: any) => {\r\n if (data.fatal) {\r\n // Pass fatal errors to Core to handle the retry loop visibly\r\n const msg = data.details || 'Unknown HLS Error';\r\n this.core!.triggerError(msg, true);\r\n\r\n // Cleanup if needed, but core.load() will eventually destroy and re-init this plugin\r\n }\r\n });\r\n }\r\n\r\n destroy() {\r\n if (this.hls) {\r\n this.hls.destroy();\r\n this.hls = null;\r\n }\r\n }\r\n}\r\n"],"names":["Hls","HlsModule","HlsPlugin","__publicField","core","data","index","url","event","levels","lvl","idx","tracks","track","msg"],"mappings":"wiBAKMA,EAAOC,EAAkB,SAAWA,EAEnC,MAAMC,CAA6B,CAAnC,cACLC,EAAA,YAAO,aACCA,EAAA,WAAW,MACXA,EAAA,YAA0B,MAElC,KAAKC,EAAkB,CACrB,KAAK,KAAOA,EAGZ,KAAK,KAAK,OAAO,GAAG,OAASC,GAAwC,CAE/DA,EAAK,OAAS,OAASA,EAAK,IAAI,SAAS,OAAO,EAC9CL,EAAI,cACN,KAAK,QAAQK,EAAK,GAAG,EACZ,KAAK,KAAM,MAAM,YAAY,+BAA+B,IAGrE,KAAK,KAAM,MAAM,IAAMA,EAAK,KAI1B,KAAK,MACP,KAAK,IAAI,QAAA,EACT,KAAK,IAAM,KAGjB,CAAC,EAGD,KAAK,KAAK,OAAO,GAAG,kBAAoBC,GAAkB,CACpD,KAAK,MACP,KAAK,IAAI,aAAeA,EAE5B,CAAC,EAGD,KAAK,KAAK,OAAO,GAAG,sBAAwBA,GAAkB,CACxD,KAAK,MACP,KAAK,IAAI,WAAaA,EAE1B,CAAC,CACH,CAEQ,QAAQC,EAAa,CACvB,KAAK,KACP,KAAK,IAAI,QAAA,EAGX,KAAK,IAAM,IAAIP,EAAI,CACjB,cAAe,GACf,WAAY,GACZ,qBAAsB,EAAA,CACvB,EAED,KAAK,IAAI,WAAWO,CAAG,EACvB,KAAK,IAAI,YAAY,KAAK,KAAM,KAAK,EAErC,KAAK,IAAI,GAAGP,EAAI,OAAO,gBAAiB,CAACQ,EAAYH,IAAc,CACjE,MAAMI,EAASJ,EAAK,OAAO,IAAI,CAACK,EAAUC,KAAiB,CACzD,OAAQD,EAAI,OACZ,QAASA,EAAI,QACb,MAAOC,CAAA,EACP,EACF,KAAK,KAAM,MAAM,SAAS,CAAE,cAAeF,EAAQ,CACrD,CAAC,EAGD,KAAK,IAAI,GAAGT,EAAI,OAAO,qBAAsB,CAACQ,EAAYH,IAAc,CACtE,MAAMO,EAASP,EAAK,YAAY,IAAI,CAACQ,EAAYF,KAAiB,CAChE,MAAOE,EAAM,MAAQA,EAAM,MAAQ,SAASF,EAAM,CAAC,GACnD,SAAUE,EAAM,MAAQ,GACxB,MAAOF,CAAA,EACP,EACF,KAAK,KAAM,MAAM,SAAS,CACxB,YAAaC,EACb,kBAAmB,KAAK,IAAK,UAAA,CAC9B,CACH,CAAC,EAED,KAAK,IAAI,GAAGZ,EAAI,OAAO,eAAgB,CAACQ,EAAYH,IAAc,CAGlE,CAAC,EAED,KAAK,IAAI,GAAGL,EAAI,OAAO,MAAO,CAACQ,EAAYH,IAAc,CACvD,GAAIA,EAAK,MAAO,CAEd,MAAMS,EAAMT,EAAK,SAAW,oBAC5B,KAAK,KAAM,aAAaS,EAAK,EAAI,CAGnC,CACF,CAAC,CACH,CAEA,SAAU,CACJ,KAAK,MACP,KAAK,IAAI,QAAA,EACT,KAAK,IAAM,KAEf,CACF"}
|
package/dist/hls.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hls.es.js","sources":["../plugins/HlsPlugin.ts"],"sourcesContent":["\nimport { StrataCore, IPlugin } from '../core/StrataCore';\nimport * as HlsModule from 'hls.js';\n\n// Handle environment differences where Hls might be a default export or module export\nconst Hls = (HlsModule as any).default || HlsModule;\n\nexport class HlsPlugin implements IPlugin {\n name = 'HlsPlugin';\n private hls: any = null;\n private core: StrataCore | null = null;\n\n init(core: StrataCore) {\n this.core = core;\n\n // Listen for load requests\n this.core.events.on('load', (data: { url: string, type: string }) => {\n // Only proceed if type matches HLS\n if (data.type === 'hls' || data.url.includes('.m3u8')) {\n if (Hls.isSupported()) {\n this.loadHls(data.url);\n } else if (this.core!.video.canPlayType('application/vnd.apple.mpegurl')) {\n // Native HLS fallback (Safari) - Core sets src, we do nothing\n // Core already handles setting video.src if standard\n this.core!.video.src = data.url;\n }\n } else {\n // If we had an active HLS instance but switched to MP4, destroy it\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n }\n });\n\n // Listen for quality changes from UI\n this.core.events.on('quality-request', (index: number) => {\n if (this.hls) {\n this.hls.currentLevel = index;\n }\n });\n\n // Listen for audio track changes from UI\n this.core.events.on('audio-track-request', (index: number) => {\n if (this.hls) {\n this.hls.audioTrack = index;\n }\n });\n }\n\n private loadHls(url: string) {\n if (this.hls) {\n this.hls.destroy();\n }\n\n this.hls = new Hls({\n autoStartLoad: true,\n startLevel: -1, // Auto\n capLevelToPlayerSize: true, // Performance opt\n });\n\n this.hls.loadSource(url);\n this.hls.attachMedia(this.core!.video);\n\n this.hls.on(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => {\n const levels = data.levels.map((lvl: any, idx: number) => ({\n height: lvl.height,\n bitrate: lvl.bitrate,\n index: idx\n }));\n this.core!.store.setState({ qualityLevels: levels });\n });\n\n // Handle Audio Tracks\n this.hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (event: any, data: any) => {\n const tracks = data.audioTracks.map((track: any, idx: number) => ({\n label: track.name || track.lang || `Audio ${idx + 1}`,\n language: track.lang || '',\n index: idx\n }));\n this.core!.store.setState({\n audioTracks: tracks,\n currentAudioTrack: this.hls!.audioTrack\n });\n });\n\n this.hls.on(Hls.Events.LEVEL_SWITCHED, (event: any, data: any) => {\n // Update current quality only if in auto mode to show what's playing\n // If manual, state is already set\n });\n\n this.hls.on(Hls.Events.ERROR, (event: any, data: any) => {\n if (data.fatal) {\n // Pass fatal errors to Core to handle the retry loop visibly\n const msg = data.details || 'Unknown HLS Error';\n this.core!.triggerError(msg, true);\n\n // Cleanup if needed, but core.load() will eventually destroy and re-init this plugin\n }\n });\n }\n\n destroy() {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n }\n}\n"],"names":["Hls","HlsModule","HlsPlugin","__publicField","core","data","index","url","event","levels","lvl","idx","tracks","track","msg"],"mappings":";;;;AAKA,MAAMA,IAAOC,EAAkB,WAAWA;AAEnC,MAAMC,EAA6B;AAAA,EAAnC;AACL,IAAAC,EAAA,cAAO;AACC,IAAAA,EAAA,aAAW;AACX,IAAAA,EAAA,cAA0B;AAAA;AAAA,EAElC,KAAKC,GAAkB;AACrB,SAAK,OAAOA,GAGZ,KAAK,KAAK,OAAO,GAAG,QAAQ,CAACC,MAAwC;AAEnE,MAAIA,EAAK,SAAS,SAASA,EAAK,IAAI,SAAS,OAAO,IAC9CL,EAAI,gBACN,KAAK,QAAQK,EAAK,GAAG,IACZ,KAAK,KAAM,MAAM,YAAY,+BAA+B,MAGrE,KAAK,KAAM,MAAM,MAAMA,EAAK,OAI1B,KAAK,QACP,KAAK,IAAI,QAAA,GACT,KAAK,MAAM;AAAA,IAGjB,CAAC,GAGD,KAAK,KAAK,OAAO,GAAG,mBAAmB,CAACC,MAAkB;AACxD,MAAI,KAAK,QACP,KAAK,IAAI,eAAeA;AAAA,IAE5B,CAAC,GAGD,KAAK,KAAK,OAAO,GAAG,uBAAuB,CAACA,MAAkB;AAC5D,MAAI,KAAK,QACP,KAAK,IAAI,aAAaA;AAAA,IAE1B,CAAC;AAAA,EACH;AAAA,EAEQ,QAAQC,GAAa;AAC3B,IAAI,KAAK,OACP,KAAK,IAAI,QAAA,GAGX,KAAK,MAAM,IAAIP,EAAI;AAAA,MACjB,eAAe;AAAA,MACf,YAAY;AAAA;AAAA,MACZ,sBAAsB;AAAA;AAAA,IAAA,CACvB,GAED,KAAK,IAAI,WAAWO,CAAG,GACvB,KAAK,IAAI,YAAY,KAAK,KAAM,KAAK,GAErC,KAAK,IAAI,GAAGP,EAAI,OAAO,iBAAiB,CAACQ,GAAYH,MAAc;AACjE,YAAMI,IAASJ,EAAK,OAAO,IAAI,CAACK,GAAUC,OAAiB;AAAA,QACzD,QAAQD,EAAI;AAAA,QACZ,SAASA,EAAI;AAAA,QACb,OAAOC;AAAA,MAAA,EACP;AACF,WAAK,KAAM,MAAM,SAAS,EAAE,eAAeF,GAAQ;AAAA,IACrD,CAAC,GAGD,KAAK,IAAI,GAAGT,EAAI,OAAO,sBAAsB,CAACQ,GAAYH,MAAc;AACtE,YAAMO,IAASP,EAAK,YAAY,IAAI,CAACQ,GAAYF,OAAiB;AAAA,QAChE,OAAOE,EAAM,QAAQA,EAAM,QAAQ,SAASF,IAAM,CAAC;AAAA,QACnD,UAAUE,EAAM,QAAQ;AAAA,QACxB,OAAOF;AAAA,MAAA,EACP;AACF,WAAK,KAAM,MAAM,SAAS;AAAA,QACxB,aAAaC;AAAA,QACb,mBAAmB,KAAK,IAAK;AAAA,MAAA,CAC9B;AAAA,IACH,CAAC,GAED,KAAK,IAAI,GAAGZ,EAAI,OAAO,gBAAgB,CAACQ,GAAYH,MAAc;AAAA,IAGlE,CAAC,GAED,KAAK,IAAI,GAAGL,EAAI,OAAO,OAAO,CAACQ,GAAYH,MAAc;AACvD,UAAIA,EAAK,OAAO;AAEd,cAAMS,IAAMT,EAAK,WAAW;AAC5B,aAAK,KAAM,aAAaS,GAAK,EAAI;AAAA,MAGnC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU;AACR,IAAI,KAAK,QACP,KAAK,IAAI,QAAA,GACT,KAAK,MAAM;AAAA,EAEf;AACF;"}
|
|
1
|
+
{"version":3,"file":"hls.es.js","sources":["../plugins/HlsPlugin.ts"],"sourcesContent":["\r\nimport { StrataCore, IPlugin } from '../core/StrataCore';\r\nimport * as HlsModule from 'hls.js';\r\n\r\n// Handle environment differences where Hls might be a default export or module export\r\nconst Hls = (HlsModule as any).default || HlsModule;\r\n\r\nexport class HlsPlugin implements IPlugin {\r\n name = 'HlsPlugin';\r\n private hls: any = null;\r\n private core: StrataCore | null = null;\r\n\r\n init(core: StrataCore) {\r\n this.core = core;\r\n\r\n // Listen for load requests\r\n this.core.events.on('load', (data: { url: string, type: string }) => {\r\n // Only proceed if type matches HLS\r\n if (data.type === 'hls' || data.url.includes('.m3u8')) {\r\n if (Hls.isSupported()) {\r\n this.loadHls(data.url);\r\n } else if (this.core!.video.canPlayType('application/vnd.apple.mpegurl')) {\r\n // Native HLS fallback (Safari) - Core sets src, we do nothing\r\n // Core already handles setting video.src if standard\r\n this.core!.video.src = data.url;\r\n }\r\n } else {\r\n // If we had an active HLS instance but switched to MP4, destroy it\r\n if (this.hls) {\r\n this.hls.destroy();\r\n this.hls = null;\r\n }\r\n }\r\n });\r\n\r\n // Listen for quality changes from UI\r\n this.core.events.on('quality-request', (index: number) => {\r\n if (this.hls) {\r\n this.hls.currentLevel = index;\r\n }\r\n });\r\n\r\n // Listen for audio track changes from UI\r\n this.core.events.on('audio-track-request', (index: number) => {\r\n if (this.hls) {\r\n this.hls.audioTrack = index;\r\n }\r\n });\r\n }\r\n\r\n private loadHls(url: string) {\r\n if (this.hls) {\r\n this.hls.destroy();\r\n }\r\n\r\n this.hls = new Hls({\r\n autoStartLoad: true,\r\n startLevel: -1, // Auto\r\n capLevelToPlayerSize: true, // Performance opt\r\n });\r\n\r\n this.hls.loadSource(url);\r\n this.hls.attachMedia(this.core!.video);\r\n\r\n this.hls.on(Hls.Events.MANIFEST_PARSED, (event: any, data: any) => {\r\n const levels = data.levels.map((lvl: any, idx: number) => ({\r\n height: lvl.height,\r\n bitrate: lvl.bitrate,\r\n index: idx\r\n }));\r\n this.core!.store.setState({ qualityLevels: levels });\r\n });\r\n\r\n // Handle Audio Tracks\r\n this.hls.on(Hls.Events.AUDIO_TRACKS_UPDATED, (event: any, data: any) => {\r\n const tracks = data.audioTracks.map((track: any, idx: number) => ({\r\n label: track.name || track.lang || `Audio ${idx + 1}`,\r\n language: track.lang || '',\r\n index: idx\r\n }));\r\n this.core!.store.setState({\r\n audioTracks: tracks,\r\n currentAudioTrack: this.hls!.audioTrack\r\n });\r\n });\r\n\r\n this.hls.on(Hls.Events.LEVEL_SWITCHED, (event: any, data: any) => {\r\n // Update current quality only if in auto mode to show what's playing\r\n // If manual, state is already set\r\n });\r\n\r\n this.hls.on(Hls.Events.ERROR, (event: any, data: any) => {\r\n if (data.fatal) {\r\n // Pass fatal errors to Core to handle the retry loop visibly\r\n const msg = data.details || 'Unknown HLS Error';\r\n this.core!.triggerError(msg, true);\r\n\r\n // Cleanup if needed, but core.load() will eventually destroy and re-init this plugin\r\n }\r\n });\r\n }\r\n\r\n destroy() {\r\n if (this.hls) {\r\n this.hls.destroy();\r\n this.hls = null;\r\n }\r\n }\r\n}\r\n"],"names":["Hls","HlsModule","HlsPlugin","__publicField","core","data","index","url","event","levels","lvl","idx","tracks","track","msg"],"mappings":";;;;AAKA,MAAMA,IAAOC,EAAkB,WAAWA;AAEnC,MAAMC,EAA6B;AAAA,EAAnC;AACL,IAAAC,EAAA,cAAO;AACC,IAAAA,EAAA,aAAW;AACX,IAAAA,EAAA,cAA0B;AAAA;AAAA,EAElC,KAAKC,GAAkB;AACrB,SAAK,OAAOA,GAGZ,KAAK,KAAK,OAAO,GAAG,QAAQ,CAACC,MAAwC;AAEnE,MAAIA,EAAK,SAAS,SAASA,EAAK,IAAI,SAAS,OAAO,IAC9CL,EAAI,gBACN,KAAK,QAAQK,EAAK,GAAG,IACZ,KAAK,KAAM,MAAM,YAAY,+BAA+B,MAGrE,KAAK,KAAM,MAAM,MAAMA,EAAK,OAI1B,KAAK,QACP,KAAK,IAAI,QAAA,GACT,KAAK,MAAM;AAAA,IAGjB,CAAC,GAGD,KAAK,KAAK,OAAO,GAAG,mBAAmB,CAACC,MAAkB;AACxD,MAAI,KAAK,QACP,KAAK,IAAI,eAAeA;AAAA,IAE5B,CAAC,GAGD,KAAK,KAAK,OAAO,GAAG,uBAAuB,CAACA,MAAkB;AAC5D,MAAI,KAAK,QACP,KAAK,IAAI,aAAaA;AAAA,IAE1B,CAAC;AAAA,EACH;AAAA,EAEQ,QAAQC,GAAa;AAC3B,IAAI,KAAK,OACP,KAAK,IAAI,QAAA,GAGX,KAAK,MAAM,IAAIP,EAAI;AAAA,MACjB,eAAe;AAAA,MACf,YAAY;AAAA;AAAA,MACZ,sBAAsB;AAAA;AAAA,IAAA,CACvB,GAED,KAAK,IAAI,WAAWO,CAAG,GACvB,KAAK,IAAI,YAAY,KAAK,KAAM,KAAK,GAErC,KAAK,IAAI,GAAGP,EAAI,OAAO,iBAAiB,CAACQ,GAAYH,MAAc;AACjE,YAAMI,IAASJ,EAAK,OAAO,IAAI,CAACK,GAAUC,OAAiB;AAAA,QACzD,QAAQD,EAAI;AAAA,QACZ,SAASA,EAAI;AAAA,QACb,OAAOC;AAAA,MAAA,EACP;AACF,WAAK,KAAM,MAAM,SAAS,EAAE,eAAeF,GAAQ;AAAA,IACrD,CAAC,GAGD,KAAK,IAAI,GAAGT,EAAI,OAAO,sBAAsB,CAACQ,GAAYH,MAAc;AACtE,YAAMO,IAASP,EAAK,YAAY,IAAI,CAACQ,GAAYF,OAAiB;AAAA,QAChE,OAAOE,EAAM,QAAQA,EAAM,QAAQ,SAASF,IAAM,CAAC;AAAA,QACnD,UAAUE,EAAM,QAAQ;AAAA,QACxB,OAAOF;AAAA,MAAA,EACP;AACF,WAAK,KAAM,MAAM,SAAS;AAAA,QACxB,aAAaC;AAAA,QACb,mBAAmB,KAAK,IAAK;AAAA,MAAA,CAC9B;AAAA,IACH,CAAC,GAED,KAAK,IAAI,GAAGZ,EAAI,OAAO,gBAAgB,CAACQ,GAAYH,MAAc;AAAA,IAGlE,CAAC,GAED,KAAK,IAAI,GAAGL,EAAI,OAAO,OAAO,CAACQ,GAAYH,MAAc;AACvD,UAAIA,EAAK,OAAO;AAEd,cAAMS,IAAMT,EAAK,WAAW;AAC5B,aAAK,KAAM,aAAaS,GAAK,EAAI;AAAA,MAGnC;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,UAAU;AACR,IAAI,KAAK,QACP,KAAK,IAAI,QAAA,GACT,KAAK,MAAM;AAAA,EAEf;AACF;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { default as default_2 } from 'react';
|
|
2
2
|
import { JSX } from 'react/jsx-runtime';
|
|
3
3
|
|
|
4
|
-
declare interface ContextMenuItem {
|
|
4
|
+
export declare interface ContextMenuItem {
|
|
5
5
|
html?: string | default_2.ReactNode;
|
|
6
6
|
disabled?: boolean;
|
|
7
7
|
icon?: string | default_2.ReactNode;
|
|
@@ -13,7 +13,7 @@ declare interface ContextMenuItem {
|
|
|
13
13
|
isLabel?: boolean;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
declare interface ControlItem {
|
|
16
|
+
export declare interface ControlItem {
|
|
17
17
|
id?: string;
|
|
18
18
|
position: 'left' | 'right' | 'center';
|
|
19
19
|
index: number;
|
|
@@ -42,14 +42,15 @@ declare interface Highlight_2 {
|
|
|
42
42
|
time: number;
|
|
43
43
|
text: string;
|
|
44
44
|
}
|
|
45
|
+
export { Highlight_2 as Highlight }
|
|
45
46
|
|
|
46
|
-
declare interface IPlugin {
|
|
47
|
+
export declare interface IPlugin {
|
|
47
48
|
name: string;
|
|
48
49
|
init(core: StrataCore): void;
|
|
49
50
|
destroy?(): void;
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
declare interface LayerConfig {
|
|
53
|
+
export declare interface LayerConfig {
|
|
53
54
|
name?: string;
|
|
54
55
|
html: string | default_2.ReactNode;
|
|
55
56
|
style?: default_2.CSSProperties;
|
|
@@ -79,6 +80,7 @@ declare interface Notification_2 {
|
|
|
79
80
|
duration?: number;
|
|
80
81
|
progress?: number;
|
|
81
82
|
}
|
|
83
|
+
export { Notification_2 as Notification }
|
|
82
84
|
|
|
83
85
|
export declare interface PlayerSource {
|
|
84
86
|
url: string;
|
|
@@ -142,9 +144,9 @@ export declare interface PlayerState {
|
|
|
142
144
|
controlsVisible: boolean;
|
|
143
145
|
}
|
|
144
146
|
|
|
145
|
-
declare type PlayerTheme = 'default' | 'pixel' | 'game' | 'hacker';
|
|
147
|
+
export declare type PlayerTheme = 'default' | 'pixel' | 'game' | 'hacker';
|
|
146
148
|
|
|
147
|
-
declare interface SettingItem {
|
|
149
|
+
export declare interface SettingItem {
|
|
148
150
|
id?: string;
|
|
149
151
|
html: string | default_2.ReactNode;
|
|
150
152
|
icon?: string | default_2.ReactNode;
|
|
@@ -309,7 +311,7 @@ declare interface StrataPlayerProps extends StrataConfig {
|
|
|
309
311
|
onGetInstance?: (core: StrataCore) => void;
|
|
310
312
|
}
|
|
311
313
|
|
|
312
|
-
declare interface SubtitleSettings {
|
|
314
|
+
export declare interface SubtitleSettings {
|
|
313
315
|
useNative: boolean;
|
|
314
316
|
fixCapitalization: boolean;
|
|
315
317
|
backgroundOpacity: number;
|