@give-tech/ec-player-vue 0.0.1-beta.5 → 0.0.1-beta.51

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.
@@ -2,7 +2,7 @@
2
2
  * 播放器核心逻辑
3
3
  */
4
4
  import { type Ref } from 'vue';
5
- import { EcPlayerCore, type EcPlayerState } from '@give-tech/ec-player';
5
+ import { EcPlayerCore, type EcPlayerState, type EcLoadingStageInfo } from '@give-tech/ec-player';
6
6
  import type { PlayerOptions } from '../types';
7
7
  /**
8
8
  * 播放器逻辑返回值
@@ -16,6 +16,8 @@ export interface UsePlayerReturn {
16
16
  state: EcPlayerState;
17
17
  /** 是否正在加载 */
18
18
  isLoading: Ref<boolean>;
19
+ /** 加载阶段信息 */
20
+ loadingStage: Ref<EcLoadingStageInfo | null>;
19
21
  /** 检测到的格式 */
20
22
  detectedFormat: Ref<string>;
21
23
  /** 是否为直播流 */
@@ -35,6 +37,8 @@ export interface UsePlayerReturn {
35
37
  resume: () => Promise<void>;
36
38
  /** 跳转 */
37
39
  seek: (time: number) => Promise<void>;
40
+ /** 设置倍速 */
41
+ setPlaybackRate: (rate: number) => void;
38
42
  /** 获取播放器实例 */
39
43
  getPlayer: () => EcPlayerCore | null;
40
44
  /** 获取状态 */
@@ -46,11 +50,17 @@ export interface UsePlayerReturn {
46
50
  /** 销毁播放器 */
47
51
  destroy: () => void;
48
52
  }
53
+ /**
54
+ * 播放器逻辑 Hook 的 emit 参数类型
55
+ */
56
+ export interface UsePlayerEmit {
57
+ play: () => void;
58
+ pause: () => void;
59
+ error: (error: Error, currentTime: number) => void;
60
+ retry: () => void;
61
+ }
49
62
  /**
50
63
  * 播放器逻辑 Hook
51
64
  */
52
- export declare function usePlayer(emit: {
53
- (e: 'play'): void;
54
- (e: 'pause'): void;
55
- }): UsePlayerReturn;
65
+ export declare function usePlayer(emit: UsePlayerEmit): UsePlayerReturn;
56
66
  //# sourceMappingURL=usePlayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePlayer.d.ts","sourceRoot":"","sources":["../../src/composables/usePlayer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA0C,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACtE,OAAO,EACL,YAAY,EAIZ,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,SAAS,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACxC,YAAY;IACZ,MAAM,EAAE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAChC,YAAY;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,aAAa;IACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,aAAa;IACb,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,SAAS;IACT,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,WAAW;IACX,UAAU,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,aAAa;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS;IACT,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,SAAS;IACT,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,cAAc;IACd,SAAS,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;IACpC,WAAW;IACX,QAAQ,EAAE,MAAM,aAAa,CAAA;IAC7B,aAAa;IACb,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,YAAY;IACZ,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,YAAY;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAkBD;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE;IACJ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;CACnB,GACA,eAAe,CA6NjB"}
1
+ {"version":3,"file":"usePlayer.d.ts","sourceRoot":"","sources":["../../src/composables/usePlayer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA0C,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACtE,OAAO,EACL,YAAY,EAIZ,KAAK,aAAa,EAElB,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,SAAS,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACxC,YAAY;IACZ,MAAM,EAAE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAChC,YAAY;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,aAAa;IACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,aAAa;IACb,YAAY,EAAE,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAA;IAC5C,aAAa;IACb,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,SAAS;IACT,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,WAAW;IACX,UAAU,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,aAAa;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS;IACT,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,SAAS;IACT,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,WAAW;IACX,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,cAAc;IACd,SAAS,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;IACpC,WAAW;IACX,QAAQ,EAAE,MAAM,aAAa,CAAA;IAC7B,aAAa;IACb,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,YAAY;IACZ,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,YAAY;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAkBD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAClD,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,eAAe,CAwU9D"}
@@ -1,21 +1,21 @@
1
1
 
2
- .gt-player-container[data-v-00879d38] {
2
+ .gt-player-container[data-v-4c26033e] {
3
3
  width: 100%;
4
4
  height: 100%;
5
5
  }
6
- .gt-video-wrapper[data-v-00879d38] {
6
+ .gt-video-wrapper[data-v-4c26033e] {
7
7
  position: relative;
8
8
  width: 100%;
9
9
  height: 100%;
10
10
  background: #000;
11
11
  overflow: hidden;
12
12
  }
13
- .gt-player-canvas[data-v-00879d38] {
13
+ .gt-player-canvas[data-v-4c26033e] {
14
14
  width: 100%;
15
15
  height: 100%;
16
16
  object-fit: contain;
17
17
  }
18
- .gt-placeholder[data-v-00879d38] {
18
+ .gt-placeholder[data-v-4c26033e] {
19
19
  position: absolute;
20
20
  top: 0;
21
21
  left: 0;
@@ -28,7 +28,7 @@
28
28
  }
29
29
 
30
30
  /* 加载中动画 */
31
- .gt-loading-spinner[data-v-00879d38] {
31
+ .gt-loading-spinner[data-v-4c26033e] {
32
32
  position: absolute;
33
33
  top: 0;
34
34
  left: 0;
@@ -40,22 +40,169 @@
40
40
  background: rgba(0, 0, 0, 0.5);
41
41
  z-index: 10;
42
42
  }
43
- .gt-spinner[data-v-00879d38] {
44
- width: 8vmin;
45
- height: 8vmin;
46
- border: 0.5vmin solid rgba(255, 255, 255, 0.3);
43
+ .gt-loading-content[data-v-4c26033e] {
44
+ display: flex;
45
+ flex-direction: column;
46
+ align-items: center;
47
+ gap: 16px;
48
+ }
49
+ .gt-spinner[data-v-4c26033e] {
50
+ width: 10%;
51
+ max-width: 48px;
52
+ min-width: 20px;
53
+ aspect-ratio: 1/1;
54
+ border: 0.3em solid rgba(255, 255, 255, 0.3);
47
55
  border-top-color: #fff;
48
56
  border-radius: 50%;
49
- animation: gt-spin-00879d38 1s linear infinite;
57
+ animation: gt-spin-4c26033e 1s linear infinite;
58
+ }
59
+ .gt-loading-text[data-v-4c26033e] {
60
+ color: rgba(255, 255, 255, 0.85);
61
+ font-size: 13px;
62
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
63
+ text-align: center;
64
+ padding: 0 20px;
50
65
  }
51
- @keyframes gt-spin-00879d38 {
66
+
67
+ /* 加载进度条 */
68
+ .gt-loading-progress[data-v-4c26033e] {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 12px;
72
+ padding: 0 20px;
73
+ width: 100%;
74
+ max-width: 280px;
75
+ }
76
+ .gt-progress-bar-bg[data-v-4c26033e] {
77
+ flex: 1;
78
+ height: 4px;
79
+ background: rgba(255, 255, 255, 0.2);
80
+ border-radius: 2px;
81
+ overflow: hidden;
82
+ }
83
+ .gt-progress-bar-fill[data-v-4c26033e] {
84
+ height: 100%;
85
+ background: linear-gradient(90deg, #ff2d55, #ff6b6b);
86
+ border-radius: 2px;
87
+ transition: width 0.2s ease;
88
+ }
89
+ .gt-progress-text[data-v-4c26033e] {
90
+ color: rgba(255, 255, 255, 0.9);
91
+ font-size: 12px;
92
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
93
+ min-width: 36px;
94
+ text-align: right;
95
+ font-variant-numeric: tabular-nums;
96
+ }
97
+ @keyframes gt-spin-4c26033e {
52
98
  to {
53
99
  transform: rotate(360deg);
54
100
  }
55
101
  }
56
102
 
103
+ /* 错误提示 */
104
+ .gt-error-message[data-v-4c26033e] {
105
+ position: absolute;
106
+ top: 0;
107
+ left: 0;
108
+ right: 0;
109
+ bottom: 0;
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ background: rgba(0, 0, 0, 0.75);
114
+ z-index: 15;
115
+ animation: gt-error-fade-in-4c26033e 0.25s ease;
116
+ }
117
+ @keyframes gt-error-fade-in-4c26033e {
118
+ from {
119
+ opacity: 0;
120
+ }
121
+ to {
122
+ opacity: 1;
123
+ }
124
+ }
125
+ .gt-error-content[data-v-4c26033e] {
126
+ display: flex;
127
+ align-items: flex-start;
128
+ gap: 16px;
129
+ padding: 20px 24px;
130
+ background: rgba(60, 60, 60, 0.95);
131
+ border: 1px solid rgba(255, 255, 255, 0.1);
132
+ border-radius: 12px;
133
+ max-width: 85%;
134
+ min-width: 280px;
135
+ backdrop-filter: blur(12px);
136
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(255, 255, 255, 0.05) inset;
137
+ animation: gt-error-slide-in-4c26033e 0.3s ease;
138
+ }
139
+ @keyframes gt-error-slide-in-4c26033e {
140
+ from {
141
+ opacity: 0;
142
+ transform: translateY(-10px) scale(0.95);
143
+ }
144
+ to {
145
+ opacity: 1;
146
+ transform: translateY(0) scale(1);
147
+ }
148
+ }
149
+ .gt-error-icon-wrapper[data-v-4c26033e] {
150
+ flex-shrink: 0;
151
+ width: 40px;
152
+ height: 40px;
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ background: rgba(255, 77, 77, 0.2);
157
+ border-radius: 50%;
158
+ }
159
+ .gt-error-icon[data-v-4c26033e] {
160
+ width: 22px;
161
+ height: 22px;
162
+ color: #ff4d4f;
163
+ }
164
+ .gt-error-body[data-v-4c26033e] {
165
+ flex: 1;
166
+ min-width: 0;
167
+ }
168
+ .gt-error-title[data-v-4c26033e] {
169
+ color: #ff4d4f;
170
+ font-size: 15px;
171
+ font-weight: 600;
172
+ margin-bottom: 6px;
173
+ }
174
+ .gt-error-text[data-v-4c26033e] {
175
+ color: rgba(255, 255, 255, 0.85);
176
+ font-size: 13px;
177
+ line-height: 1.5;
178
+ word-break: break-word;
179
+ }
180
+ .gt-error-retry[data-v-4c26033e] {
181
+ flex-shrink: 0;
182
+ width: 32px;
183
+ height: 32px;
184
+ border: none;
185
+ border-radius: 50%;
186
+ background: rgba(255, 255, 255, 0.15);
187
+ color: rgba(255, 255, 255, 0.9);
188
+ cursor: pointer;
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ transition: all 0.2s ease;
193
+ margin-left: 8px;
194
+ }
195
+ .gt-error-retry[data-v-4c26033e]:hover {
196
+ background: rgba(255, 255, 255, 0.25);
197
+ color: white;
198
+ }
199
+ .gt-error-retry svg[data-v-4c26033e] {
200
+ width: 20px;
201
+ height: 20px;
202
+ }
203
+
57
204
  /* 视频控制条 */
58
- .gt-video-controls[data-v-00879d38] {
205
+ .gt-video-controls[data-v-4c26033e] {
59
206
  position: absolute;
60
207
  bottom: 0;
61
208
  left: 0;
@@ -68,13 +215,13 @@ to {
68
215
  align-items: center;
69
216
  gap: 12px;
70
217
  }
71
- .gt-flex-spacer[data-v-00879d38] {
218
+ .gt-flex-spacer[data-v-4c26033e] {
72
219
  flex: 1;
73
220
  }
74
- .gt-video-controls.visible[data-v-00879d38] {
221
+ .gt-video-controls.visible[data-v-4c26033e] {
75
222
  opacity: 1;
76
223
  }
77
- .gt-control-btn[data-v-00879d38] {
224
+ .gt-control-btn[data-v-4c26033e] {
78
225
  width: 28px;
79
226
  height: 28px;
80
227
  border: none;
@@ -88,14 +235,14 @@ to {
88
235
  transition: all 0.2s ease;
89
236
  flex-shrink: 0;
90
237
  }
91
- .gt-control-btn[data-v-00879d38]:hover {
238
+ .gt-control-btn[data-v-4c26033e]:hover {
92
239
  background: rgba(255, 255, 255, 0.2);
93
240
  }
94
- .gt-control-btn svg[data-v-00879d38] {
241
+ .gt-control-btn svg[data-v-4c26033e] {
95
242
  width: 14px;
96
243
  height: 14px;
97
244
  }
98
- .gt-progress-container[data-v-00879d38] {
245
+ .gt-progress-container[data-v-4c26033e] {
99
246
  flex: 1;
100
247
  position: relative;
101
248
  cursor: pointer;
@@ -103,7 +250,7 @@ to {
103
250
  display: flex;
104
251
  align-items: center;
105
252
  }
106
- .gt-progress-bar[data-v-00879d38] {
253
+ .gt-progress-bar[data-v-4c26033e] {
107
254
  width: 100%;
108
255
  height: 4px;
109
256
  background: rgba(255, 255, 255, 0.2);
@@ -112,10 +259,10 @@ to {
112
259
  overflow: hidden;
113
260
  transition: height 0.2s ease;
114
261
  }
115
- .gt-progress-container:hover .gt-progress-bar[data-v-00879d38] {
262
+ .gt-progress-container:hover .gt-progress-bar[data-v-4c26033e] {
116
263
  height: 6px;
117
264
  }
118
- .gt-progress-buffered[data-v-00879d38] {
265
+ .gt-progress-buffered[data-v-4c26033e] {
119
266
  position: absolute;
120
267
  top: 0;
121
268
  left: 0;
@@ -124,7 +271,7 @@ to {
124
271
  border-radius: 2px;
125
272
  transition: width 0.1s;
126
273
  }
127
- .gt-progress-played[data-v-00879d38] {
274
+ .gt-progress-played[data-v-4c26033e] {
128
275
  position: absolute;
129
276
  top: 0;
130
277
  left: 0;
@@ -133,7 +280,7 @@ to {
133
280
  border-radius: 2px;
134
281
  transition: width 0.1s;
135
282
  }
136
- .gt-progress-handle[data-v-00879d38] {
283
+ .gt-progress-handle[data-v-4c26033e] {
137
284
  position: absolute;
138
285
  right: -6px;
139
286
  top: 50%;
@@ -146,11 +293,11 @@ to {
146
293
  opacity: 0;
147
294
  transition: opacity 0.2s, transform 0.2s;
148
295
  }
149
- .gt-progress-container:hover .gt-progress-handle[data-v-00879d38] {
296
+ .gt-progress-container:hover .gt-progress-handle[data-v-4c26033e] {
150
297
  opacity: 1;
151
298
  transform: translateY(-50%) scale(1.2);
152
299
  }
153
- .gt-progress-tooltip[data-v-00879d38] {
300
+ .gt-progress-tooltip[data-v-4c26033e] {
154
301
  position: absolute;
155
302
  bottom: calc(100% + 8px);
156
303
  transform: translateX(-50%);
@@ -162,20 +309,20 @@ to {
162
309
  white-space: nowrap;
163
310
  pointer-events: none;
164
311
  }
165
- .gt-time-display[data-v-00879d38] {
312
+ .gt-time-display[data-v-4c26033e] {
166
313
  color: white;
167
314
  font-size: 12px;
168
315
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
169
316
  white-space: nowrap;
170
317
  flex-shrink: 0;
171
318
  }
172
- .gt-time-separator[data-v-00879d38] {
319
+ .gt-time-separator[data-v-4c26033e] {
173
320
  margin: 0 4px;
174
321
  opacity: 0.6;
175
322
  }
176
323
 
177
324
  /* 直播指示器 */
178
- .gt-live-indicator[data-v-00879d38] {
325
+ .gt-live-indicator[data-v-4c26033e] {
179
326
  display: flex;
180
327
  align-items: center;
181
328
  gap: 6px;
@@ -183,17 +330,17 @@ to {
183
330
  font-size: 12px;
184
331
  font-weight: 500;
185
332
  }
186
- .gt-live-dot[data-v-00879d38] {
333
+ .gt-live-dot[data-v-4c26033e] {
187
334
  width: 8px;
188
335
  height: 8px;
189
336
  background: #ff2d55;
190
337
  border-radius: 50%;
191
- animation: gt-live-pulse-00879d38 1.5s ease-in-out infinite;
338
+ animation: gt-live-pulse-4c26033e 1.5s ease-in-out infinite;
192
339
  }
193
- .gt-live-text[data-v-00879d38] {
340
+ .gt-live-text[data-v-4c26033e] {
194
341
  color: #ff2d55;
195
342
  }
196
- @keyframes gt-live-pulse-00879d38 {
343
+ @keyframes gt-live-pulse-4c26033e {
197
344
  0%, 100% {
198
345
  opacity: 1;
199
346
  }
@@ -202,8 +349,62 @@ to {
202
349
  }
203
350
  }
204
351
 
352
+ /* 倍速按钮 */
353
+ .gt-playback-rate-container[data-v-4c26033e] {
354
+ position: relative;
355
+ flex-shrink: 0;
356
+ }
357
+ .gt-playback-rate-btn[data-v-4c26033e] {
358
+ width: auto !important;
359
+ min-width: 28px;
360
+ padding: 0 8px;
361
+ font-size: 12px;
362
+ font-weight: 500;
363
+ }
364
+ .gt-playback-rate-text[data-v-4c26033e] {
365
+ color: white;
366
+ }
367
+ .gt-playback-rate-menu[data-v-4c26033e] {
368
+ position: absolute;
369
+ bottom: calc(100% + 8px);
370
+ left: 50%;
371
+ transform: translateX(-50%);
372
+ background: rgba(0, 0, 0, 0.85);
373
+ border-radius: 6px;
374
+ padding: 4px 0;
375
+ min-width: 60px;
376
+ z-index: 20;
377
+ animation: gt-rate-menu-fade-in-4c26033e 0.15s ease;
378
+ }
379
+ @keyframes gt-rate-menu-fade-in-4c26033e {
380
+ from { opacity: 0; transform: translateX(-50%) translateY(4px);
381
+ }
382
+ to { opacity: 1; transform: translateX(-50%) translateY(0);
383
+ }
384
+ }
385
+ .gt-playback-rate-option[data-v-4c26033e] {
386
+ display: block;
387
+ width: 100%;
388
+ padding: 6px 12px;
389
+ border: none;
390
+ background: transparent;
391
+ color: rgba(255, 255, 255, 0.8);
392
+ font-size: 12px;
393
+ cursor: pointer;
394
+ text-align: center;
395
+ transition: all 0.15s ease;
396
+ }
397
+ .gt-playback-rate-option[data-v-4c26033e]:hover {
398
+ background: rgba(255, 255, 255, 0.1);
399
+ color: white;
400
+ }
401
+ .gt-playback-rate-option.active[data-v-4c26033e] {
402
+ color: #ff2d55;
403
+ font-weight: 500;
404
+ }
405
+
205
406
  /* 居中播放按钮 */
206
- .gt-center-play-btn[data-v-00879d38] {
407
+ .gt-center-play-btn[data-v-4c26033e] {
207
408
  position: absolute;
208
409
  top: 50%;
209
410
  left: 50%;
@@ -218,11 +419,11 @@ to {
218
419
  cursor: pointer;
219
420
  transition: all 0.2s ease;
220
421
  }
221
- .gt-center-play-btn[data-v-00879d38]:hover {
422
+ .gt-center-play-btn[data-v-4c26033e]:hover {
222
423
  background: rgba(0, 0, 0, 0.7);
223
424
  transform: translate(-50%, -50%) scale(1.05);
224
425
  }
225
- .gt-center-play-btn svg[data-v-00879d38] {
426
+ .gt-center-play-btn svg[data-v-4c26033e] {
226
427
  width: 24px;
227
428
  height: 24px;
228
429
  color: white;
@@ -230,7 +431,7 @@ to {
230
431
  }
231
432
 
232
433
  /* 环境信息面板 */
233
- .gt-env-panel[data-v-00879d38] {
434
+ .gt-env-panel[data-v-4c26033e] {
234
435
  position: absolute;
235
436
  top: 12px;
236
437
  left: 12px;
@@ -244,47 +445,74 @@ to {
244
445
  max-height: calc(100% - 24px);
245
446
  overflow-y: auto;
246
447
  backdrop-filter: blur(10px);
247
- animation: gt-env-fade-in-00879d38 0.15s ease;
448
+ animation: gt-env-fade-in-4c26033e 0.15s ease;
248
449
  z-index: 15;
249
450
  }
250
- .gt-env-panel[data-v-00879d38]::-webkit-scrollbar {
451
+ .gt-env-panel[data-v-4c26033e]::-webkit-scrollbar {
251
452
  width: 4px;
252
453
  }
253
- .gt-env-panel[data-v-00879d38]::-webkit-scrollbar-track {
454
+ .gt-env-panel[data-v-4c26033e]::-webkit-scrollbar-track {
254
455
  background: transparent;
255
456
  }
256
- .gt-env-panel[data-v-00879d38]::-webkit-scrollbar-thumb {
457
+ .gt-env-panel[data-v-4c26033e]::-webkit-scrollbar-thumb {
257
458
  background: rgba(255, 255, 255, 0.3);
258
459
  border-radius: 2px;
259
460
  }
260
- @keyframes gt-env-fade-in-00879d38 {
461
+ @keyframes gt-env-fade-in-4c26033e {
261
462
  from { opacity: 0; transform: translateY(-4px);
262
463
  }
263
464
  to { opacity: 1; transform: translateY(0);
264
465
  }
265
466
  }
266
- .gt-env-panel .gt-env-row[data-v-00879d38] {
467
+ .gt-env-panel .gt-env-row[data-v-4c26033e] {
267
468
  display: flex;
268
469
  justify-content: space-between;
269
470
  align-items: center;
270
471
  padding: 2px 0;
271
472
  color: rgba(255, 255, 255, 0.7);
272
473
  }
273
- .gt-env-panel .gt-env-row span[data-v-00879d38]:first-child {
474
+ .gt-env-panel .gt-env-row span[data-v-4c26033e]:first-child {
274
475
  color: rgba(255, 255, 255, 0.5);
275
476
  margin-right: 16px;
276
477
  }
277
- .gt-env-panel .gt-env-row span[data-v-00879d38]:last-child {
478
+ .gt-env-panel .gt-env-row span[data-v-4c26033e]:last-child {
278
479
  font-variant-numeric: tabular-nums;
279
480
  }
280
- .gt-env-panel .gt-env-row .ok[data-v-00879d38] { color: #4caf50;
481
+ .gt-env-panel .gt-env-row .ok[data-v-4c26033e] { color: #4caf50;
281
482
  }
282
- .gt-env-panel .gt-env-row .warn[data-v-00879d38] { color: #ff9800;
483
+ .gt-env-panel .gt-env-row .warn[data-v-4c26033e] { color: #ff9800;
283
484
  }
284
- .gt-env-panel .gt-env-row .err[data-v-00879d38] { color: #f44336;
485
+ .gt-env-panel .gt-env-row .err[data-v-4c26033e] { color: #f44336;
285
486
  }
286
- .gt-env-divider[data-v-00879d38] {
487
+ .gt-env-divider[data-v-4c26033e] {
287
488
  height: 1px;
288
489
  background: rgba(255, 255, 255, 0.1);
289
490
  margin: 4px 0;
290
491
  }
492
+
493
+ /* 播放中缓冲提示 */
494
+ .gt-buffering-indicator[data-v-4c26033e] {
495
+ position: absolute;
496
+ top: 50%;
497
+ left: 50%;
498
+ transform: translate(-50%, -50%);
499
+ z-index: 10;
500
+ }
501
+ .gt-buffering-content[data-v-4c26033e] {
502
+ display: flex;
503
+ align-items: center;
504
+ gap: 8px;
505
+ padding: 8px 16px;
506
+ background: rgba(0, 0, 0, 0.6);
507
+ border-radius: 20px;
508
+ color: white;
509
+ font-size: 13px;
510
+ }
511
+ .gt-buffering-spinner[data-v-4c26033e] {
512
+ width: 16px;
513
+ height: 16px;
514
+ border: 2px solid rgba(255, 255, 255, 0.3);
515
+ border-top-color: #fff;
516
+ border-radius: 50%;
517
+ animation: gt-spin-4c26033e 1s linear infinite;
518
+ }
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  */
6
6
  export { default as EcPlayer } from './components/EcPlayer.vue';
7
7
  export type { EcPlayerProps, EcPlayerEmits, EcPlayerExpose, EcPlayerSource, EcPlayerControlOption, EnvPanelData, EcPlayerGlobalConfig, WasmPathConfig, PlayerOptions } from './types';
8
- export { configureEcPlayer, getGlobalConfig, getWasmConfig, getMergedConfig, getMergedPlayerOptions, resolveWasmPath, DEFAULT_EC_PLAYER_PROPS, DEFAULT_PLAYER_OPTIONS, DEFAULT_WASM_CONFIG, LogLevel } from './types';
8
+ export { configureEcPlayer, getGlobalConfig, getWasmConfig, getMergedConfig, getMergedPlayerOptions, resolveWasmPath, preloadWasm, resetPreloadState, DEFAULT_EC_PLAYER_PROPS, DEFAULT_PLAYER_OPTIONS, DEFAULT_WASM_CONFIG, LogLevel } from './types';
9
9
  export { usePlayer, useControls, useEnvInfo, type UsePlayerReturn, type UseControlsParams, type UseControlsReturn, type UseEnvInfoReturn } from './composables';
10
+ export { WASMLoader } from '@give-tech/ec-player';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAG/D,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACT,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,SAAS,EACT,WAAW,EACX,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAG/D,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACT,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,SAAS,EACT,WAAW,EACX,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA"}