@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.
- package/README.md +91 -73
- package/dist/components/icons/index.d.ts +36 -0
- package/dist/components/icons/index.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
- package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
- package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
- package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
- package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
- package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
- package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
- package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -112
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +786 -6271
- package/dist/index.mjs.map +1 -1
- package/dist/package.json +3 -0
- package/package.json +110 -108
- package/src/components/variants/gradient/gradient-audio.tsx +47 -0
- package/src/components/variants/gradient/gradient-controls.tsx +254 -0
- package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
- package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
- package/src/components/variants/gradient/gradient-skin.css +211 -0
- package/src/components/variants/gradient/gradient-video.tsx +70 -0
- package/src/index.ts +5 -198
- package/src/test/accessibility-utils.ts +0 -59
- package/dist/context/media.js +0 -2
- package/dist/context/media.js.map +0 -1
- package/dist/context/media.mjs +0 -15
- package/dist/context/media.mjs.map +0 -1
- package/dist/context/store.js +0 -2
- package/dist/context/store.js.map +0 -1
- package/dist/context/store.mjs +0 -5
- package/dist/context/store.mjs.map +0 -1
- package/dist/context-BYwDoSRX.js +0 -1172
- package/dist/context-BYwDoSRX.js.map +0 -1
- package/dist/context-eNS62_ac.cjs +0 -23
- package/dist/context-eNS62_ac.cjs.map +0 -1
- package/dist/core-events-B1iM2F46.cjs +0 -2
- package/dist/core-events-B1iM2F46.cjs.map +0 -1
- package/dist/core-events-DunPHKRE.js +0 -484
- package/dist/core-events-DunPHKRE.js.map +0 -1
- package/dist/core-plugins-By-4-kGs.cjs +0 -2
- package/dist/core-plugins-By-4-kGs.cjs.map +0 -1
- package/dist/core-plugins-DSBWcTuX.js +0 -821
- package/dist/core-plugins-DSBWcTuX.js.map +0 -1
- package/dist/core.js +0 -37
- package/dist/core.js.map +0 -1
- package/dist/core.mjs +0 -1233
- package/dist/core.mjs.map +0 -1
- package/dist/enhanced-components-B_l3cist.js +0 -1142
- package/dist/enhanced-components-B_l3cist.js.map +0 -1
- package/dist/enhanced-components-BspFs9OO.cjs +0 -2
- package/dist/enhanced-components-BspFs9OO.cjs.map +0 -1
- package/dist/hooks-BXwI8QG6.cjs +0 -4
- package/dist/hooks-BXwI8QG6.cjs.map +0 -1
- package/dist/hooks-Bpi-jDiO.js +0 -1816
- package/dist/hooks-Bpi-jDiO.js.map +0 -1
- package/dist/minimal-components-C4z900Ro.js +0 -1926
- package/dist/minimal-components-C4z900Ro.js.map +0 -1
- package/dist/minimal-components-v4qBp6jv.cjs +0 -2
- package/dist/minimal-components-v4qBp6jv.cjs.map +0 -1
- package/dist/minimal-components.css +0 -1
- package/dist/mona-loading.gif +0 -0
- package/dist/performance-monitor-C5k6FDXw.js +0 -301
- package/dist/performance-monitor-C5k6FDXw.js.map +0 -1
- package/dist/performance-monitor-lJmuUjQQ.cjs +0 -2
- package/dist/performance-monitor-lJmuUjQQ.cjs.map +0 -1
- package/dist/utils-CFOue_9K.cjs +0 -9
- package/dist/utils-CFOue_9K.cjs.map +0 -1
- package/dist/utils-Dzpl2ArK.js +0 -2844
- package/dist/utils-Dzpl2ArK.js.map +0 -1
- package/dist/utils.js +0 -2
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -11
- package/dist/utils.mjs.map +0 -1
- package/src/adapters/videojs-adapter.tsx +0 -470
- package/src/assets/mona-loading.gif +0 -0
- package/src/components/AnimateLoading.tsx +0 -107
- package/src/components/LoadingState.tsx +0 -239
- package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
- package/src/components/__tests__/media-player-react19.test.tsx +0 -457
- package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
- package/src/components/audio-player.tsx +0 -85
- package/src/components/basic/index.ts +0 -37
- package/src/components/enhanced/advanced-features.tsx +0 -311
- package/src/components/enhanced/debug-panel.tsx +0 -448
- package/src/components/enhanced/enhanced-controls.tsx +0 -597
- package/src/components/enhanced/enhanced-media-player.tsx +0 -566
- package/src/components/enhanced/error-handling.tsx +0 -338
- package/src/components/enhanced/index.ts +0 -39
- package/src/components/enhanced/media-player-enhanced.tsx +0 -383
- package/src/components/examples/basic-video-player.tsx +0 -50
- package/src/components/examples/custom-controls-example.tsx +0 -63
- package/src/components/examples/enhanced-controls-example.tsx +0 -100
- package/src/components/examples/enhanced-media-player-example.tsx +0 -302
- package/src/components/examples/loading-states-demo.tsx +0 -142
- package/src/components/examples/react-19-demo.tsx +0 -353
- package/src/components/examples/volume-orientation-demo.tsx +0 -106
- package/src/components/icon-demo.tsx +0 -196
- package/src/components/legacy.tsx +0 -87
- package/src/components/media-metadata-display.tsx +0 -99
- package/src/components/media-player-audio.tsx +0 -39
- package/src/components/media-player-controls.tsx +0 -223
- package/src/components/media-player-error.tsx +0 -163
- package/src/components/media-player-fullscreen.tsx +0 -109
- package/src/components/media-player-hls.tsx +0 -111
- package/src/components/media-player-loading.tsx +0 -76
- package/src/components/media-player-play.tsx +0 -75
- package/src/components/media-player-root.tsx +0 -338
- package/src/components/media-player-seek.tsx +0 -168
- package/src/components/media-player-time.tsx +0 -99
- package/src/components/media-player-tooltip.tsx +0 -58
- package/src/components/media-player-video.tsx +0 -54
- package/src/components/media-player-volume.tsx +0 -155
- package/src/components/media-player.tsx +0 -292
- package/src/components/media-suspense.tsx +0 -344
- package/src/components/player-settings-form.tsx +0 -158
- package/src/components/react-player-wrapper.tsx +0 -651
- package/src/components/simple-video-player.tsx +0 -62
- package/src/components/ui/blur-poster.tsx +0 -93
- package/src/components/ui/empty-state.tsx +0 -91
- package/src/components/ui/enhanced-seek-bar.tsx +0 -254
- package/src/components/ui/error-state.tsx +0 -124
- package/src/components/ui/fullscreen-button.tsx +0 -81
- package/src/components/ui/loading-skeleton.tsx +0 -107
- package/src/components/ui/media-resource-preloader.tsx +0 -458
- package/src/components/ui/offline-message.tsx +0 -98
- package/src/components/ui/play-button.tsx +0 -99
- package/src/components/ui/seek-bar.tsx +0 -191
- package/src/components/ui/time-display.tsx +0 -61
- package/src/components/ui/volume-control.tsx +0 -190
- package/src/components/unified/base-media-player.tsx +0 -252
- package/src/components/unified/media-player.tsx +0 -75
- package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
- package/src/components/variants/minimal/MinimalControls.tsx +0 -124
- package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
- package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
- package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
- package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
- package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
- package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
- package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
- package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
- package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
- package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
- package/src/components/variants/minimal/components/RightControls.tsx +0 -164
- package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
- package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
- package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
- package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
- package/src/components/variants/minimal/components/VideoElement.tsx +0 -33
- package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
- package/src/components/variants/minimal/index.ts +0 -23
- package/src/components/video-player.tsx +0 -100
- package/src/context/__tests__/media-store.test.ts +0 -509
- package/src/context/error-handling.ts +0 -398
- package/src/context/media-context.tsx +0 -254
- package/src/context/media-provider.tsx +0 -264
- package/src/context/media-store.ts +0 -387
- package/src/context/persistence.ts +0 -462
- package/src/core/events/event-system.ts +0 -448
- package/src/core/events/hooks.ts +0 -325
- package/src/core/events/index.ts +0 -22
- package/src/core/events/middleware.ts +0 -286
- package/src/core/index.ts +0 -22
- package/src/core/optimization/bundle-optimizer.tsx +0 -312
- package/src/core/performance/cicd.ts +0 -98
- package/src/core/performance/index.ts +0 -38
- package/src/core/performance/media-loading-optimizer.ts +0 -544
- package/src/core/performance/performance-budgets.ts +0 -437
- package/src/core/performance/performance-monitor.tsx +0 -488
- package/src/core/performance/performance-testing.ts +0 -461
- package/src/core/plugins/__tests__/registry.test.ts +0 -595
- package/src/core/plugins/base-plugin.ts +0 -225
- package/src/core/plugins/enhanced-plugin-system.ts +0 -435
- package/src/core/plugins/examples/analytics-plugin.ts +0 -241
- package/src/core/plugins/index.ts +0 -39
- package/src/core/plugins/registry.ts +0 -546
- package/src/core/plugins/types.ts +0 -169
- package/src/core/plugins/utils.ts +0 -317
- package/src/core/progressive-loading.tsx +0 -331
- package/src/core/providers/enhanced-hls-provider.ts +0 -307
- package/src/core/providers/lazy-provider.tsx +0 -14
- package/src/core/providers/service-provider.tsx +0 -164
- package/src/core/utils.tsx +0 -34
- package/src/features/media-session/media-session-manager.ts +0 -411
- package/src/features/picture-in-picture/pip-manager.ts +0 -428
- package/src/features/playlist/playlist-manager.ts +0 -626
- package/src/features/subtitles/subtitle-manager.ts +0 -435
- package/src/features/subtitles/subtitle-parser.ts +0 -284
- package/src/features/thumbnails/thumbnail-generator.ts +0 -528
- package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
- package/src/hooks/__tests__/use-media-player.test.ts +0 -712
- package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
- package/src/hooks/accessibility/index.ts +0 -27
- package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
- package/src/hooks/accessibility/use-focus-management.ts +0 -183
- package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
- package/src/hooks/accessibility/use-screen-reader.ts +0 -212
- package/src/hooks/core/index.ts +0 -47
- package/src/hooks/legacy.ts +0 -21
- package/src/hooks/use-buffer-health.ts +0 -218
- package/src/hooks/use-enhanced-media-player.ts +0 -575
- package/src/hooks/use-focus-trap.tsx +0 -162
- package/src/hooks/use-intelligent-preloading.ts +0 -387
- package/src/hooks/use-keyboard-controls.ts +0 -115
- package/src/hooks/use-keyboard-shortcuts.ts +0 -255
- package/src/hooks/use-media-actions.ts +0 -184
- package/src/hooks/use-media-metadata.ts +0 -91
- package/src/hooks/use-media-optimistic.ts +0 -264
- package/src/hooks/use-media-player.ts +0 -343
- package/src/hooks/use-media-state.ts +0 -194
- package/src/hooks/use-memory-optimization.ts +0 -360
- package/src/hooks/use-network-status.ts +0 -124
- package/src/hooks/use-optimistic-controls.ts +0 -95
- package/src/hooks/use-optimized-media.ts +0 -283
- package/src/hooks/use-smart-preload.ts +0 -229
- package/src/hooks/use-touch-gestures.ts +0 -461
- package/src/hooks/useEnhancedSubtitles.ts +0 -258
- package/src/hooks/useKeyboardShortcuts.ts +0 -106
- package/src/hooks/useMediaControls.ts +0 -52
- package/src/hooks/useScreenshot.ts +0 -61
- package/src/hooks/useSubtitles.ts +0 -91
- package/src/hooks/useVideoPlayer.ts +0 -278
- package/src/icons/components/FullscreenIcon.tsx +0 -36
- package/src/icons/components/SettingsIcon.tsx +0 -37
- package/src/icons/components/animated/LoadingIcon.tsx +0 -27
- package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
- package/src/icons/components/media/PauseIcon.tsx +0 -38
- package/src/icons/components/media/PlayIcon.tsx +0 -37
- package/src/icons/components/volume/VolumeIcon.tsx +0 -38
- package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
- package/src/icons/index.ts +0 -56
- package/src/icons/provider.tsx +0 -58
- package/src/icons/types.ts +0 -60
- package/src/index-enhanced.ts +0 -35
- package/src/index-legacy.ts +0 -324
- package/src/index.css +0 -102
- package/src/lib/__tests__/async-utils.test.ts +0 -291
- package/src/lib/async-utils.ts +0 -194
- package/src/lib/deprecation.ts +0 -51
- package/src/lib/format-time.ts +0 -37
- package/src/lib/index.ts +0 -4
- package/src/lib/utils.ts +0 -6
- package/src/styles/globals.css +0 -462
- package/src/styles/minimal-player.css +0 -621
- package/src/styles/pixel-art.css +0 -41
- package/src/styles/videojs.css +0 -100
- package/src/types/events.ts +0 -47
- package/src/types/formats.ts +0 -79
- package/src/types/index.ts +0 -203
- 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
|
-
}
|
package/src/core/utils.tsx
DELETED
|
@@ -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
|
-
}
|