ts-video-player 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +438 -0
- package/dist/cdn.d.ts +10 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.min.js +1046 -0
- package/dist/cdn.min.js.map +54 -0
- package/dist/cdn.test.d.ts +2 -0
- package/dist/cdn.test.d.ts.map +1 -0
- package/dist/chunk-36x4yhjn.js +765 -0
- package/dist/chunk-36x4yhjn.js.map +12 -0
- package/dist/chunk-eajts2jv.js +4243 -0
- package/dist/chunk-eajts2jv.js.map +42 -0
- package/dist/chunk-z1ehbz9f.js +380 -0
- package/dist/chunk-z1ehbz9f.js.map +19 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/core/audio-gain.d.ts +67 -0
- package/dist/core/audio-gain.d.ts.map +1 -0
- package/dist/core/caption-styles.d.ts +121 -0
- package/dist/core/caption-styles.d.ts.map +1 -0
- package/dist/core/chapters.d.ts +150 -0
- package/dist/core/chapters.d.ts.map +1 -0
- package/dist/core/error-overlay.d.ts +71 -0
- package/dist/core/error-overlay.d.ts.map +1 -0
- package/dist/core/events.d.ts +119 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/features.d.ts +64 -0
- package/dist/core/features.d.ts.map +1 -0
- package/dist/core/i18n.d.ts +132 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/index.d.ts +37 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/live.d.ts +130 -0
- package/dist/core/live.d.ts.map +1 -0
- package/dist/core/media-session.d.ts +38 -0
- package/dist/core/media-session.d.ts.map +1 -0
- package/dist/core/orientation.d.ts +22 -0
- package/dist/core/orientation.d.ts.map +1 -0
- package/dist/core/popover.d.ts +42 -0
- package/dist/core/popover.d.ts.map +1 -0
- package/dist/core/remote-playback.d.ts +195 -0
- package/dist/core/remote-playback.d.ts.map +1 -0
- package/dist/core/settings-menu.d.ts +132 -0
- package/dist/core/settings-menu.d.ts.map +1 -0
- package/dist/core/spinner.d.ts +67 -0
- package/dist/core/spinner.d.ts.map +1 -0
- package/dist/core/state.d.ts +142 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/text-tracks.d.ts +162 -0
- package/dist/core/text-tracks.d.ts.map +1 -0
- package/dist/core/themes.d.ts +213 -0
- package/dist/core/themes.d.ts.map +1 -0
- package/dist/core/thumbnails.d.ts +124 -0
- package/dist/core/thumbnails.d.ts.map +1 -0
- package/dist/core/tooltips.d.ts +100 -0
- package/dist/core/tooltips.d.ts.map +1 -0
- package/dist/elements/base.d.ts +3 -0
- package/dist/elements/base.d.ts.map +1 -0
- package/dist/elements/index.d.ts +33 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +55 -0
- package/dist/elements/index.js.map +9 -0
- package/dist/elements/media-airplay-button.d.ts +13 -0
- package/dist/elements/media-airplay-button.d.ts.map +1 -0
- package/dist/elements/media-error-display.d.ts +13 -0
- package/dist/elements/media-error-display.d.ts.map +1 -0
- package/dist/elements/media-fullscreen-button.d.ts +13 -0
- package/dist/elements/media-fullscreen-button.d.ts.map +1 -0
- package/dist/elements/media-live-button.d.ts +13 -0
- package/dist/elements/media-live-button.d.ts.map +1 -0
- package/dist/elements/media-mute-button.d.ts +13 -0
- package/dist/elements/media-mute-button.d.ts.map +1 -0
- package/dist/elements/media-pip-button.d.ts +13 -0
- package/dist/elements/media-pip-button.d.ts.map +1 -0
- package/dist/elements/media-play-button.d.ts +14 -0
- package/dist/elements/media-play-button.d.ts.map +1 -0
- package/dist/elements/media-playback-rate-button.d.ts +10 -0
- package/dist/elements/media-playback-rate-button.d.ts.map +1 -0
- package/dist/elements/media-preview-time.d.ts +18 -0
- package/dist/elements/media-preview-time.d.ts.map +1 -0
- package/dist/elements/media-progress-bar.d.ts +16 -0
- package/dist/elements/media-progress-bar.d.ts.map +1 -0
- package/dist/elements/media-remote-playback-button.d.ts +16 -0
- package/dist/elements/media-remote-playback-button.d.ts.map +1 -0
- package/dist/elements/media-seek-button.d.ts +9 -0
- package/dist/elements/media-seek-button.d.ts.map +1 -0
- package/dist/elements/media-settings-menu.d.ts +32 -0
- package/dist/elements/media-settings-menu.d.ts.map +1 -0
- package/dist/elements/media-time-display.d.ts +21 -0
- package/dist/elements/media-time-display.d.ts.map +1 -0
- package/dist/elements/media-time-group.d.ts +22 -0
- package/dist/elements/media-time-group.d.ts.map +1 -0
- package/dist/elements/media-time-separator.d.ts +13 -0
- package/dist/elements/media-time-separator.d.ts.map +1 -0
- package/dist/elements/media-volume-slider.d.ts +16 -0
- package/dist/elements/media-volume-slider.d.ts.map +1 -0
- package/dist/elements/utils.d.ts +27 -0
- package/dist/elements/utils.d.ts.map +1 -0
- package/dist/elements/video-player.d.ts +23 -0
- package/dist/elements/video-player.d.ts.map +1 -0
- package/dist/elements/video-skin.d.ts +23 -0
- package/dist/elements/video-skin.d.ts.map +1 -0
- package/dist/features/captions.d.ts +8 -0
- package/dist/features/captions.d.ts.map +1 -0
- package/dist/features/create-player.d.ts +45 -0
- package/dist/features/create-player.d.ts.map +1 -0
- package/dist/features/fullscreen.d.ts +8 -0
- package/dist/features/fullscreen.d.ts.map +1 -0
- package/dist/features/gestures.d.ts +8 -0
- package/dist/features/gestures.d.ts.map +1 -0
- package/dist/features/index.d.ts +26 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +31 -0
- package/dist/features/index.js.map +9 -0
- package/dist/features/keyboard.d.ts +8 -0
- package/dist/features/keyboard.d.ts.map +1 -0
- package/dist/features/pip.d.ts +8 -0
- package/dist/features/pip.d.ts.map +1 -0
- package/dist/features/playback.d.ts +8 -0
- package/dist/features/playback.d.ts.map +1 -0
- package/dist/features/quality.d.ts +8 -0
- package/dist/features/quality.d.ts.map +1 -0
- package/dist/features/types.d.ts +26 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/volume.d.ts +8 -0
- package/dist/features/volume.d.ts.map +1 -0
- package/dist/index.d.ts +84 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8149 -0
- package/dist/index.js.map +31 -0
- package/dist/layouts/index.d.ts +58 -0
- package/dist/layouts/index.d.ts.map +1 -0
- package/dist/player.d.ts +90 -0
- package/dist/player.d.ts.map +1 -0
- package/dist/plugins/ads.d.ts +311 -0
- package/dist/plugins/ads.d.ts.map +1 -0
- package/dist/plugins/analytics.d.ts +203 -0
- package/dist/plugins/analytics.d.ts.map +1 -0
- package/dist/plugins/end-screen.d.ts +184 -0
- package/dist/plugins/end-screen.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +13 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +20 -0
- package/dist/plugins/index.js.map +9 -0
- package/dist/plugins/skip-segments.d.ts +159 -0
- package/dist/plugins/skip-segments.d.ts.map +1 -0
- package/dist/plugins/watermark.d.ts +157 -0
- package/dist/plugins/watermark.d.ts.map +1 -0
- package/dist/providers/base.d.ts +56 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/dash.d.ts +94 -0
- package/dist/providers/dash.d.ts.map +1 -0
- package/dist/providers/hls.d.ts +182 -0
- package/dist/providers/hls.d.ts.map +1 -0
- package/dist/providers/html5.d.ts +64 -0
- package/dist/providers/html5.d.ts.map +1 -0
- package/dist/providers/index.d.ts +41 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/vimeo.d.ts +157 -0
- package/dist/providers/vimeo.d.ts.map +1 -0
- package/dist/providers/youtube.d.ts +134 -0
- package/dist/providers/youtube.d.ts.map +1 -0
- package/dist/stx/index.d.ts +59 -0
- package/dist/stx/index.d.ts.map +1 -0
- package/dist/stx/index.js +480 -0
- package/dist/stx/index.js.map +11 -0
- package/dist/types.d.ts +724 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/ui/components.d.ts +121 -0
- package/dist/ui/components.d.ts.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +16 -0
- package/dist/ui/index.js.map +9 -0
- package/package.json +109 -0
- package/src/cdn.test.ts +10 -0
- package/src/cdn.ts +60 -0
- package/src/config.ts +25 -0
- package/src/core/audio-gain.ts +171 -0
- package/src/core/caption-styles.ts +568 -0
- package/src/core/chapters.ts +551 -0
- package/src/core/error-overlay.ts +354 -0
- package/src/core/events.ts +552 -0
- package/src/core/features.ts +287 -0
- package/src/core/i18n.ts +590 -0
- package/src/core/index.ts +249 -0
- package/src/core/live.ts +472 -0
- package/src/core/media-session.ts +137 -0
- package/src/core/orientation.ts +57 -0
- package/src/core/popover.ts +143 -0
- package/src/core/remote-playback.ts +661 -0
- package/src/core/settings-menu.ts +630 -0
- package/src/core/spinner.ts +310 -0
- package/src/core/state.ts +476 -0
- package/src/core/text-tracks.ts +599 -0
- package/src/core/themes.ts +607 -0
- package/src/core/thumbnails.ts +457 -0
- package/src/core/tooltips.ts +370 -0
- package/src/elements/base.ts +2 -0
- package/src/elements/index.ts +82 -0
- package/src/elements/media-airplay-button.ts +78 -0
- package/src/elements/media-error-display.ts +47 -0
- package/src/elements/media-fullscreen-button.ts +72 -0
- package/src/elements/media-live-button.ts +65 -0
- package/src/elements/media-mute-button.ts +69 -0
- package/src/elements/media-pip-button.ts +66 -0
- package/src/elements/media-play-button.ts +69 -0
- package/src/elements/media-playback-rate-button.ts +59 -0
- package/src/elements/media-preview-time.ts +75 -0
- package/src/elements/media-progress-bar.ts +200 -0
- package/src/elements/media-remote-playback-button.ts +108 -0
- package/src/elements/media-seek-button.ts +50 -0
- package/src/elements/media-settings-menu.ts +302 -0
- package/src/elements/media-time-display.ts +99 -0
- package/src/elements/media-time-group.ts +41 -0
- package/src/elements/media-time-separator.ts +35 -0
- package/src/elements/media-volume-slider.ts +140 -0
- package/src/elements/utils.ts +82 -0
- package/src/elements/video-player.ts +175 -0
- package/src/elements/video-skin.ts +127 -0
- package/src/features/captions.ts +56 -0
- package/src/features/create-player.ts +91 -0
- package/src/features/fullscreen.ts +44 -0
- package/src/features/gestures.ts +44 -0
- package/src/features/index.ts +44 -0
- package/src/features/keyboard.ts +89 -0
- package/src/features/pip.ts +47 -0
- package/src/features/playback.ts +68 -0
- package/src/features/quality.ts +19 -0
- package/src/features/types.ts +28 -0
- package/src/features/volume.ts +46 -0
- package/src/index.ts +635 -0
- package/src/layouts/index.ts +672 -0
- package/src/player.ts +821 -0
- package/src/plugins/ads.ts +1045 -0
- package/src/plugins/analytics.ts +673 -0
- package/src/plugins/end-screen.ts +793 -0
- package/src/plugins/index.ts +61 -0
- package/src/plugins/skip-segments.ts +537 -0
- package/src/plugins/watermark.ts +537 -0
- package/src/providers/base.ts +197 -0
- package/src/providers/dash.ts +588 -0
- package/src/providers/hls.ts +624 -0
- package/src/providers/html5.ts +473 -0
- package/src/providers/index.ts +97 -0
- package/src/providers/vimeo.ts +533 -0
- package/src/providers/youtube.ts +542 -0
- package/src/stx/index.ts +606 -0
- package/src/types.ts +874 -0
- package/src/ui/components.ts +910 -0
- package/src/ui/index.ts +29 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* End Screen Plugin
|
|
3
|
+
*
|
|
4
|
+
* Display recommendations and actions at video end.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins/end-screen
|
|
7
|
+
*/
|
|
8
|
+
import type { Player } from '../player';
|
|
9
|
+
export interface EndScreenConfig {
|
|
10
|
+
/** Show end screen on video end */
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
/** Auto-show delay after video ends (ms) */
|
|
13
|
+
showDelay?: number;
|
|
14
|
+
/** Recommendations */
|
|
15
|
+
recommendations?: EndScreenRecommendation[];
|
|
16
|
+
/** Custom actions */
|
|
17
|
+
actions?: EndScreenAction[];
|
|
18
|
+
/** Replay button */
|
|
19
|
+
showReplay?: boolean;
|
|
20
|
+
/** Share button */
|
|
21
|
+
showShare?: boolean;
|
|
22
|
+
/** Countdown to next video (0 = disabled) */
|
|
23
|
+
autoplayCountdown?: number;
|
|
24
|
+
/** Title text */
|
|
25
|
+
title?: string;
|
|
26
|
+
/** Custom template */
|
|
27
|
+
template?: string;
|
|
28
|
+
/** Background style */
|
|
29
|
+
backgroundStyle?: 'blur' | 'dark' | 'gradient' | 'none';
|
|
30
|
+
}
|
|
31
|
+
export interface EndScreenRecommendation {
|
|
32
|
+
/** Unique ID */
|
|
33
|
+
id: string;
|
|
34
|
+
/** Title */
|
|
35
|
+
title: string;
|
|
36
|
+
/** Description */
|
|
37
|
+
description?: string;
|
|
38
|
+
/** Thumbnail URL */
|
|
39
|
+
thumbnail: string;
|
|
40
|
+
/** Duration string (e.g., "12:34") */
|
|
41
|
+
duration?: string;
|
|
42
|
+
/** Video URL or callback */
|
|
43
|
+
url?: string;
|
|
44
|
+
/** Click handler */
|
|
45
|
+
onClick?: () => void;
|
|
46
|
+
/** Channel/creator name */
|
|
47
|
+
channel?: string;
|
|
48
|
+
/** View count */
|
|
49
|
+
views?: string;
|
|
50
|
+
/** Upload date */
|
|
51
|
+
date?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface EndScreenAction {
|
|
54
|
+
/** Button text */
|
|
55
|
+
label: string;
|
|
56
|
+
/** Icon (SVG or emoji) */
|
|
57
|
+
icon?: string;
|
|
58
|
+
/** Click handler */
|
|
59
|
+
onClick: () => void;
|
|
60
|
+
/** Button style */
|
|
61
|
+
style?: 'primary' | 'secondary' | 'outline';
|
|
62
|
+
}
|
|
63
|
+
export interface EndScreenState {
|
|
64
|
+
/** Is visible */
|
|
65
|
+
visible: boolean;
|
|
66
|
+
/** Autoplay countdown */
|
|
67
|
+
countdown: number;
|
|
68
|
+
/** Is countdown active */
|
|
69
|
+
isCountingDown: boolean;
|
|
70
|
+
/** Selected recommendation index */
|
|
71
|
+
selectedIndex: number;
|
|
72
|
+
}
|
|
73
|
+
export declare class EndScreenManager {
|
|
74
|
+
private player;
|
|
75
|
+
private config;
|
|
76
|
+
private state;
|
|
77
|
+
private container;
|
|
78
|
+
private element;
|
|
79
|
+
private countdownTimer;
|
|
80
|
+
private showTimer;
|
|
81
|
+
private unsubscribers;
|
|
82
|
+
private onRecommendationClick;
|
|
83
|
+
private onReplay;
|
|
84
|
+
private onAutoplay;
|
|
85
|
+
private onShow;
|
|
86
|
+
private onHide;
|
|
87
|
+
constructor(config?: EndScreenConfig);
|
|
88
|
+
/**
|
|
89
|
+
* Attach to player
|
|
90
|
+
*/
|
|
91
|
+
attach(player: Player, container: HTMLElement): void;
|
|
92
|
+
/**
|
|
93
|
+
* Create end screen element
|
|
94
|
+
*/
|
|
95
|
+
private createElement;
|
|
96
|
+
/**
|
|
97
|
+
* Apply background style
|
|
98
|
+
*/
|
|
99
|
+
private applyBackgroundStyle;
|
|
100
|
+
/**
|
|
101
|
+
* Render end screen content
|
|
102
|
+
*/
|
|
103
|
+
private render;
|
|
104
|
+
/**
|
|
105
|
+
* Create recommendation card
|
|
106
|
+
*/
|
|
107
|
+
private createRecommendationCard;
|
|
108
|
+
/**
|
|
109
|
+
* Create action button
|
|
110
|
+
*/
|
|
111
|
+
private createActionButton;
|
|
112
|
+
/**
|
|
113
|
+
* Attach event listeners
|
|
114
|
+
*/
|
|
115
|
+
private attachEventListeners;
|
|
116
|
+
/**
|
|
117
|
+
* Show end screen
|
|
118
|
+
*/
|
|
119
|
+
show(): void;
|
|
120
|
+
/**
|
|
121
|
+
* Hide end screen
|
|
122
|
+
*/
|
|
123
|
+
hide(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Start autoplay countdown
|
|
126
|
+
*/
|
|
127
|
+
private startAutoplayCountdown;
|
|
128
|
+
/**
|
|
129
|
+
* Cancel autoplay
|
|
130
|
+
*/
|
|
131
|
+
cancelAutoplay(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Play next video
|
|
134
|
+
*/
|
|
135
|
+
private playNextVideo;
|
|
136
|
+
/**
|
|
137
|
+
* Select previous recommendation
|
|
138
|
+
*/
|
|
139
|
+
private selectPrevious;
|
|
140
|
+
/**
|
|
141
|
+
* Select next recommendation
|
|
142
|
+
*/
|
|
143
|
+
private selectNext;
|
|
144
|
+
/**
|
|
145
|
+
* Select current recommendation
|
|
146
|
+
*/
|
|
147
|
+
private selectCurrent;
|
|
148
|
+
/**
|
|
149
|
+
* Replay video
|
|
150
|
+
*/
|
|
151
|
+
private replay;
|
|
152
|
+
/**
|
|
153
|
+
* Share video
|
|
154
|
+
*/
|
|
155
|
+
private share;
|
|
156
|
+
/**
|
|
157
|
+
* Update recommendations
|
|
158
|
+
*/
|
|
159
|
+
setRecommendations(recommendations: EndScreenRecommendation[]): void;
|
|
160
|
+
/**
|
|
161
|
+
* Get state
|
|
162
|
+
*/
|
|
163
|
+
getState(): EndScreenState;
|
|
164
|
+
/**
|
|
165
|
+
* Set event handlers
|
|
166
|
+
*/
|
|
167
|
+
on(event: 'recommendationClick', handler: (rec: EndScreenRecommendation) => void): void;
|
|
168
|
+
on(event: 'replay', handler: () => void): void;
|
|
169
|
+
on(event: 'autoplay', handler: (rec: EndScreenRecommendation) => void): void;
|
|
170
|
+
on(event: 'show' | 'hide', handler: () => void): void;
|
|
171
|
+
/**
|
|
172
|
+
* Destroy
|
|
173
|
+
*/
|
|
174
|
+
destroy(): void;
|
|
175
|
+
}
|
|
176
|
+
export declare function createEndScreen(config?: EndScreenConfig): EndScreenManager;
|
|
177
|
+
/**
|
|
178
|
+
* End screen plugin for Player
|
|
179
|
+
*/
|
|
180
|
+
export declare function endScreenPlugin(config: EndScreenConfig): {
|
|
181
|
+
name: string;
|
|
182
|
+
install: (player: Player, container: HTMLElement) => () => void;
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=end-screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end-screen.d.ts","sourceRoot":"","sources":["../../src/plugins/end-screen.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAMvC,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sBAAsB;IACtB,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAA;IAC3C,qBAAqB;IACrB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,oBAAoB;IACpB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,mBAAmB;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uBAAuB;IACvB,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAA;CACxD;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,YAAY;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,kBAAkB;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,oBAAoB;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,mBAAmB;IACnB,KAAK,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAA;CAC5C;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,0BAA0B;IAC1B,cAAc,EAAE,OAAO,CAAA;IACvB,oCAAoC;IACpC,aAAa,EAAE,MAAM,CAAA;CACtB;AAMD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,aAAa,CAAwB;IAI7C,OAAO,CAAC,qBAAqB,CAAyD;IACtF,OAAO,CAAC,QAAQ,CAA4B;IAE5C,OAAO,CAAC,UAAU,CAAyD;IAC3E,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAA4B;gBAE9B,MAAM,GAAE,eAAoB;IAsBxC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI;IAQpD;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,MAAM;IAwHd;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsHhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgD5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAuBZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAgBZ;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACH,cAAc,IAAI,IAAI;IActB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,MAAM;IAOd;;OAEG;IACH,OAAO,CAAC,KAAK;IAab;;OAEG;IACH,kBAAkB,CAAC,eAAe,EAAE,uBAAuB,EAAE,GAAG,IAAI;IAOpE;;OAEG;IACH,QAAQ,IAAI,cAAc;IAI1B;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI;IACvF,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAC9C,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI;IAC5E,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI;IAqBrD;;OAEG;IACH,OAAO,IAAI,IAAI;CAehB;AAMD,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,gBAAgB,CAE1E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,KAAK,MAAM,IAAI,CAAA;CAAE,CAiB1I"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Video Player Plugins
|
|
3
|
+
*
|
|
4
|
+
* Optional plugins for extended functionality.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins
|
|
7
|
+
*/
|
|
8
|
+
export { VideoAnalytics, createVideoAnalytics, analyticsPlugin, type VideoEventName, type VideoAnalyticsConfig, } from './analytics';
|
|
9
|
+
export { VASTParser, AdsManager, createAdsManager, adsPlugin, type Ad, type AdMediaFile, type AdBreak, type AdConfig, type AdState, } from './ads';
|
|
10
|
+
export { SkipSegmentsManager, createSkipSegments, skipSegmentsPlugin, type SegmentType, type SkipSegment, type SkipSegmentsConfig, type SkipSegmentsState, } from './skip-segments';
|
|
11
|
+
export { EndScreenManager, createEndScreen, endScreenPlugin, type EndScreenRecommendation, type EndScreenConfig, type EndScreenState, } from './end-screen';
|
|
12
|
+
export { WatermarkManager, createWatermarkManager, watermarkPlugin, type WatermarkPosition, type WatermarkConfig, type WatermarkAnimation, type DynamicWatermark, } from './watermark';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,KAAK,EAAE,EACP,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,OAAO,GACb,MAAM,OAAO,CAAA;AAGd,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export {
|
|
2
|
+
watermarkPlugin,
|
|
3
|
+
skipSegmentsPlugin,
|
|
4
|
+
endScreenPlugin,
|
|
5
|
+
createWatermarkManager,
|
|
6
|
+
createVideoAnalytics,
|
|
7
|
+
createSkipSegments,
|
|
8
|
+
createEndScreen,
|
|
9
|
+
createAdsManager,
|
|
10
|
+
analyticsPlugin,
|
|
11
|
+
adsPlugin,
|
|
12
|
+
WatermarkManager,
|
|
13
|
+
VideoAnalytics,
|
|
14
|
+
VASTParser,
|
|
15
|
+
SkipSegmentsManager,
|
|
16
|
+
EndScreenManager,
|
|
17
|
+
AdsManager
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
//# debugId=A3B32FA203220F8B64756E2164756E21
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skip Segments Plugin
|
|
3
|
+
*
|
|
4
|
+
* Skip intro, outro, recap, and other segments.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins/skip-segments
|
|
7
|
+
*/
|
|
8
|
+
import type { Player } from '../player';
|
|
9
|
+
export type SegmentType = 'intro' | 'outro' | 'recap' | 'preview' | 'credits' | 'sponsor' | 'custom';
|
|
10
|
+
export interface SkipSegment {
|
|
11
|
+
/** Segment type */
|
|
12
|
+
type: SegmentType;
|
|
13
|
+
/** Start time in seconds */
|
|
14
|
+
startTime: number;
|
|
15
|
+
/** End time in seconds */
|
|
16
|
+
endTime: number;
|
|
17
|
+
/** Skip to time (defaults to endTime) */
|
|
18
|
+
skipTo?: number;
|
|
19
|
+
/** Button text */
|
|
20
|
+
buttonText?: string;
|
|
21
|
+
/** Auto-skip after delay (0 = no auto-skip) */
|
|
22
|
+
autoSkipDelay?: number;
|
|
23
|
+
/** Show countdown */
|
|
24
|
+
showCountdown?: boolean;
|
|
25
|
+
/** Custom data */
|
|
26
|
+
data?: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface SkipSegmentsConfig {
|
|
29
|
+
/** Skip segments */
|
|
30
|
+
segments: SkipSegment[];
|
|
31
|
+
/** Default button visibility duration (ms) */
|
|
32
|
+
buttonVisibleDuration?: number;
|
|
33
|
+
/** Default auto-skip delay (seconds) */
|
|
34
|
+
defaultAutoSkipDelay?: number;
|
|
35
|
+
/** Position of skip button */
|
|
36
|
+
buttonPosition?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';
|
|
37
|
+
/** Show progress bar markers */
|
|
38
|
+
showMarkers?: boolean;
|
|
39
|
+
/** Marker color */
|
|
40
|
+
markerColor?: string;
|
|
41
|
+
/** Enable keyboard shortcut (Enter to skip) */
|
|
42
|
+
keyboardShortcut?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface SkipSegmentsState {
|
|
45
|
+
/** Current active segment */
|
|
46
|
+
activeSegment: SkipSegment | null;
|
|
47
|
+
/** Is button visible */
|
|
48
|
+
buttonVisible: boolean;
|
|
49
|
+
/** Auto-skip countdown */
|
|
50
|
+
countdown: number;
|
|
51
|
+
/** Is auto-skipping */
|
|
52
|
+
isAutoSkipping: boolean;
|
|
53
|
+
}
|
|
54
|
+
export declare class SkipSegmentsManager {
|
|
55
|
+
private player;
|
|
56
|
+
private config;
|
|
57
|
+
private state;
|
|
58
|
+
private container;
|
|
59
|
+
private button;
|
|
60
|
+
private markersContainer;
|
|
61
|
+
private countdownTimer;
|
|
62
|
+
private hideTimer;
|
|
63
|
+
private unsubscribers;
|
|
64
|
+
private onSkip;
|
|
65
|
+
private onSegmentEnter;
|
|
66
|
+
private onSegmentExit;
|
|
67
|
+
constructor(config: SkipSegmentsConfig);
|
|
68
|
+
/**
|
|
69
|
+
* Attach to player
|
|
70
|
+
*/
|
|
71
|
+
attach(player: Player, container: HTMLElement): void;
|
|
72
|
+
/**
|
|
73
|
+
* Create skip button
|
|
74
|
+
*/
|
|
75
|
+
private createButton;
|
|
76
|
+
/**
|
|
77
|
+
* Get position styles for button
|
|
78
|
+
*/
|
|
79
|
+
private getPositionStyles;
|
|
80
|
+
/**
|
|
81
|
+
* Create progress bar markers
|
|
82
|
+
*/
|
|
83
|
+
private createMarkers;
|
|
84
|
+
/**
|
|
85
|
+
* Get markers element for progress bar
|
|
86
|
+
*/
|
|
87
|
+
getMarkersElement(duration: number): HTMLElement;
|
|
88
|
+
/**
|
|
89
|
+
* Attach event listeners
|
|
90
|
+
*/
|
|
91
|
+
private attachEventListeners;
|
|
92
|
+
/**
|
|
93
|
+
* Check if current time is in any segment
|
|
94
|
+
*/
|
|
95
|
+
private checkSegments;
|
|
96
|
+
/**
|
|
97
|
+
* Show skip button
|
|
98
|
+
*/
|
|
99
|
+
private showButton;
|
|
100
|
+
/**
|
|
101
|
+
* Hide skip button
|
|
102
|
+
*/
|
|
103
|
+
private hideButton;
|
|
104
|
+
/**
|
|
105
|
+
* Start auto-skip countdown
|
|
106
|
+
*/
|
|
107
|
+
private startAutoSkip;
|
|
108
|
+
/**
|
|
109
|
+
* Update button text with countdown
|
|
110
|
+
*/
|
|
111
|
+
private updateButtonText;
|
|
112
|
+
/**
|
|
113
|
+
* Skip current segment
|
|
114
|
+
*/
|
|
115
|
+
skip(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Add segment
|
|
118
|
+
*/
|
|
119
|
+
addSegment(segment: SkipSegment): void;
|
|
120
|
+
/**
|
|
121
|
+
* Remove segment
|
|
122
|
+
*/
|
|
123
|
+
removeSegment(type: SegmentType): void;
|
|
124
|
+
/**
|
|
125
|
+
* Clear all segments
|
|
126
|
+
*/
|
|
127
|
+
clearSegments(): void;
|
|
128
|
+
/**
|
|
129
|
+
* Set segments
|
|
130
|
+
*/
|
|
131
|
+
setSegments(segments: SkipSegment[]): void;
|
|
132
|
+
/**
|
|
133
|
+
* Get segments
|
|
134
|
+
*/
|
|
135
|
+
getSegments(): SkipSegment[];
|
|
136
|
+
/**
|
|
137
|
+
* Get current state
|
|
138
|
+
*/
|
|
139
|
+
getState(): SkipSegmentsState;
|
|
140
|
+
/**
|
|
141
|
+
* Set event handlers
|
|
142
|
+
*/
|
|
143
|
+
on(event: 'skip', handler: (segment: SkipSegment) => void): void;
|
|
144
|
+
on(event: 'segmentEnter', handler: (segment: SkipSegment) => void): void;
|
|
145
|
+
on(event: 'segmentExit', handler: (segment: SkipSegment) => void): void;
|
|
146
|
+
/**
|
|
147
|
+
* Destroy
|
|
148
|
+
*/
|
|
149
|
+
destroy(): void;
|
|
150
|
+
}
|
|
151
|
+
export declare function createSkipSegments(config: SkipSegmentsConfig): SkipSegmentsManager;
|
|
152
|
+
/**
|
|
153
|
+
* Skip segments plugin for Player
|
|
154
|
+
*/
|
|
155
|
+
export declare function skipSegmentsPlugin(config: SkipSegmentsConfig): {
|
|
156
|
+
name: string;
|
|
157
|
+
install: (player: Player, container: HTMLElement) => () => void;
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=skip-segments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skip-segments.d.ts","sourceRoot":"","sources":["../../src/plugins/skip-segments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watermark Plugin
|
|
3
|
+
*
|
|
4
|
+
* Display watermarks on video playback.
|
|
5
|
+
*
|
|
6
|
+
* @module plugins/watermark
|
|
7
|
+
*/
|
|
8
|
+
import type { Player } from '../player';
|
|
9
|
+
export type WatermarkPosition = 'top-left' | 'top-center' | 'top-right' | 'center-left' | 'center' | 'center-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
10
|
+
export interface WatermarkConfig {
|
|
11
|
+
/** Image URL */
|
|
12
|
+
image?: string;
|
|
13
|
+
/** Text content */
|
|
14
|
+
text?: string;
|
|
15
|
+
/** HTML content */
|
|
16
|
+
html?: string;
|
|
17
|
+
/** Position */
|
|
18
|
+
position?: WatermarkPosition;
|
|
19
|
+
/** Opacity (0-1) */
|
|
20
|
+
opacity?: number;
|
|
21
|
+
/** Size (CSS value) */
|
|
22
|
+
size?: string;
|
|
23
|
+
/** Offset from edges */
|
|
24
|
+
offset?: {
|
|
25
|
+
x?: number | string;
|
|
26
|
+
y?: number | string;
|
|
27
|
+
};
|
|
28
|
+
/** Link URL */
|
|
29
|
+
url?: string;
|
|
30
|
+
/** Open link in new tab */
|
|
31
|
+
newTab?: boolean;
|
|
32
|
+
/** Show only during playback */
|
|
33
|
+
showOnlyDuringPlayback?: boolean;
|
|
34
|
+
/** Fade in duration (ms) */
|
|
35
|
+
fadeIn?: number;
|
|
36
|
+
/** Fade out duration (ms) */
|
|
37
|
+
fadeOut?: number;
|
|
38
|
+
/** Animation */
|
|
39
|
+
animation?: WatermarkAnimation;
|
|
40
|
+
/** Custom styles */
|
|
41
|
+
styles?: Partial<CSSStyleDeclaration>;
|
|
42
|
+
/** Rotate degrees */
|
|
43
|
+
rotate?: number;
|
|
44
|
+
}
|
|
45
|
+
export interface WatermarkAnimation {
|
|
46
|
+
/** Animation type */
|
|
47
|
+
type: 'fade' | 'slide' | 'bounce' | 'pulse' | 'none';
|
|
48
|
+
/** Animation duration (ms) */
|
|
49
|
+
duration?: number;
|
|
50
|
+
/** Animation delay (ms) */
|
|
51
|
+
delay?: number;
|
|
52
|
+
/** Repeat animation */
|
|
53
|
+
repeat?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface DynamicWatermark {
|
|
56
|
+
/** User ID or session info */
|
|
57
|
+
userId?: string;
|
|
58
|
+
/** Timestamp */
|
|
59
|
+
showTimestamp?: boolean;
|
|
60
|
+
/** IP address (for forensic marking) */
|
|
61
|
+
showIp?: boolean;
|
|
62
|
+
/** Custom text */
|
|
63
|
+
customText?: string;
|
|
64
|
+
/** Update interval (ms) */
|
|
65
|
+
updateInterval?: number;
|
|
66
|
+
/** Position randomization */
|
|
67
|
+
randomizePosition?: boolean;
|
|
68
|
+
/** Move interval (ms) */
|
|
69
|
+
moveInterval?: number;
|
|
70
|
+
}
|
|
71
|
+
export declare class WatermarkManager {
|
|
72
|
+
private player;
|
|
73
|
+
private container;
|
|
74
|
+
private elements;
|
|
75
|
+
private dynamicTimers;
|
|
76
|
+
private unsubscribers;
|
|
77
|
+
constructor();
|
|
78
|
+
/**
|
|
79
|
+
* Attach to player
|
|
80
|
+
*/
|
|
81
|
+
attach(player: Player, container: HTMLElement): void;
|
|
82
|
+
/**
|
|
83
|
+
* Add a watermark
|
|
84
|
+
*/
|
|
85
|
+
add(id: string, config: WatermarkConfig): HTMLElement;
|
|
86
|
+
/**
|
|
87
|
+
* Create watermark element
|
|
88
|
+
*/
|
|
89
|
+
private createElement;
|
|
90
|
+
/**
|
|
91
|
+
* Get position styles
|
|
92
|
+
*/
|
|
93
|
+
private getPositionStyles;
|
|
94
|
+
/**
|
|
95
|
+
* Setup playback visibility
|
|
96
|
+
*/
|
|
97
|
+
private setupPlaybackVisibility;
|
|
98
|
+
/**
|
|
99
|
+
* Apply animation to watermark
|
|
100
|
+
*/
|
|
101
|
+
private applyAnimation;
|
|
102
|
+
/**
|
|
103
|
+
* Add dynamic watermark (forensic marking)
|
|
104
|
+
*/
|
|
105
|
+
addDynamic(id: string, config: DynamicWatermark, baseConfig?: WatermarkConfig): HTMLElement;
|
|
106
|
+
/**
|
|
107
|
+
* Remove watermark
|
|
108
|
+
*/
|
|
109
|
+
remove(id: string): void;
|
|
110
|
+
/**
|
|
111
|
+
* Remove all watermarks
|
|
112
|
+
*/
|
|
113
|
+
removeAll(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Update watermark
|
|
116
|
+
*/
|
|
117
|
+
update(id: string, config: Partial<WatermarkConfig>): void;
|
|
118
|
+
/**
|
|
119
|
+
* Show watermark
|
|
120
|
+
*/
|
|
121
|
+
show(id: string): void;
|
|
122
|
+
/**
|
|
123
|
+
* Hide watermark
|
|
124
|
+
*/
|
|
125
|
+
hide(id: string): void;
|
|
126
|
+
/**
|
|
127
|
+
* Show all watermarks
|
|
128
|
+
*/
|
|
129
|
+
showAll(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Hide all watermarks
|
|
132
|
+
*/
|
|
133
|
+
hideAll(): void;
|
|
134
|
+
/**
|
|
135
|
+
* Get watermark element
|
|
136
|
+
*/
|
|
137
|
+
get(id: string): HTMLElement | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Get all watermark IDs
|
|
140
|
+
*/
|
|
141
|
+
getAll(): string[];
|
|
142
|
+
/**
|
|
143
|
+
* Destroy manager
|
|
144
|
+
*/
|
|
145
|
+
destroy(): void;
|
|
146
|
+
}
|
|
147
|
+
export declare function createWatermarkManager(): WatermarkManager;
|
|
148
|
+
/**
|
|
149
|
+
* Watermark plugin for Player
|
|
150
|
+
*/
|
|
151
|
+
export declare function watermarkPlugin(watermarks: Array<{
|
|
152
|
+
id: string;
|
|
153
|
+
} & WatermarkConfig>): {
|
|
154
|
+
name: string;
|
|
155
|
+
install: (player: Player, container: HTMLElement) => () => void;
|
|
156
|
+
};
|
|
157
|
+
//# sourceMappingURL=watermark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watermark.d.ts","sourceRoot":"","sources":["../../src/plugins/watermark.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ts-video-player Base Provider
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for media providers.
|
|
5
|
+
*
|
|
6
|
+
* @module providers/base
|
|
7
|
+
*/
|
|
8
|
+
import type { Provider, ProviderType, Src, PlayerOptions, ProviderEventMap, VideoQuality, AudioTrack, TextTrack, FeatureAvailability } from '../types';
|
|
9
|
+
import { EventEmitter } from '../core/events';
|
|
10
|
+
/**
|
|
11
|
+
* Abstract base provider implementation
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class BaseProvider implements Provider {
|
|
14
|
+
abstract readonly name: string;
|
|
15
|
+
abstract readonly type: ProviderType;
|
|
16
|
+
protected container: HTMLElement | null;
|
|
17
|
+
protected options: PlayerOptions;
|
|
18
|
+
protected events: EventEmitter<ProviderEventMap>;
|
|
19
|
+
protected _ready: boolean;
|
|
20
|
+
get mediaElement(): HTMLVideoElement | HTMLAudioElement | HTMLIFrameElement | null;
|
|
21
|
+
get ready(): boolean;
|
|
22
|
+
setup(container: HTMLElement, options: PlayerOptions): Promise<void>;
|
|
23
|
+
protected abstract initialize(): Promise<void>;
|
|
24
|
+
destroy(): void;
|
|
25
|
+
protected abstract cleanup(): void;
|
|
26
|
+
abstract load(src: Src | Src[]): Promise<void>;
|
|
27
|
+
abstract canPlay(src: Src): boolean;
|
|
28
|
+
abstract play(): Promise<void>;
|
|
29
|
+
abstract pause(): void;
|
|
30
|
+
stop(): void;
|
|
31
|
+
abstract seekTo(time: number): void;
|
|
32
|
+
abstract getCurrentTime(): number;
|
|
33
|
+
abstract getDuration(): number;
|
|
34
|
+
abstract setVolume(volume: number): void;
|
|
35
|
+
abstract getVolume(): number;
|
|
36
|
+
abstract setMuted(muted: boolean): void;
|
|
37
|
+
abstract getMuted(): boolean;
|
|
38
|
+
abstract setPlaybackRate(rate: number): void;
|
|
39
|
+
abstract getPlaybackRate(): number;
|
|
40
|
+
getQualities(): VideoQuality[];
|
|
41
|
+
setQuality(_quality: VideoQuality | 'auto'): void;
|
|
42
|
+
getTextTracks(): TextTrack[];
|
|
43
|
+
setTextTrackMode(_trackId: string, _mode: 'disabled' | 'hidden' | 'showing'): void;
|
|
44
|
+
getAudioTracks(): AudioTrack[];
|
|
45
|
+
setAudioTrack(_trackId: string): void;
|
|
46
|
+
getFeatureAvailability(feature: 'volume' | 'fullscreen' | 'pip'): FeatureAvailability;
|
|
47
|
+
enterFullscreen(): Promise<void>;
|
|
48
|
+
exitFullscreen(): Promise<void>;
|
|
49
|
+
protected getFullscreenElement(): HTMLElement | null;
|
|
50
|
+
enterPiP(): Promise<void>;
|
|
51
|
+
exitPiP(): Promise<void>;
|
|
52
|
+
on<K extends keyof ProviderEventMap>(event: K, handler: ProviderEventMap[K]): void;
|
|
53
|
+
off<K extends keyof ProviderEventMap>(event: K, handler: ProviderEventMap[K]): void;
|
|
54
|
+
protected emitError(code: number, message: string, details?: unknown): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"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"}
|