@video-lab/vue 1.0.1 → 3.0.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.
@@ -3,13 +3,24 @@ declare var __VLS_5: {};
3
3
  type __VLS_Slots = {} & {
4
4
  'ssr-placeholder'?: (props: typeof __VLS_5) => any;
5
5
  };
6
- declare const __VLS_component: import('vue').DefineComponent<VideoPlayerProps, {
6
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<VideoPlayerProps>, {
7
+ autoplay: undefined;
8
+ muted: undefined;
9
+ loop: undefined;
10
+ controls: undefined;
11
+ showErrorOverlay: undefined;
12
+ showLoadingOverlay: undefined;
13
+ interactive: undefined;
14
+ playsinline: undefined;
15
+ debug: undefined;
16
+ }>, {
7
17
  play(): Promise<void>;
8
18
  pause(): void;
9
19
  seek(time: number): void;
10
20
  setMuted(muted: boolean): void;
11
21
  setVolume(volume: number): void;
12
22
  setPlaybackRate(rate: number): void;
23
+ setPageFullscreen(active: boolean): Promise<void>;
13
24
  enterFullscreen(): Promise<void>;
14
25
  exitFullscreen(): Promise<void>;
15
26
  setQuality(level: number | "auto"): void;
@@ -18,32 +29,1453 @@ declare const __VLS_component: import('vue').DefineComponent<VideoPlayerProps, {
18
29
  pushDanmaku(item: import('@video-lab/protocol').DanmakuItem): void;
19
30
  setDanmakuEnabled(enabled: boolean): void;
20
31
  clearDanmaku(): void;
21
- reconnect(options?: {
22
- resetCounter?: boolean;
23
- }): void;
32
+ retry(): Promise<void>;
24
33
  destroy(): void;
25
34
  getCurrentTime(): number;
26
35
  getDuration(): number;
27
36
  getPlaybackContext(): import('@video-lab/protocol').PlaybackContext | null;
28
37
  getPlayerHandle(): import('./types').PlayerHandle | null;
29
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
30
- [x: string]: any;
31
- }, string, import('vue').PublicProps, Readonly<VideoPlayerProps> & Readonly<{
32
- [x: `on${Capitalize<any>}`]: ((...args: any) => any) | undefined;
33
- }>, {
38
+ }, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
39
+ playerEvent: (payload: {
40
+ event: "pagefullscreenchange";
41
+ payload: {
42
+ active: boolean;
43
+ };
44
+ } | {
45
+ event: "sourceroute";
46
+ payload: {
47
+ outcome: "selected";
48
+ sessionId: string;
49
+ candidateTypes: ("mp4" | "hls" | "flv")[];
50
+ streamKind: "live" | "vod";
51
+ runtime: {
52
+ platform: "unknown" | "ios" | "android" | "desktop";
53
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
54
+ mse: "standard" | "managed" | "unavailable";
55
+ };
56
+ mediaType: "mp4" | "hls" | "flv";
57
+ kernel: "native" | "hls.js" | "flv.js";
58
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
59
+ } | {
60
+ outcome: "unsupported";
61
+ sessionId: string;
62
+ candidateTypes: ("mp4" | "hls" | "flv")[];
63
+ streamKind: "live" | "vod";
64
+ runtime: {
65
+ platform: "unknown" | "ios" | "android" | "desktop";
66
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
67
+ mse: "standard" | "managed" | "unavailable";
68
+ };
69
+ mediaType: null;
70
+ kernel: null;
71
+ reason: "no_supported_candidate";
72
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
73
+ };
74
+ } | {
75
+ event: "ready";
76
+ payload: {
77
+ duration: number;
78
+ quality: {
79
+ level: number;
80
+ label?: string | undefined;
81
+ height?: number | undefined;
82
+ bitrate?: number | undefined;
83
+ }[];
84
+ subtitles?: {
85
+ locale: string;
86
+ label: string;
87
+ id: number;
88
+ }[] | undefined;
89
+ };
90
+ } | {
91
+ event: "play";
92
+ payload: {};
93
+ } | {
94
+ event: "pause";
95
+ payload: {};
96
+ } | {
97
+ event: "ended";
98
+ payload: {};
99
+ } | {
100
+ event: "timeupdate";
101
+ payload: {
102
+ duration: number;
103
+ time: number;
104
+ };
105
+ } | {
106
+ event: "volumechange";
107
+ payload: {
108
+ volume: number;
109
+ muted: boolean;
110
+ };
111
+ } | {
112
+ event: "seeking";
113
+ payload: {
114
+ time: number;
115
+ };
116
+ } | {
117
+ event: "seeked";
118
+ payload: {
119
+ time: number;
120
+ };
121
+ } | {
122
+ event: "waiting";
123
+ payload: {};
124
+ } | {
125
+ event: "playing";
126
+ payload: {};
127
+ } | {
128
+ event: "qualitychange";
129
+ payload: {
130
+ auto: boolean;
131
+ level: number;
132
+ };
133
+ } | {
134
+ event: "subtitlechange";
135
+ payload: {
136
+ id: number | null;
137
+ };
138
+ } | {
139
+ event: "error";
140
+ payload: {
141
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
142
+ message: string;
143
+ retryable: boolean;
144
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
145
+ cause?: import('zod').objectOutputType<{
146
+ name: import('zod').ZodString;
147
+ message: import('zod').ZodString;
148
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
149
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
150
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
151
+ };
152
+ } | {
153
+ event: "autoplayblocked";
154
+ payload: {};
155
+ } | {
156
+ event: "recovery";
157
+ payload: {
158
+ sessionId: string;
159
+ phase: "detected";
160
+ recoveryId: number;
161
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
162
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
163
+ attempt: number;
164
+ maxAttempts: number;
165
+ elapsedMs: number;
166
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
167
+ } | {
168
+ sessionId: string;
169
+ phase: "backoff";
170
+ recoveryId: number;
171
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
172
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
173
+ attempt: number;
174
+ maxAttempts: number;
175
+ elapsedMs: number;
176
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
177
+ } | {
178
+ sessionId: string;
179
+ phase: "attempting";
180
+ recoveryId: number;
181
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
182
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
183
+ attempt: number;
184
+ maxAttempts: number;
185
+ elapsedMs: number;
186
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
187
+ } | {
188
+ sessionId: string;
189
+ phase: "validating";
190
+ recoveryId: number;
191
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
192
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
193
+ attempt: number;
194
+ maxAttempts: number;
195
+ elapsedMs: number;
196
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
197
+ } | {
198
+ sessionId: string;
199
+ phase: "recovered";
200
+ recoveryId: number;
201
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
202
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
203
+ attempt: number;
204
+ maxAttempts: number;
205
+ elapsedMs: number;
206
+ validatedBy: "playing_position_advance";
207
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
208
+ } | {
209
+ outcome: "timeout" | "attempts_exhausted";
210
+ sessionId: string;
211
+ phase: "failed";
212
+ recoveryId: number;
213
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
214
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
215
+ attempt: number;
216
+ maxAttempts: number;
217
+ elapsedMs: number;
218
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
219
+ } | {
220
+ outcome: "source_changed" | "destroyed" | "superseded" | "user_paused" | "natural_recovery";
221
+ sessionId: string;
222
+ phase: "cancelled";
223
+ recoveryId: number;
224
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
225
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
226
+ attempt: number;
227
+ maxAttempts: number;
228
+ elapsedMs: number;
229
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
230
+ };
231
+ } | {
232
+ event: "compatwarning";
233
+ payload: {
234
+ code: "W_BROWSER_INCOMPATIBLE" | "W_VERSION_MISMATCH" | "W_EVENT_REJECTED";
235
+ message: string;
236
+ ua: string;
237
+ hostVersion?: string | undefined;
238
+ iframeVersion?: string | undefined;
239
+ rejectedEvent?: string | undefined;
240
+ };
241
+ } | {
242
+ event: "stalled";
243
+ payload: {
244
+ phase: "start" | "end";
245
+ position: number;
246
+ durationMs?: number | undefined;
247
+ kind?: "seek" | "playback" | "firstframe" | undefined;
248
+ };
249
+ } | {
250
+ event: "playablechange";
251
+ payload: {
252
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
253
+ playable: boolean;
254
+ recoverable: boolean;
255
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
256
+ };
257
+ } | {
258
+ event: "kernelhealth";
259
+ payload: {
260
+ reason: "media" | "network" | "other";
261
+ durationMs: number;
262
+ degraded: boolean;
263
+ count: number;
264
+ detail: string;
265
+ };
266
+ } | {
267
+ event: "audiohealth";
268
+ payload: {
269
+ reason: "audio_data_gap";
270
+ durationMs: number;
271
+ degraded: boolean;
272
+ };
273
+ } | {
274
+ event: "bufferhealth";
275
+ payload: {
276
+ draining: boolean;
277
+ marginSec: number;
278
+ };
279
+ } | {
280
+ event: "contextchange";
281
+ payload: {
282
+ sessionId: string;
283
+ kernel: "native" | "hls.js" | "flv.js";
284
+ position: number;
285
+ qualityLevel: number | null;
286
+ srcOrigin: string;
287
+ srcPath: string;
288
+ streamKind?: "live" | "vod" | undefined;
289
+ runtime?: {
290
+ platform: "unknown" | "ios" | "android" | "desktop";
291
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
292
+ mse: "standard" | "managed" | "unavailable";
293
+ } | undefined;
294
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
295
+ };
296
+ } | {
297
+ event: "firstframe";
298
+ payload: {
299
+ fvt: number;
300
+ };
301
+ } | {
302
+ event: "framefreeze";
303
+ payload: {
304
+ durationMs: number;
305
+ droppedFrames: number;
306
+ totalFrames: number;
307
+ };
308
+ } | {
309
+ event: "useraction";
310
+ payload: {
311
+ source: string;
312
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
313
+ from: string | number | boolean | null;
314
+ to: string | number | boolean | null;
315
+ };
316
+ }) => void;
317
+ deliveredPlayerEvent: (payload: {
318
+ event: {
319
+ event: "pagefullscreenchange";
320
+ payload: {
321
+ active: boolean;
322
+ };
323
+ } | {
324
+ event: "sourceroute";
325
+ payload: {
326
+ outcome: "selected";
327
+ sessionId: string;
328
+ candidateTypes: ("mp4" | "hls" | "flv")[];
329
+ streamKind: "live" | "vod";
330
+ runtime: {
331
+ platform: "unknown" | "ios" | "android" | "desktop";
332
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
333
+ mse: "standard" | "managed" | "unavailable";
334
+ };
335
+ mediaType: "mp4" | "hls" | "flv";
336
+ kernel: "native" | "hls.js" | "flv.js";
337
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
338
+ } | {
339
+ outcome: "unsupported";
340
+ sessionId: string;
341
+ candidateTypes: ("mp4" | "hls" | "flv")[];
342
+ streamKind: "live" | "vod";
343
+ runtime: {
344
+ platform: "unknown" | "ios" | "android" | "desktop";
345
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
346
+ mse: "standard" | "managed" | "unavailable";
347
+ };
348
+ mediaType: null;
349
+ kernel: null;
350
+ reason: "no_supported_candidate";
351
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
352
+ };
353
+ } | {
354
+ event: "ready";
355
+ payload: {
356
+ duration: number;
357
+ quality: {
358
+ level: number;
359
+ label?: string | undefined;
360
+ height?: number | undefined;
361
+ bitrate?: number | undefined;
362
+ }[];
363
+ subtitles?: {
364
+ locale: string;
365
+ label: string;
366
+ id: number;
367
+ }[] | undefined;
368
+ };
369
+ } | {
370
+ event: "play";
371
+ payload: {};
372
+ } | {
373
+ event: "pause";
374
+ payload: {};
375
+ } | {
376
+ event: "ended";
377
+ payload: {};
378
+ } | {
379
+ event: "timeupdate";
380
+ payload: {
381
+ duration: number;
382
+ time: number;
383
+ };
384
+ } | {
385
+ event: "volumechange";
386
+ payload: {
387
+ volume: number;
388
+ muted: boolean;
389
+ };
390
+ } | {
391
+ event: "seeking";
392
+ payload: {
393
+ time: number;
394
+ };
395
+ } | {
396
+ event: "seeked";
397
+ payload: {
398
+ time: number;
399
+ };
400
+ } | {
401
+ event: "waiting";
402
+ payload: {};
403
+ } | {
404
+ event: "playing";
405
+ payload: {};
406
+ } | {
407
+ event: "qualitychange";
408
+ payload: {
409
+ auto: boolean;
410
+ level: number;
411
+ };
412
+ } | {
413
+ event: "subtitlechange";
414
+ payload: {
415
+ id: number | null;
416
+ };
417
+ } | {
418
+ event: "error";
419
+ payload: {
420
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
421
+ message: string;
422
+ retryable: boolean;
423
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
424
+ cause?: import('zod').objectOutputType<{
425
+ name: import('zod').ZodString;
426
+ message: import('zod').ZodString;
427
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
428
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
429
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
430
+ };
431
+ } | {
432
+ event: "autoplayblocked";
433
+ payload: {};
434
+ } | {
435
+ event: "recovery";
436
+ payload: {
437
+ sessionId: string;
438
+ phase: "detected";
439
+ recoveryId: number;
440
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
441
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
442
+ attempt: number;
443
+ maxAttempts: number;
444
+ elapsedMs: number;
445
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
446
+ } | {
447
+ sessionId: string;
448
+ phase: "backoff";
449
+ recoveryId: number;
450
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
451
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
452
+ attempt: number;
453
+ maxAttempts: number;
454
+ elapsedMs: number;
455
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
456
+ } | {
457
+ sessionId: string;
458
+ phase: "attempting";
459
+ recoveryId: number;
460
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
461
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
462
+ attempt: number;
463
+ maxAttempts: number;
464
+ elapsedMs: number;
465
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
466
+ } | {
467
+ sessionId: string;
468
+ phase: "validating";
469
+ recoveryId: number;
470
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
471
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
472
+ attempt: number;
473
+ maxAttempts: number;
474
+ elapsedMs: number;
475
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
476
+ } | {
477
+ sessionId: string;
478
+ phase: "recovered";
479
+ recoveryId: number;
480
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
481
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
482
+ attempt: number;
483
+ maxAttempts: number;
484
+ elapsedMs: number;
485
+ validatedBy: "playing_position_advance";
486
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
487
+ } | {
488
+ outcome: "timeout" | "attempts_exhausted";
489
+ sessionId: string;
490
+ phase: "failed";
491
+ recoveryId: number;
492
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
493
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
494
+ attempt: number;
495
+ maxAttempts: number;
496
+ elapsedMs: number;
497
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
498
+ } | {
499
+ outcome: "source_changed" | "destroyed" | "superseded" | "user_paused" | "natural_recovery";
500
+ sessionId: string;
501
+ phase: "cancelled";
502
+ recoveryId: number;
503
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
504
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
505
+ attempt: number;
506
+ maxAttempts: number;
507
+ elapsedMs: number;
508
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
509
+ };
510
+ } | {
511
+ event: "compatwarning";
512
+ payload: {
513
+ code: "W_BROWSER_INCOMPATIBLE" | "W_VERSION_MISMATCH" | "W_EVENT_REJECTED";
514
+ message: string;
515
+ ua: string;
516
+ hostVersion?: string | undefined;
517
+ iframeVersion?: string | undefined;
518
+ rejectedEvent?: string | undefined;
519
+ };
520
+ } | {
521
+ event: "stalled";
522
+ payload: {
523
+ phase: "start" | "end";
524
+ position: number;
525
+ durationMs?: number | undefined;
526
+ kind?: "seek" | "playback" | "firstframe" | undefined;
527
+ };
528
+ } | {
529
+ event: "playablechange";
530
+ payload: {
531
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
532
+ playable: boolean;
533
+ recoverable: boolean;
534
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
535
+ };
536
+ } | {
537
+ event: "kernelhealth";
538
+ payload: {
539
+ reason: "media" | "network" | "other";
540
+ durationMs: number;
541
+ degraded: boolean;
542
+ count: number;
543
+ detail: string;
544
+ };
545
+ } | {
546
+ event: "audiohealth";
547
+ payload: {
548
+ reason: "audio_data_gap";
549
+ durationMs: number;
550
+ degraded: boolean;
551
+ };
552
+ } | {
553
+ event: "bufferhealth";
554
+ payload: {
555
+ draining: boolean;
556
+ marginSec: number;
557
+ };
558
+ } | {
559
+ event: "contextchange";
560
+ payload: {
561
+ sessionId: string;
562
+ kernel: "native" | "hls.js" | "flv.js";
563
+ position: number;
564
+ qualityLevel: number | null;
565
+ srcOrigin: string;
566
+ srcPath: string;
567
+ streamKind?: "live" | "vod" | undefined;
568
+ runtime?: {
569
+ platform: "unknown" | "ios" | "android" | "desktop";
570
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
571
+ mse: "standard" | "managed" | "unavailable";
572
+ } | undefined;
573
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
574
+ };
575
+ } | {
576
+ event: "firstframe";
577
+ payload: {
578
+ fvt: number;
579
+ };
580
+ } | {
581
+ event: "framefreeze";
582
+ payload: {
583
+ durationMs: number;
584
+ droppedFrames: number;
585
+ totalFrames: number;
586
+ };
587
+ } | {
588
+ event: "useraction";
589
+ payload: {
590
+ source: string;
591
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
592
+ from: string | number | boolean | null;
593
+ to: string | number | boolean | null;
594
+ };
595
+ };
596
+ producerSessionId: string;
597
+ sequence: number;
598
+ deliveryId: string;
599
+ occurredAtMs: number;
600
+ }) => void;
601
+ ready: (payload: {
602
+ duration: number;
603
+ quality: import('@video-lab/protocol').QualityLevel[];
604
+ subtitles?: import('@video-lab/protocol').SubtitleTrackInfo[];
605
+ }) => void;
606
+ play: () => void;
607
+ pause: () => void;
608
+ ended: () => void;
609
+ timeUpdate: (payload: {
610
+ time: number;
611
+ duration: number;
612
+ }) => void;
613
+ volumeChange: (payload: {
614
+ volume: number;
615
+ muted: boolean;
616
+ }) => void;
617
+ seeking: (payload: {
618
+ time: number;
619
+ }) => void;
620
+ seeked: (payload: {
621
+ time: number;
622
+ }) => void;
623
+ waiting: () => void;
624
+ playing: () => void;
625
+ qualityChange: (payload: {
626
+ level: number;
627
+ auto: boolean;
628
+ }) => void;
629
+ subtitleChange: (payload: {
630
+ id: number | null;
631
+ }) => void;
632
+ error: (payload: {
633
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
634
+ message: string;
635
+ retryable: boolean;
636
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
637
+ cause?: import('zod').objectOutputType<{
638
+ name: import('zod').ZodString;
639
+ message: import('zod').ZodString;
640
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
641
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
642
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
643
+ }) => void;
644
+ autoplayBlocked: () => void;
645
+ compatWarning: (payload: {
646
+ code: string;
647
+ message: string;
648
+ ua: string;
649
+ }) => void;
650
+ stalled: (payload: {
651
+ phase: "start" | "end";
652
+ position: number;
653
+ durationMs?: number;
654
+ }) => void;
655
+ playableChange: (payload: {
656
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
657
+ playable: boolean;
658
+ recoverable: boolean;
659
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
660
+ }) => void;
661
+ kernelHealth: (payload: {
662
+ reason: "media" | "network" | "other";
663
+ durationMs: number;
664
+ degraded: boolean;
665
+ count: number;
666
+ detail: string;
667
+ }) => void;
668
+ audioHealth: (payload: {
669
+ reason: "audio_data_gap";
670
+ durationMs: number;
671
+ degraded: boolean;
672
+ }) => void;
673
+ bufferHealth: (payload: {
674
+ draining: boolean;
675
+ marginSec: number;
676
+ }) => void;
677
+ contextChange: (payload: {
678
+ sessionId: string;
679
+ kernel: "native" | "hls.js" | "flv.js";
680
+ position: number;
681
+ qualityLevel: number | null;
682
+ srcOrigin: string;
683
+ srcPath: string;
684
+ streamKind?: "live" | "vod" | undefined;
685
+ runtime?: {
686
+ platform: "unknown" | "ios" | "android" | "desktop";
687
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
688
+ mse: "standard" | "managed" | "unavailable";
689
+ } | undefined;
690
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
691
+ }) => void;
692
+ sourceRoute: (payload: {
693
+ outcome: "selected";
694
+ sessionId: string;
695
+ candidateTypes: ("mp4" | "hls" | "flv")[];
696
+ streamKind: "live" | "vod";
697
+ runtime: {
698
+ platform: "unknown" | "ios" | "android" | "desktop";
699
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
700
+ mse: "standard" | "managed" | "unavailable";
701
+ };
702
+ mediaType: "mp4" | "hls" | "flv";
703
+ kernel: "native" | "hls.js" | "flv.js";
704
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
705
+ } | {
706
+ outcome: "unsupported";
707
+ sessionId: string;
708
+ candidateTypes: ("mp4" | "hls" | "flv")[];
709
+ streamKind: "live" | "vod";
710
+ runtime: {
711
+ platform: "unknown" | "ios" | "android" | "desktop";
712
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
713
+ mse: "standard" | "managed" | "unavailable";
714
+ };
715
+ mediaType: null;
716
+ kernel: null;
717
+ reason: "no_supported_candidate";
718
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
719
+ }) => void;
720
+ firstFrame: (payload: {
721
+ fvt: number;
722
+ }) => void;
723
+ frameFreeze: (payload: {
724
+ durationMs: number;
725
+ droppedFrames: number;
726
+ totalFrames: number;
727
+ }) => void;
728
+ pageFullscreenChange: (payload: {
729
+ active: boolean;
730
+ }) => void;
731
+ userAction: (payload: {
732
+ source: string;
733
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
734
+ from: string | number | boolean | null;
735
+ to: string | number | boolean | null;
736
+ }) => void;
737
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<VideoPlayerProps>, {
738
+ autoplay: undefined;
739
+ muted: undefined;
740
+ loop: undefined;
741
+ controls: undefined;
742
+ showErrorOverlay: undefined;
743
+ showLoadingOverlay: undefined;
744
+ interactive: undefined;
745
+ playsinline: undefined;
746
+ debug: undefined;
747
+ }>>> & {
748
+ onPlay?: (() => any) | undefined;
749
+ onPause?: (() => any) | undefined;
750
+ onEnded?: (() => any) | undefined;
751
+ onSeeking?: ((payload: {
752
+ time: number;
753
+ }) => any) | undefined;
754
+ onSeeked?: ((payload: {
755
+ time: number;
756
+ }) => any) | undefined;
757
+ onWaiting?: (() => any) | undefined;
758
+ onPlaying?: (() => any) | undefined;
759
+ onError?: ((payload: {
760
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
761
+ message: string;
762
+ retryable: boolean;
763
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
764
+ cause?: import('zod').objectOutputType<{
765
+ name: import('zod').ZodString;
766
+ message: import('zod').ZodString;
767
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
768
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
769
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
770
+ }) => any) | undefined;
771
+ onStalled?: ((payload: {
772
+ phase: "start" | "end";
773
+ position: number;
774
+ durationMs?: number;
775
+ }) => any) | undefined;
776
+ onPlayerEvent?: ((payload: {
777
+ event: "pagefullscreenchange";
778
+ payload: {
779
+ active: boolean;
780
+ };
781
+ } | {
782
+ event: "sourceroute";
783
+ payload: {
784
+ outcome: "selected";
785
+ sessionId: string;
786
+ candidateTypes: ("mp4" | "hls" | "flv")[];
787
+ streamKind: "live" | "vod";
788
+ runtime: {
789
+ platform: "unknown" | "ios" | "android" | "desktop";
790
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
791
+ mse: "standard" | "managed" | "unavailable";
792
+ };
793
+ mediaType: "mp4" | "hls" | "flv";
794
+ kernel: "native" | "hls.js" | "flv.js";
795
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
796
+ } | {
797
+ outcome: "unsupported";
798
+ sessionId: string;
799
+ candidateTypes: ("mp4" | "hls" | "flv")[];
800
+ streamKind: "live" | "vod";
801
+ runtime: {
802
+ platform: "unknown" | "ios" | "android" | "desktop";
803
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
804
+ mse: "standard" | "managed" | "unavailable";
805
+ };
806
+ mediaType: null;
807
+ kernel: null;
808
+ reason: "no_supported_candidate";
809
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
810
+ };
811
+ } | {
812
+ event: "ready";
813
+ payload: {
814
+ duration: number;
815
+ quality: {
816
+ level: number;
817
+ label?: string | undefined;
818
+ height?: number | undefined;
819
+ bitrate?: number | undefined;
820
+ }[];
821
+ subtitles?: {
822
+ locale: string;
823
+ label: string;
824
+ id: number;
825
+ }[] | undefined;
826
+ };
827
+ } | {
828
+ event: "play";
829
+ payload: {};
830
+ } | {
831
+ event: "pause";
832
+ payload: {};
833
+ } | {
834
+ event: "ended";
835
+ payload: {};
836
+ } | {
837
+ event: "timeupdate";
838
+ payload: {
839
+ duration: number;
840
+ time: number;
841
+ };
842
+ } | {
843
+ event: "volumechange";
844
+ payload: {
845
+ volume: number;
846
+ muted: boolean;
847
+ };
848
+ } | {
849
+ event: "seeking";
850
+ payload: {
851
+ time: number;
852
+ };
853
+ } | {
854
+ event: "seeked";
855
+ payload: {
856
+ time: number;
857
+ };
858
+ } | {
859
+ event: "waiting";
860
+ payload: {};
861
+ } | {
862
+ event: "playing";
863
+ payload: {};
864
+ } | {
865
+ event: "qualitychange";
866
+ payload: {
867
+ auto: boolean;
868
+ level: number;
869
+ };
870
+ } | {
871
+ event: "subtitlechange";
872
+ payload: {
873
+ id: number | null;
874
+ };
875
+ } | {
876
+ event: "error";
877
+ payload: {
878
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
879
+ message: string;
880
+ retryable: boolean;
881
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
882
+ cause?: import('zod').objectOutputType<{
883
+ name: import('zod').ZodString;
884
+ message: import('zod').ZodString;
885
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
886
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
887
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
888
+ };
889
+ } | {
890
+ event: "autoplayblocked";
891
+ payload: {};
892
+ } | {
893
+ event: "recovery";
894
+ payload: {
895
+ sessionId: string;
896
+ phase: "detected";
897
+ recoveryId: number;
898
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
899
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
900
+ attempt: number;
901
+ maxAttempts: number;
902
+ elapsedMs: number;
903
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
904
+ } | {
905
+ sessionId: string;
906
+ phase: "backoff";
907
+ recoveryId: number;
908
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
909
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
910
+ attempt: number;
911
+ maxAttempts: number;
912
+ elapsedMs: number;
913
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
914
+ } | {
915
+ sessionId: string;
916
+ phase: "attempting";
917
+ recoveryId: number;
918
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
919
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
920
+ attempt: number;
921
+ maxAttempts: number;
922
+ elapsedMs: number;
923
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
924
+ } | {
925
+ sessionId: string;
926
+ phase: "validating";
927
+ recoveryId: number;
928
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
929
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
930
+ attempt: number;
931
+ maxAttempts: number;
932
+ elapsedMs: number;
933
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
934
+ } | {
935
+ sessionId: string;
936
+ phase: "recovered";
937
+ recoveryId: number;
938
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
939
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
940
+ attempt: number;
941
+ maxAttempts: number;
942
+ elapsedMs: number;
943
+ validatedBy: "playing_position_advance";
944
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
945
+ } | {
946
+ outcome: "timeout" | "attempts_exhausted";
947
+ sessionId: string;
948
+ phase: "failed";
949
+ recoveryId: number;
950
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
951
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
952
+ attempt: number;
953
+ maxAttempts: number;
954
+ elapsedMs: number;
955
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
956
+ } | {
957
+ outcome: "source_changed" | "destroyed" | "superseded" | "user_paused" | "natural_recovery";
958
+ sessionId: string;
959
+ phase: "cancelled";
960
+ recoveryId: number;
961
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
962
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
963
+ attempt: number;
964
+ maxAttempts: number;
965
+ elapsedMs: number;
966
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
967
+ };
968
+ } | {
969
+ event: "compatwarning";
970
+ payload: {
971
+ code: "W_BROWSER_INCOMPATIBLE" | "W_VERSION_MISMATCH" | "W_EVENT_REJECTED";
972
+ message: string;
973
+ ua: string;
974
+ hostVersion?: string | undefined;
975
+ iframeVersion?: string | undefined;
976
+ rejectedEvent?: string | undefined;
977
+ };
978
+ } | {
979
+ event: "stalled";
980
+ payload: {
981
+ phase: "start" | "end";
982
+ position: number;
983
+ durationMs?: number | undefined;
984
+ kind?: "seek" | "playback" | "firstframe" | undefined;
985
+ };
986
+ } | {
987
+ event: "playablechange";
988
+ payload: {
989
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
990
+ playable: boolean;
991
+ recoverable: boolean;
992
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
993
+ };
994
+ } | {
995
+ event: "kernelhealth";
996
+ payload: {
997
+ reason: "media" | "network" | "other";
998
+ durationMs: number;
999
+ degraded: boolean;
1000
+ count: number;
1001
+ detail: string;
1002
+ };
1003
+ } | {
1004
+ event: "audiohealth";
1005
+ payload: {
1006
+ reason: "audio_data_gap";
1007
+ durationMs: number;
1008
+ degraded: boolean;
1009
+ };
1010
+ } | {
1011
+ event: "bufferhealth";
1012
+ payload: {
1013
+ draining: boolean;
1014
+ marginSec: number;
1015
+ };
1016
+ } | {
1017
+ event: "contextchange";
1018
+ payload: {
1019
+ sessionId: string;
1020
+ kernel: "native" | "hls.js" | "flv.js";
1021
+ position: number;
1022
+ qualityLevel: number | null;
1023
+ srcOrigin: string;
1024
+ srcPath: string;
1025
+ streamKind?: "live" | "vod" | undefined;
1026
+ runtime?: {
1027
+ platform: "unknown" | "ios" | "android" | "desktop";
1028
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1029
+ mse: "standard" | "managed" | "unavailable";
1030
+ } | undefined;
1031
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
1032
+ };
1033
+ } | {
1034
+ event: "firstframe";
1035
+ payload: {
1036
+ fvt: number;
1037
+ };
1038
+ } | {
1039
+ event: "framefreeze";
1040
+ payload: {
1041
+ durationMs: number;
1042
+ droppedFrames: number;
1043
+ totalFrames: number;
1044
+ };
1045
+ } | {
1046
+ event: "useraction";
1047
+ payload: {
1048
+ source: string;
1049
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
1050
+ from: string | number | boolean | null;
1051
+ to: string | number | boolean | null;
1052
+ };
1053
+ }) => any) | undefined;
1054
+ onDeliveredPlayerEvent?: ((payload: {
1055
+ event: {
1056
+ event: "pagefullscreenchange";
1057
+ payload: {
1058
+ active: boolean;
1059
+ };
1060
+ } | {
1061
+ event: "sourceroute";
1062
+ payload: {
1063
+ outcome: "selected";
1064
+ sessionId: string;
1065
+ candidateTypes: ("mp4" | "hls" | "flv")[];
1066
+ streamKind: "live" | "vod";
1067
+ runtime: {
1068
+ platform: "unknown" | "ios" | "android" | "desktop";
1069
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1070
+ mse: "standard" | "managed" | "unavailable";
1071
+ };
1072
+ mediaType: "mp4" | "hls" | "flv";
1073
+ kernel: "native" | "hls.js" | "flv.js";
1074
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
1075
+ } | {
1076
+ outcome: "unsupported";
1077
+ sessionId: string;
1078
+ candidateTypes: ("mp4" | "hls" | "flv")[];
1079
+ streamKind: "live" | "vod";
1080
+ runtime: {
1081
+ platform: "unknown" | "ios" | "android" | "desktop";
1082
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1083
+ mse: "standard" | "managed" | "unavailable";
1084
+ };
1085
+ mediaType: null;
1086
+ kernel: null;
1087
+ reason: "no_supported_candidate";
1088
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
1089
+ };
1090
+ } | {
1091
+ event: "ready";
1092
+ payload: {
1093
+ duration: number;
1094
+ quality: {
1095
+ level: number;
1096
+ label?: string | undefined;
1097
+ height?: number | undefined;
1098
+ bitrate?: number | undefined;
1099
+ }[];
1100
+ subtitles?: {
1101
+ locale: string;
1102
+ label: string;
1103
+ id: number;
1104
+ }[] | undefined;
1105
+ };
1106
+ } | {
1107
+ event: "play";
1108
+ payload: {};
1109
+ } | {
1110
+ event: "pause";
1111
+ payload: {};
1112
+ } | {
1113
+ event: "ended";
1114
+ payload: {};
1115
+ } | {
1116
+ event: "timeupdate";
1117
+ payload: {
1118
+ duration: number;
1119
+ time: number;
1120
+ };
1121
+ } | {
1122
+ event: "volumechange";
1123
+ payload: {
1124
+ volume: number;
1125
+ muted: boolean;
1126
+ };
1127
+ } | {
1128
+ event: "seeking";
1129
+ payload: {
1130
+ time: number;
1131
+ };
1132
+ } | {
1133
+ event: "seeked";
1134
+ payload: {
1135
+ time: number;
1136
+ };
1137
+ } | {
1138
+ event: "waiting";
1139
+ payload: {};
1140
+ } | {
1141
+ event: "playing";
1142
+ payload: {};
1143
+ } | {
1144
+ event: "qualitychange";
1145
+ payload: {
1146
+ auto: boolean;
1147
+ level: number;
1148
+ };
1149
+ } | {
1150
+ event: "subtitlechange";
1151
+ payload: {
1152
+ id: number | null;
1153
+ };
1154
+ } | {
1155
+ event: "error";
1156
+ payload: {
1157
+ code: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED";
1158
+ message: string;
1159
+ retryable: boolean;
1160
+ category: "autoplay" | "manifest" | "media" | "network" | "auth" | "env";
1161
+ cause?: import('zod').objectOutputType<{
1162
+ name: import('zod').ZodString;
1163
+ message: import('zod').ZodString;
1164
+ code: import('zod').ZodOptional<import('zod').ZodNumber>;
1165
+ status: import('zod').ZodOptional<import('zod').ZodNumber>;
1166
+ }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
1167
+ };
1168
+ } | {
1169
+ event: "autoplayblocked";
1170
+ payload: {};
1171
+ } | {
1172
+ event: "recovery";
1173
+ payload: {
1174
+ sessionId: string;
1175
+ phase: "detected";
1176
+ recoveryId: number;
1177
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1178
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1179
+ attempt: number;
1180
+ maxAttempts: number;
1181
+ elapsedMs: number;
1182
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1183
+ } | {
1184
+ sessionId: string;
1185
+ phase: "backoff";
1186
+ recoveryId: number;
1187
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1188
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1189
+ attempt: number;
1190
+ maxAttempts: number;
1191
+ elapsedMs: number;
1192
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1193
+ } | {
1194
+ sessionId: string;
1195
+ phase: "attempting";
1196
+ recoveryId: number;
1197
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1198
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1199
+ attempt: number;
1200
+ maxAttempts: number;
1201
+ elapsedMs: number;
1202
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1203
+ } | {
1204
+ sessionId: string;
1205
+ phase: "validating";
1206
+ recoveryId: number;
1207
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1208
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1209
+ attempt: number;
1210
+ maxAttempts: number;
1211
+ elapsedMs: number;
1212
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1213
+ } | {
1214
+ sessionId: string;
1215
+ phase: "recovered";
1216
+ recoveryId: number;
1217
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1218
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1219
+ attempt: number;
1220
+ maxAttempts: number;
1221
+ elapsedMs: number;
1222
+ validatedBy: "playing_position_advance";
1223
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1224
+ } | {
1225
+ outcome: "timeout" | "attempts_exhausted";
1226
+ sessionId: string;
1227
+ phase: "failed";
1228
+ recoveryId: number;
1229
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1230
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1231
+ attempt: number;
1232
+ maxAttempts: number;
1233
+ elapsedMs: number;
1234
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1235
+ } | {
1236
+ outcome: "source_changed" | "destroyed" | "superseded" | "user_paused" | "natural_recovery";
1237
+ sessionId: string;
1238
+ phase: "cancelled";
1239
+ recoveryId: number;
1240
+ strategy: "reconnect" | "media_recovery" | "visibility_reload";
1241
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
1242
+ attempt: number;
1243
+ maxAttempts: number;
1244
+ elapsedMs: number;
1245
+ reason?: "E_MEDIA_NOT_SUPPORTED" | "E_MANIFEST_PARSE" | "E_MEDIA_DECODE" | "E_MEDIA_ABORTED" | "E_SUBTITLE_LOAD_FAILED" | "E_AUTOPLAY_BLOCKED" | "E_NETWORK" | "E_NETWORK_TIMEOUT" | "E_AUTH_EXPIRED" | "E_ENV_CSP_BLOCKED" | "E_METHOD_NOT_SUPPORTED" | "E_DANMAKU_SEND_FAILED" | "E_INTERNAL" | "E_UNKNOWN" | "E_PLAYER_DESTROYED" | "E_HANDSHAKE_TIMEOUT" | "E_HANDSHAKE_VERSION_MISMATCH" | "E_LOAD_FAILED" | "E_FRAME_CRASHED" | undefined;
1246
+ };
1247
+ } | {
1248
+ event: "compatwarning";
1249
+ payload: {
1250
+ code: "W_BROWSER_INCOMPATIBLE" | "W_VERSION_MISMATCH" | "W_EVENT_REJECTED";
1251
+ message: string;
1252
+ ua: string;
1253
+ hostVersion?: string | undefined;
1254
+ iframeVersion?: string | undefined;
1255
+ rejectedEvent?: string | undefined;
1256
+ };
1257
+ } | {
1258
+ event: "stalled";
1259
+ payload: {
1260
+ phase: "start" | "end";
1261
+ position: number;
1262
+ durationMs?: number | undefined;
1263
+ kind?: "seek" | "playback" | "firstframe" | undefined;
1264
+ };
1265
+ } | {
1266
+ event: "playablechange";
1267
+ payload: {
1268
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
1269
+ playable: boolean;
1270
+ recoverable: boolean;
1271
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
1272
+ };
1273
+ } | {
1274
+ event: "kernelhealth";
1275
+ payload: {
1276
+ reason: "media" | "network" | "other";
1277
+ durationMs: number;
1278
+ degraded: boolean;
1279
+ count: number;
1280
+ detail: string;
1281
+ };
1282
+ } | {
1283
+ event: "audiohealth";
1284
+ payload: {
1285
+ reason: "audio_data_gap";
1286
+ durationMs: number;
1287
+ degraded: boolean;
1288
+ };
1289
+ } | {
1290
+ event: "bufferhealth";
1291
+ payload: {
1292
+ draining: boolean;
1293
+ marginSec: number;
1294
+ };
1295
+ } | {
1296
+ event: "contextchange";
1297
+ payload: {
1298
+ sessionId: string;
1299
+ kernel: "native" | "hls.js" | "flv.js";
1300
+ position: number;
1301
+ qualityLevel: number | null;
1302
+ srcOrigin: string;
1303
+ srcPath: string;
1304
+ streamKind?: "live" | "vod" | undefined;
1305
+ runtime?: {
1306
+ platform: "unknown" | "ios" | "android" | "desktop";
1307
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1308
+ mse: "standard" | "managed" | "unavailable";
1309
+ } | undefined;
1310
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
1311
+ };
1312
+ } | {
1313
+ event: "firstframe";
1314
+ payload: {
1315
+ fvt: number;
1316
+ };
1317
+ } | {
1318
+ event: "framefreeze";
1319
+ payload: {
1320
+ durationMs: number;
1321
+ droppedFrames: number;
1322
+ totalFrames: number;
1323
+ };
1324
+ } | {
1325
+ event: "useraction";
1326
+ payload: {
1327
+ source: string;
1328
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
1329
+ from: string | number | boolean | null;
1330
+ to: string | number | boolean | null;
1331
+ };
1332
+ };
1333
+ producerSessionId: string;
1334
+ sequence: number;
1335
+ deliveryId: string;
1336
+ occurredAtMs: number;
1337
+ }) => any) | undefined;
1338
+ onReady?: ((payload: {
1339
+ duration: number;
1340
+ quality: import('@video-lab/protocol').QualityLevel[];
1341
+ subtitles?: import('@video-lab/protocol').SubtitleTrackInfo[];
1342
+ }) => any) | undefined;
1343
+ onTimeUpdate?: ((payload: {
1344
+ time: number;
1345
+ duration: number;
1346
+ }) => any) | undefined;
1347
+ onVolumeChange?: ((payload: {
1348
+ volume: number;
1349
+ muted: boolean;
1350
+ }) => any) | undefined;
1351
+ onQualityChange?: ((payload: {
1352
+ level: number;
1353
+ auto: boolean;
1354
+ }) => any) | undefined;
1355
+ onSubtitleChange?: ((payload: {
1356
+ id: number | null;
1357
+ }) => any) | undefined;
1358
+ onAutoplayBlocked?: (() => any) | undefined;
1359
+ onCompatWarning?: ((payload: {
1360
+ code: string;
1361
+ message: string;
1362
+ ua: string;
1363
+ }) => any) | undefined;
1364
+ onPlayableChange?: ((payload: {
1365
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
1366
+ playable: boolean;
1367
+ recoverable: boolean;
1368
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
1369
+ }) => any) | undefined;
1370
+ onKernelHealth?: ((payload: {
1371
+ reason: "media" | "network" | "other";
1372
+ durationMs: number;
1373
+ degraded: boolean;
1374
+ count: number;
1375
+ detail: string;
1376
+ }) => any) | undefined;
1377
+ onAudioHealth?: ((payload: {
1378
+ reason: "audio_data_gap";
1379
+ durationMs: number;
1380
+ degraded: boolean;
1381
+ }) => any) | undefined;
1382
+ onBufferHealth?: ((payload: {
1383
+ draining: boolean;
1384
+ marginSec: number;
1385
+ }) => any) | undefined;
1386
+ onContextChange?: ((payload: {
1387
+ sessionId: string;
1388
+ kernel: "native" | "hls.js" | "flv.js";
1389
+ position: number;
1390
+ qualityLevel: number | null;
1391
+ srcOrigin: string;
1392
+ srcPath: string;
1393
+ streamKind?: "live" | "vod" | undefined;
1394
+ runtime?: {
1395
+ platform: "unknown" | "ios" | "android" | "desktop";
1396
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1397
+ mse: "standard" | "managed" | "unavailable";
1398
+ } | undefined;
1399
+ mediaType?: "mp4" | "hls" | "flv" | undefined;
1400
+ }) => any) | undefined;
1401
+ onSourceRoute?: ((payload: {
1402
+ outcome: "selected";
1403
+ sessionId: string;
1404
+ candidateTypes: ("mp4" | "hls" | "flv")[];
1405
+ streamKind: "live" | "vod";
1406
+ runtime: {
1407
+ platform: "unknown" | "ios" | "android" | "desktop";
1408
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1409
+ mse: "standard" | "managed" | "unavailable";
1410
+ };
1411
+ mediaType: "mp4" | "hls" | "flv";
1412
+ kernel: "native" | "hls.js" | "flv.js";
1413
+ reason: "required_hls" | "live_preference" | "vod_preference" | "native_mp4_fallback";
1414
+ } | {
1415
+ outcome: "unsupported";
1416
+ sessionId: string;
1417
+ candidateTypes: ("mp4" | "hls" | "flv")[];
1418
+ streamKind: "live" | "vod";
1419
+ runtime: {
1420
+ platform: "unknown" | "ios" | "android" | "desktop";
1421
+ browser: "unknown" | "webkit" | "gecko" | "chromium" | "embedded";
1422
+ mse: "standard" | "managed" | "unavailable";
1423
+ };
1424
+ mediaType: null;
1425
+ kernel: null;
1426
+ reason: "no_supported_candidate";
1427
+ errorCode: "E_MEDIA_NOT_SUPPORTED";
1428
+ }) => any) | undefined;
1429
+ onFirstFrame?: ((payload: {
1430
+ fvt: number;
1431
+ }) => any) | undefined;
1432
+ onFrameFreeze?: ((payload: {
1433
+ durationMs: number;
1434
+ droppedFrames: number;
1435
+ totalFrames: number;
1436
+ }) => any) | undefined;
1437
+ onPageFullscreenChange?: ((payload: {
1438
+ active: boolean;
1439
+ }) => any) | undefined;
1440
+ onUserAction?: ((payload: {
1441
+ source: string;
1442
+ action: "seek" | "switch_play_pause" | "switch_fullscreen" | "switch_cssfullscreen" | "switch_css_fullscreen" | "change_definition" | "change_rate" | "change_volume" | "change_muted" | "change_pip" | "rotate" | "shot" | "download" | "switch_danmu" | "error_retry";
1443
+ from: string | number | boolean | null;
1444
+ to: string | number | boolean | null;
1445
+ }) => any) | undefined;
1446
+ }, {
34
1447
  autoplay: boolean;
35
1448
  muted: boolean;
36
1449
  loop: boolean;
37
1450
  controls: boolean;
1451
+ showErrorOverlay: boolean;
1452
+ showLoadingOverlay: boolean;
38
1453
  interactive: boolean;
39
1454
  playsinline: boolean;
40
1455
  debug: boolean;
41
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
1456
+ }, {}>;
42
1457
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
43
1458
  export default _default;
1459
+ type __VLS_WithDefaults<P, D> = {
1460
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_PrettifyLocal<P[K] & {
1461
+ default: D[K];
1462
+ }> : P[K];
1463
+ };
1464
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
1465
+ type __VLS_TypePropsToOption<T> = {
1466
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
1467
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
1468
+ } : {
1469
+ type: import('vue').PropType<T[K]>;
1470
+ required: true;
1471
+ };
1472
+ };
44
1473
  type __VLS_WithSlots<T, S> = T & {
45
1474
  new (): {
46
1475
  $slots: S;
47
1476
  };
48
1477
  };
1478
+ type __VLS_PrettifyLocal<T> = {
1479
+ [K in keyof T]: T[K];
1480
+ } & {};
49
1481
  //# sourceMappingURL=VideoPlayer.vue.d.ts.map