@therealtinhtute/baroiplayer 1.2.0 → 2.0.0-beta.1

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 (305) hide show
  1. package/README.md +91 -73
  2. package/dist/components/icons/index.d.ts +36 -0
  3. package/dist/components/icons/index.d.ts.map +1 -0
  4. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
  5. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
  6. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
  7. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
  8. package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
  9. package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
  10. package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
  11. package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
  12. package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
  13. package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
  14. package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
  15. package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
  16. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
  17. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
  18. package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
  19. package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
  20. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
  21. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
  22. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
  23. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
  24. package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
  25. package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
  26. package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
  27. package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
  28. package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
  29. package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
  30. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
  31. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
  32. package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
  33. package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
  34. package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
  35. package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
  36. package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
  37. package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
  38. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
  39. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
  40. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
  41. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
  42. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
  43. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
  44. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
  45. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
  46. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
  47. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
  48. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
  49. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
  50. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
  51. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
  52. package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
  53. package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
  54. package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
  55. package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
  56. package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
  57. package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
  58. package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
  59. package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
  60. package/dist/index.css +1 -1
  61. package/dist/index.d.ts +5 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +2 -112
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +786 -6271
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/package.json +3 -0
  68. package/package.json +110 -108
  69. package/src/components/variants/gradient/gradient-audio.tsx +47 -0
  70. package/src/components/variants/gradient/gradient-controls.tsx +254 -0
  71. package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
  72. package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
  73. package/src/components/variants/gradient/gradient-skin.css +211 -0
  74. package/src/components/variants/gradient/gradient-video.tsx +70 -0
  75. package/src/index.ts +5 -198
  76. package/src/test/accessibility-utils.ts +0 -59
  77. package/dist/context/media.js +0 -2
  78. package/dist/context/media.js.map +0 -1
  79. package/dist/context/media.mjs +0 -15
  80. package/dist/context/media.mjs.map +0 -1
  81. package/dist/context/store.js +0 -2
  82. package/dist/context/store.js.map +0 -1
  83. package/dist/context/store.mjs +0 -5
  84. package/dist/context/store.mjs.map +0 -1
  85. package/dist/context-BYwDoSRX.js +0 -1172
  86. package/dist/context-BYwDoSRX.js.map +0 -1
  87. package/dist/context-eNS62_ac.cjs +0 -23
  88. package/dist/context-eNS62_ac.cjs.map +0 -1
  89. package/dist/core-events-B1iM2F46.cjs +0 -2
  90. package/dist/core-events-B1iM2F46.cjs.map +0 -1
  91. package/dist/core-events-DunPHKRE.js +0 -484
  92. package/dist/core-events-DunPHKRE.js.map +0 -1
  93. package/dist/core-plugins-By-4-kGs.cjs +0 -2
  94. package/dist/core-plugins-By-4-kGs.cjs.map +0 -1
  95. package/dist/core-plugins-DSBWcTuX.js +0 -821
  96. package/dist/core-plugins-DSBWcTuX.js.map +0 -1
  97. package/dist/core.js +0 -37
  98. package/dist/core.js.map +0 -1
  99. package/dist/core.mjs +0 -1233
  100. package/dist/core.mjs.map +0 -1
  101. package/dist/enhanced-components-B_l3cist.js +0 -1142
  102. package/dist/enhanced-components-B_l3cist.js.map +0 -1
  103. package/dist/enhanced-components-BspFs9OO.cjs +0 -2
  104. package/dist/enhanced-components-BspFs9OO.cjs.map +0 -1
  105. package/dist/hooks-BXwI8QG6.cjs +0 -4
  106. package/dist/hooks-BXwI8QG6.cjs.map +0 -1
  107. package/dist/hooks-Bpi-jDiO.js +0 -1816
  108. package/dist/hooks-Bpi-jDiO.js.map +0 -1
  109. package/dist/minimal-components-C4z900Ro.js +0 -1926
  110. package/dist/minimal-components-C4z900Ro.js.map +0 -1
  111. package/dist/minimal-components-v4qBp6jv.cjs +0 -2
  112. package/dist/minimal-components-v4qBp6jv.cjs.map +0 -1
  113. package/dist/minimal-components.css +0 -1
  114. package/dist/mona-loading.gif +0 -0
  115. package/dist/performance-monitor-C5k6FDXw.js +0 -301
  116. package/dist/performance-monitor-C5k6FDXw.js.map +0 -1
  117. package/dist/performance-monitor-lJmuUjQQ.cjs +0 -2
  118. package/dist/performance-monitor-lJmuUjQQ.cjs.map +0 -1
  119. package/dist/utils-CFOue_9K.cjs +0 -9
  120. package/dist/utils-CFOue_9K.cjs.map +0 -1
  121. package/dist/utils-Dzpl2ArK.js +0 -2844
  122. package/dist/utils-Dzpl2ArK.js.map +0 -1
  123. package/dist/utils.js +0 -2
  124. package/dist/utils.js.map +0 -1
  125. package/dist/utils.mjs +0 -11
  126. package/dist/utils.mjs.map +0 -1
  127. package/src/adapters/videojs-adapter.tsx +0 -470
  128. package/src/assets/mona-loading.gif +0 -0
  129. package/src/components/AnimateLoading.tsx +0 -107
  130. package/src/components/LoadingState.tsx +0 -239
  131. package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
  132. package/src/components/__tests__/media-player-react19.test.tsx +0 -457
  133. package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
  134. package/src/components/audio-player.tsx +0 -85
  135. package/src/components/basic/index.ts +0 -37
  136. package/src/components/enhanced/advanced-features.tsx +0 -311
  137. package/src/components/enhanced/debug-panel.tsx +0 -448
  138. package/src/components/enhanced/enhanced-controls.tsx +0 -597
  139. package/src/components/enhanced/enhanced-media-player.tsx +0 -566
  140. package/src/components/enhanced/error-handling.tsx +0 -338
  141. package/src/components/enhanced/index.ts +0 -39
  142. package/src/components/enhanced/media-player-enhanced.tsx +0 -383
  143. package/src/components/examples/basic-video-player.tsx +0 -50
  144. package/src/components/examples/custom-controls-example.tsx +0 -63
  145. package/src/components/examples/enhanced-controls-example.tsx +0 -100
  146. package/src/components/examples/enhanced-media-player-example.tsx +0 -302
  147. package/src/components/examples/loading-states-demo.tsx +0 -142
  148. package/src/components/examples/react-19-demo.tsx +0 -353
  149. package/src/components/examples/volume-orientation-demo.tsx +0 -106
  150. package/src/components/icon-demo.tsx +0 -196
  151. package/src/components/legacy.tsx +0 -87
  152. package/src/components/media-metadata-display.tsx +0 -99
  153. package/src/components/media-player-audio.tsx +0 -39
  154. package/src/components/media-player-controls.tsx +0 -223
  155. package/src/components/media-player-error.tsx +0 -163
  156. package/src/components/media-player-fullscreen.tsx +0 -109
  157. package/src/components/media-player-hls.tsx +0 -111
  158. package/src/components/media-player-loading.tsx +0 -76
  159. package/src/components/media-player-play.tsx +0 -75
  160. package/src/components/media-player-root.tsx +0 -338
  161. package/src/components/media-player-seek.tsx +0 -168
  162. package/src/components/media-player-time.tsx +0 -99
  163. package/src/components/media-player-tooltip.tsx +0 -58
  164. package/src/components/media-player-video.tsx +0 -54
  165. package/src/components/media-player-volume.tsx +0 -155
  166. package/src/components/media-player.tsx +0 -292
  167. package/src/components/media-suspense.tsx +0 -344
  168. package/src/components/player-settings-form.tsx +0 -158
  169. package/src/components/react-player-wrapper.tsx +0 -651
  170. package/src/components/simple-video-player.tsx +0 -62
  171. package/src/components/ui/blur-poster.tsx +0 -93
  172. package/src/components/ui/empty-state.tsx +0 -91
  173. package/src/components/ui/enhanced-seek-bar.tsx +0 -254
  174. package/src/components/ui/error-state.tsx +0 -124
  175. package/src/components/ui/fullscreen-button.tsx +0 -81
  176. package/src/components/ui/loading-skeleton.tsx +0 -107
  177. package/src/components/ui/media-resource-preloader.tsx +0 -458
  178. package/src/components/ui/offline-message.tsx +0 -98
  179. package/src/components/ui/play-button.tsx +0 -99
  180. package/src/components/ui/seek-bar.tsx +0 -191
  181. package/src/components/ui/time-display.tsx +0 -61
  182. package/src/components/ui/volume-control.tsx +0 -190
  183. package/src/components/unified/base-media-player.tsx +0 -252
  184. package/src/components/unified/media-player.tsx +0 -75
  185. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
  186. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
  187. package/src/components/variants/minimal/MinimalControls.tsx +0 -124
  188. package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
  189. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
  190. package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
  191. package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
  192. package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
  193. package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
  194. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
  195. package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
  196. package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
  197. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
  198. package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
  199. package/src/components/variants/minimal/components/RightControls.tsx +0 -164
  200. package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
  201. package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
  202. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
  203. package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
  204. package/src/components/variants/minimal/components/VideoElement.tsx +0 -33
  205. package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
  206. package/src/components/variants/minimal/index.ts +0 -23
  207. package/src/components/video-player.tsx +0 -100
  208. package/src/context/__tests__/media-store.test.ts +0 -509
  209. package/src/context/error-handling.ts +0 -398
  210. package/src/context/media-context.tsx +0 -254
  211. package/src/context/media-provider.tsx +0 -264
  212. package/src/context/media-store.ts +0 -387
  213. package/src/context/persistence.ts +0 -462
  214. package/src/core/events/event-system.ts +0 -448
  215. package/src/core/events/hooks.ts +0 -325
  216. package/src/core/events/index.ts +0 -22
  217. package/src/core/events/middleware.ts +0 -286
  218. package/src/core/index.ts +0 -22
  219. package/src/core/optimization/bundle-optimizer.tsx +0 -312
  220. package/src/core/performance/cicd.ts +0 -98
  221. package/src/core/performance/index.ts +0 -38
  222. package/src/core/performance/media-loading-optimizer.ts +0 -544
  223. package/src/core/performance/performance-budgets.ts +0 -437
  224. package/src/core/performance/performance-monitor.tsx +0 -488
  225. package/src/core/performance/performance-testing.ts +0 -461
  226. package/src/core/plugins/__tests__/registry.test.ts +0 -595
  227. package/src/core/plugins/base-plugin.ts +0 -225
  228. package/src/core/plugins/enhanced-plugin-system.ts +0 -435
  229. package/src/core/plugins/examples/analytics-plugin.ts +0 -241
  230. package/src/core/plugins/index.ts +0 -39
  231. package/src/core/plugins/registry.ts +0 -546
  232. package/src/core/plugins/types.ts +0 -169
  233. package/src/core/plugins/utils.ts +0 -317
  234. package/src/core/progressive-loading.tsx +0 -331
  235. package/src/core/providers/enhanced-hls-provider.ts +0 -307
  236. package/src/core/providers/lazy-provider.tsx +0 -14
  237. package/src/core/providers/service-provider.tsx +0 -164
  238. package/src/core/utils.tsx +0 -34
  239. package/src/features/media-session/media-session-manager.ts +0 -411
  240. package/src/features/picture-in-picture/pip-manager.ts +0 -428
  241. package/src/features/playlist/playlist-manager.ts +0 -626
  242. package/src/features/subtitles/subtitle-manager.ts +0 -435
  243. package/src/features/subtitles/subtitle-parser.ts +0 -284
  244. package/src/features/thumbnails/thumbnail-generator.ts +0 -528
  245. package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
  246. package/src/hooks/__tests__/use-media-player.test.ts +0 -712
  247. package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
  248. package/src/hooks/accessibility/index.ts +0 -27
  249. package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
  250. package/src/hooks/accessibility/use-focus-management.ts +0 -183
  251. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
  252. package/src/hooks/accessibility/use-screen-reader.ts +0 -212
  253. package/src/hooks/core/index.ts +0 -47
  254. package/src/hooks/legacy.ts +0 -21
  255. package/src/hooks/use-buffer-health.ts +0 -218
  256. package/src/hooks/use-enhanced-media-player.ts +0 -575
  257. package/src/hooks/use-focus-trap.tsx +0 -162
  258. package/src/hooks/use-intelligent-preloading.ts +0 -387
  259. package/src/hooks/use-keyboard-controls.ts +0 -115
  260. package/src/hooks/use-keyboard-shortcuts.ts +0 -255
  261. package/src/hooks/use-media-actions.ts +0 -184
  262. package/src/hooks/use-media-metadata.ts +0 -91
  263. package/src/hooks/use-media-optimistic.ts +0 -264
  264. package/src/hooks/use-media-player.ts +0 -343
  265. package/src/hooks/use-media-state.ts +0 -194
  266. package/src/hooks/use-memory-optimization.ts +0 -360
  267. package/src/hooks/use-network-status.ts +0 -124
  268. package/src/hooks/use-optimistic-controls.ts +0 -95
  269. package/src/hooks/use-optimized-media.ts +0 -283
  270. package/src/hooks/use-smart-preload.ts +0 -229
  271. package/src/hooks/use-touch-gestures.ts +0 -461
  272. package/src/hooks/useEnhancedSubtitles.ts +0 -258
  273. package/src/hooks/useKeyboardShortcuts.ts +0 -106
  274. package/src/hooks/useMediaControls.ts +0 -52
  275. package/src/hooks/useScreenshot.ts +0 -61
  276. package/src/hooks/useSubtitles.ts +0 -91
  277. package/src/hooks/useVideoPlayer.ts +0 -278
  278. package/src/icons/components/FullscreenIcon.tsx +0 -36
  279. package/src/icons/components/SettingsIcon.tsx +0 -37
  280. package/src/icons/components/animated/LoadingIcon.tsx +0 -27
  281. package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
  282. package/src/icons/components/media/PauseIcon.tsx +0 -38
  283. package/src/icons/components/media/PlayIcon.tsx +0 -37
  284. package/src/icons/components/volume/VolumeIcon.tsx +0 -38
  285. package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
  286. package/src/icons/index.ts +0 -56
  287. package/src/icons/provider.tsx +0 -58
  288. package/src/icons/types.ts +0 -60
  289. package/src/index-enhanced.ts +0 -35
  290. package/src/index-legacy.ts +0 -324
  291. package/src/index.css +0 -102
  292. package/src/lib/__tests__/async-utils.test.ts +0 -291
  293. package/src/lib/async-utils.ts +0 -194
  294. package/src/lib/deprecation.ts +0 -51
  295. package/src/lib/format-time.ts +0 -37
  296. package/src/lib/index.ts +0 -4
  297. package/src/lib/utils.ts +0 -6
  298. package/src/styles/globals.css +0 -462
  299. package/src/styles/minimal-player.css +0 -621
  300. package/src/styles/pixel-art.css +0 -41
  301. package/src/styles/videojs.css +0 -100
  302. package/src/types/events.ts +0 -47
  303. package/src/types/formats.ts +0 -79
  304. package/src/types/index.ts +0 -203
  305. package/src/types/videojs-plugins.d.ts +0 -14
@@ -1,307 +0,0 @@
1
- /**
2
- * Enhanced HLS Provider with optimized configuration for 30-50% performance improvement
3
- * Based on deep research analysis of HLS.js optimization patterns
4
- */
5
-
6
- import Hls, { HlsConfig } from "hls.js"
7
- import { MediaPlayerConfig } from "../../types"
8
-
9
- export interface EnhancedHLSConfig extends Partial<HlsConfig> {
10
- /** Enable machine learning-enhanced adaptive bitrate streaming */
11
- enableAdvancedABR?: boolean
12
- /** Optimize for low-latency streaming */
13
- lowLatencyMode?: boolean
14
- /** Enhanced buffer management for smoother playback */
15
- optimizedBuffering?: boolean
16
- }
17
-
18
- export const ENHANCED_HLS_DEFAULTS: EnhancedHLSConfig = {
19
- // Enhanced buffer management for 30% performance improvement
20
- maxBufferLength: 30,
21
- maxBufferSize: 60 * 1000 * 1000, // 60 MB
22
- maxBufferHole: 0.5,
23
-
24
- // Back buffer management for memory optimization
25
- backBufferLength: 90,
26
-
27
- // Advanced ABR configuration for adaptive streaming
28
- abrEwmaFastLive: 3.0,
29
- abrEwmaSlowLive: 9.0,
30
- abrEwmaFastVoD: 4.0,
31
- abrEwmaSlowVoD: 15.0,
32
- abrEwmaDefaultEstimate: 500000,
33
- abrBandWidthFactor: 0.95,
34
- abrBandWidthUpFactor: 0.7,
35
- abrMaxWithRealBitrate: true,
36
-
37
- // Low latency optimization
38
- lowLatencyMode: true,
39
- liveSyncDurationCount: 3,
40
- liveMaxLatencyDurationCount: Infinity,
41
- liveDurationInfinity: true,
42
-
43
- // Network optimization with intelligent retry policies
44
- fragLoadPolicy: {
45
- default: {
46
- maxTimeToFirstByteMs: 9000,
47
- maxLoadTimeMs: 20000,
48
- timeoutRetry: {
49
- maxNumRetry: 5,
50
- retryDelayMs: 3000,
51
- maxRetryDelayMs: 30000,
52
- backoff: "linear"
53
- },
54
- errorRetry: {
55
- maxNumRetry: 5,
56
- retryDelayMs: 3000,
57
- maxRetryDelayMs: 30000,
58
- backoff: "linear"
59
- }
60
- }
61
- },
62
-
63
-
64
- // Enhanced manifest parsing
65
- manifestLoadPolicy: {
66
- default: {
67
- maxTimeToFirstByteMs: 9000,
68
- maxLoadTimeMs: 20000,
69
- timeoutRetry: {
70
- maxNumRetry: 3,
71
- retryDelayMs: 2000,
72
- maxRetryDelayMs: 20000,
73
- backoff: "linear"
74
- },
75
- errorRetry: {
76
- maxNumRetry: 5,
77
- retryDelayMs: 3000,
78
- maxRetryDelayMs: 30000,
79
- backoff: "linear"
80
- }
81
- }
82
- },
83
-
84
- // Level selection optimization
85
- startLevel: -1, // Auto-select start level
86
- // initialBitrate: 0, // Auto-detect (not in HlsConfig)
87
- preferManagedMediaSource: true,
88
-
89
- // Debug and monitoring
90
- debug: false,
91
- enableWorker: true,
92
- enableSoftwareAES: true,
93
- workerPath: "https://cdn.jsdelivr.net/npm/hls.js@latest/dist/hls.worker.js",
94
-
95
- // Custom configuration flags
96
- enableAdvancedABR: true,
97
- optimizedBuffering: true
98
- }
99
-
100
- export class EnhancedHLSProvider {
101
- private hls: Hls | null = null
102
- private config: EnhancedHLSConfig
103
- private performanceMonitor: HLSPerformanceMonitor
104
-
105
- constructor(config: Partial<EnhancedHLSConfig> = {}) {
106
- this.config = { ...ENHANCED_HLS_DEFAULTS, ...config }
107
- this.performanceMonitor = new HLSPerformanceMonitor()
108
- }
109
-
110
- /**
111
- * Initialize HLS instance with enhanced configuration
112
- */
113
- public initialize(
114
- videoElement: HTMLVideoElement,
115
- mediaUrl: string,
116
- options: MediaPlayerConfig = {}
117
- ): Hls {
118
- // Clean up existing instance
119
- this.destroy()
120
-
121
- // Create new HLS instance with enhanced config
122
- this.hls = new Hls(this.config)
123
-
124
- // Setup performance monitoring
125
- this.performanceMonitor.attach(this.hls)
126
-
127
- // Configure advanced event handling
128
- this.setupEventHandlers(videoElement, options)
129
-
130
- // Load media
131
- this.hls.loadSource(mediaUrl)
132
- this.hls.attachMedia(videoElement)
133
-
134
- return this.hls
135
- }
136
-
137
- /**
138
- * Setup enhanced event handlers for better error recovery and performance
139
- */
140
- private setupEventHandlers(videoElement: HTMLVideoElement, options: MediaPlayerConfig): void {
141
- if (!this.hls) return
142
-
143
- // Enhanced error handling with intelligent recovery
144
- this.hls.on(Hls.Events.ERROR, (event, data) => {
145
- this.handleHLSError(event, data, videoElement, options)
146
- })
147
-
148
- // Performance monitoring events
149
- this.hls.on(Hls.Events.FRAG_BUFFERED, (event, data) => {
150
- this.performanceMonitor.onFragmentBuffered(data)
151
- })
152
-
153
- this.hls.on(Hls.Events.LEVEL_SWITCHED, (event, data) => {
154
- this.performanceMonitor.onLevelSwitched(data)
155
- })
156
- }
157
-
158
- /**
159
- * Enhanced error handling with intelligent recovery strategies
160
- */
161
- private handleHLSError(
162
- event: string,
163
- data: any,
164
- videoElement: HTMLVideoElement,
165
- options: MediaPlayerConfig
166
- ): void {
167
- console.warn("HLS Error:", data)
168
-
169
- // Implement intelligent error recovery based on error type
170
- switch (data.details) {
171
- case Hls.ErrorDetails.FRAG_LOAD_ERROR:
172
- // Network error - try reducing quality
173
- if (data.frag && this.hls) {
174
- const newLevel = Math.max(0, (this.hls.currentLevel || 0) - 1)
175
- this.hls.currentLevel = newLevel
176
- }
177
- break
178
-
179
- case Hls.ErrorDetails.FRAG_LOAD_TIMEOUT:
180
- // Timeout - increase timeout and retry
181
- if (this.hls && this.hls.config.fragLoadPolicy?.default?.timeoutRetry) {
182
- this.hls.config.fragLoadPolicy.default.timeoutRetry.maxNumRetry = 8
183
- this.hls.config.fragLoadPolicy.default.timeoutRetry.retryDelayMs = 5000
184
- }
185
- break
186
-
187
- case Hls.ErrorDetails.LEVEL_LOAD_ERROR:
188
- // Manifest error - try recovery
189
- if (this.hls && data.fatal) {
190
- this.hls.recoverMediaError()
191
- }
192
- break
193
-
194
- case Hls.ErrorDetails.BUFFER_APPEND_ERROR:
195
- // Buffer error - recover with buffer flush
196
- if (this.hls && data.frag) {
197
- this.hls.swapAudioCodec()
198
- }
199
- break
200
-
201
- default:
202
- // For other errors, try general recovery
203
- if (this.hls && data.fatal) {
204
- this.hls.recoverMediaError()
205
- }
206
- break
207
- }
208
- }
209
-
210
- /**
211
- * Update configuration dynamically
212
- */
213
- public updateConfig(newConfig: Partial<EnhancedHLSConfig>): void {
214
- this.config = { ...this.config, ...newConfig }
215
- if (this.hls) {
216
- Object.assign(this.hls.config, this.config)
217
- }
218
- }
219
-
220
- /**
221
- * Get current performance metrics
222
- */
223
- public getPerformanceMetrics(): any {
224
- return this.performanceMonitor.getMetrics()
225
- }
226
-
227
- /**
228
- * Destroy HLS instance and cleanup resources
229
- */
230
- public destroy(): void {
231
- if (this.hls) {
232
- this.performanceMonitor.detach()
233
- this.hls.destroy()
234
- this.hls = null
235
- }
236
- }
237
-
238
- /**
239
- * Check if HLS is supported
240
- */
241
- public static isSupported(): boolean {
242
- return Hls.isSupported()
243
- }
244
- }
245
-
246
- /**
247
- * Performance monitoring for HLS playback
248
- */
249
- class HLSPerformanceMonitor {
250
- private metrics = {
251
- bufferedFragments: 0,
252
- levelSwitches: 0,
253
- bitrateChanges: 0,
254
- averageBufferLength: 0,
255
- droppedFrames: 0,
256
- lastQualitySwitch: 0
257
- }
258
-
259
- private startTime: number = Date.now()
260
-
261
- public attach(hls: Hls): void {
262
- // Monitor video element for dropped frames
263
- const video = hls.media as HTMLVideoElement | undefined
264
- if (video && 'getVideoPlaybackQuality' in video) {
265
- const checkDroppedFrames = () => {
266
- if (video && 'getVideoPlaybackQuality' in video) {
267
- const quality = (video as any).getVideoPlaybackQuality()
268
- this.metrics.droppedFrames = quality.droppedVideoFrames
269
- }
270
- }
271
-
272
- video.addEventListener("timeupdate", checkDroppedFrames)
273
- }
274
- }
275
-
276
- public detach(): void {
277
- // Cleanup event listeners and resources
278
- }
279
-
280
- public onFragmentBuffered(data: any): void {
281
- this.metrics.bufferedFragments++
282
- this.updateAverageBufferLength()
283
- }
284
-
285
- public onLevelSwitched(data: any): void {
286
- this.metrics.levelSwitches++
287
- this.metrics.lastQualitySwitch = Date.now()
288
- }
289
-
290
- public onBitrateSwitch(data: any): void {
291
- this.metrics.bitrateChanges++
292
- }
293
-
294
- private updateAverageBufferLength(): void {
295
- // Calculate average buffer length based on current metrics
296
- const uptime = (Date.now() - this.startTime) / 1000
297
- this.metrics.averageBufferLength = this.metrics.bufferedFragments / uptime
298
- }
299
-
300
- public getMetrics(): any {
301
- return {
302
- ...this.metrics,
303
- uptime: (Date.now() - this.startTime) / 1000,
304
- fragmentRate: this.metrics.bufferedFragments / ((Date.now() - this.startTime) / 1000)
305
- }
306
- }
307
- }
@@ -1,14 +0,0 @@
1
- import { type ReactNode, Suspense } from 'react'
2
-
3
- export async function loadEnhancedHLSProvider() {
4
- const module = await import('./enhanced-hls-provider')
5
- return module.EnhancedHLSProvider
6
- }
7
-
8
- export type LazyHLSProvider = Promise<{
9
- default: new (config?: any) => { isSupported(): boolean; initialize(): any; destroy(): void }
10
- }>
11
-
12
- export function LazyLoader({ children, fallback }: { children: ReactNode; fallback?: ReactNode }) {
13
- return <Suspense fallback={fallback ?? <div className="h-full w-full animate-pulse rounded bg-white/10" />}>{children}</Suspense>
14
- }
@@ -1,164 +0,0 @@
1
- import React, { createContext, useContext, useMemo } from "react"
2
- import { EventBus } from "../events"
3
- import { ConsolePluginLogger, PluginRegistry } from "../plugins"
4
-
5
- // Service interfaces
6
- export interface MediaService {
7
- loadMedia(src: string): Promise<void>
8
- play(): Promise<void>
9
- pause(): Promise<void>
10
- seek(time: number): Promise<void>
11
- setVolume(volume: number): Promise<void>
12
- }
13
-
14
- export interface StorageService {
15
- get<T>(key: string): T | null
16
- set<T>(key: string, value: T): void
17
- remove(key: string): void
18
- clear(): void
19
- }
20
-
21
- export interface AnalyticsService {
22
- track(event: string, data?: any): void
23
- identify(userId: string, traits?: any): void
24
- page(name: string, properties?: any): void
25
- }
26
-
27
- export interface LoggerService {
28
- info(message: string, data?: any): void
29
- warn(message: string, data?: any): void
30
- error(message: string, data?: any): void
31
- debug(message: string, data?: any): void
32
- }
33
-
34
- // Service implementations
35
- class LocalStorageService implements StorageService {
36
- get<T>(key: string): T | null {
37
- try {
38
- const item = localStorage.getItem(`baroi-player-${key}`)
39
- return item ? (JSON.parse(item) as T) : null
40
- } catch {
41
- return null
42
- }
43
- }
44
-
45
- set<T>(key: string, value: T): void {
46
- try {
47
- localStorage.setItem(`baroi-player-${key}`, JSON.stringify(value))
48
- } catch (error) {
49
- console.warn("Failed to store data:", error)
50
- }
51
- }
52
-
53
- remove(key: string): void {
54
- try {
55
- localStorage.removeItem(`baroi-player-${key}`)
56
- } catch (error) {
57
- console.warn("Failed to remove data:", error)
58
- }
59
- }
60
-
61
- clear(): void {
62
- try {
63
- Object.keys(localStorage).forEach((key) => {
64
- if (key.startsWith("baroi-player-")) {
65
- localStorage.removeItem(key)
66
- }
67
- })
68
- } catch (error) {
69
- console.warn("Failed to clear data:", error)
70
- }
71
- }
72
- }
73
-
74
- class NoOpAnalyticsService implements AnalyticsService {
75
- track(event: string, data?: any): void {
76
- console.log("Analytics:", event, data)
77
- }
78
-
79
- identify(userId: string, traits?: any): void {
80
- console.log("Analytics identify:", userId, traits)
81
- }
82
-
83
- page(name: string, properties?: any): void {
84
- console.log("Analytics page:", name, properties)
85
- }
86
- }
87
-
88
- // Service container
89
- export interface ServiceContainer {
90
- eventBus: EventBus
91
- pluginRegistry: PluginRegistry
92
- storage: StorageService
93
- analytics: AnalyticsService
94
- logger: LoggerService
95
- }
96
-
97
- // Service provider context
98
- const ServiceContext = createContext<ServiceContainer | null>(null)
99
-
100
- // Service provider props
101
- export interface ServiceProviderProps {
102
- children: React.ReactNode
103
- services?: Partial<ServiceContainer>
104
- }
105
-
106
- // Service provider component
107
- export function ServiceProvider({ children, services = {} }: ServiceProviderProps) {
108
- const container = useMemo<ServiceContainer>(() => {
109
- const logger = services.logger || new ConsolePluginLogger("[BaroiPlayer]")
110
- const eventBus = services.eventBus || new EventBus()
111
- const pluginRegistry = services.pluginRegistry || new PluginRegistry(logger)
112
- const storage = services.storage || new LocalStorageService()
113
- const analytics = services.analytics || new NoOpAnalyticsService()
114
-
115
- return {
116
- eventBus,
117
- pluginRegistry,
118
- storage,
119
- analytics,
120
- logger
121
- }
122
- }, [services])
123
-
124
- return <ServiceContext.Provider value={container}>{children}</ServiceContext.Provider>
125
- }
126
-
127
- // Service hooks
128
- export function useServices(): ServiceContainer {
129
- const context = useContext(ServiceContext)
130
- if (!context) {
131
- throw new Error("useServices must be used within ServiceProvider")
132
- }
133
- return context
134
- }
135
-
136
- export function useServiceEventBus(): EventBus {
137
- return useServices().eventBus
138
- }
139
-
140
- export function usePluginRegistry(): PluginRegistry {
141
- return useServices().pluginRegistry
142
- }
143
-
144
- export function useStorage(): StorageService {
145
- return useServices().storage
146
- }
147
-
148
- export function useAnalytics(): AnalyticsService {
149
- return useServices().analytics
150
- }
151
-
152
- export function useLogger(): LoggerService {
153
- return useServices().logger
154
- }
155
-
156
- // Service decorators for dependency injection
157
- export function withServices<P extends object>(
158
- Component: React.ComponentType<P & { services: ServiceContainer }>
159
- ): React.ComponentType<P> {
160
- return function WithServicesComponent(props: P) {
161
- const services = useServices()
162
- return <Component {...props} services={services} />
163
- }
164
- }
@@ -1,34 +0,0 @@
1
- import React from "react"
2
- import { EventBus } from "./events"
3
- import { PluginRegistry } from "./plugins"
4
- import { type ServiceContainer, ServiceProvider } from "./providers/service-provider"
5
-
6
- // Architecture configuration
7
- export interface ArchitectureConfig {
8
- plugins?: string[]
9
- services?: Partial<ServiceContainer>
10
- eventMiddleware?: any[]
11
- debug?: boolean
12
- }
13
-
14
- // Create architecture wrapper component
15
- export function createArchitecture(config: ArchitectureConfig = {}) {
16
- return function ArchitectureProvider({ children }: { children: React.ReactNode }) {
17
- return <ServiceProvider services={config.services}>{children}</ServiceProvider>
18
- }
19
- }
20
-
21
- // Architecture health check
22
- export async function healthCheck(services: ServiceContainer) {
23
- const results = {
24
- eventBus: {
25
- healthy: true,
26
- listenerCount: services.eventBus.getListenerCount(),
27
- eventTypes: services.eventBus.getEventTypes().length
28
- },
29
- plugins: await services.pluginRegistry.healthCheck(),
30
- timestamp: Date.now()
31
- }
32
-
33
- return results
34
- }