@video-lab/vue 2.0.0 → 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.
@@ -8,6 +8,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
8
8
  muted: undefined;
9
9
  loop: undefined;
10
10
  controls: undefined;
11
+ showErrorOverlay: undefined;
12
+ showLoadingOverlay: undefined;
11
13
  interactive: undefined;
12
14
  playsinline: undefined;
13
15
  debug: undefined;
@@ -18,6 +20,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
18
20
  setMuted(muted: boolean): void;
19
21
  setVolume(volume: number): void;
20
22
  setPlaybackRate(rate: number): void;
23
+ setPageFullscreen(active: boolean): Promise<void>;
21
24
  enterFullscreen(): Promise<void>;
22
25
  exitFullscreen(): Promise<void>;
23
26
  setQuality(level: number | "auto"): void;
@@ -26,9 +29,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
26
29
  pushDanmaku(item: import('@video-lab/protocol').DanmakuItem): void;
27
30
  setDanmakuEnabled(enabled: boolean): void;
28
31
  clearDanmaku(): void;
29
- reconnect(options?: {
30
- resetCounter?: boolean;
31
- }): void;
32
+ retry(): Promise<void>;
32
33
  destroy(): void;
33
34
  getCurrentTime(): number;
34
35
  getDuration(): number;
@@ -36,6 +37,11 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
36
37
  getPlayerHandle(): import('./types').PlayerHandle | null;
37
38
  }, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
38
39
  playerEvent: (payload: {
40
+ event: "pagefullscreenchange";
41
+ payload: {
42
+ active: boolean;
43
+ };
44
+ } | {
39
45
  event: "sourceroute";
40
46
  payload: {
41
47
  outcome: "selected";
@@ -99,8 +105,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
99
105
  } | {
100
106
  event: "volumechange";
101
107
  payload: {
102
- muted: boolean;
103
108
  volume: number;
109
+ muted: boolean;
104
110
  };
105
111
  } | {
106
112
  event: "seeking";
@@ -146,77 +152,80 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
146
152
  } | {
147
153
  event: "autoplayblocked";
148
154
  payload: {};
149
- } | {
150
- event: "reconnectstart";
151
- payload: {
152
- attempt: number;
153
- maxAttempts: number;
154
- 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;
155
- nextDelayMs?: number | undefined;
156
- };
157
- } | {
158
- event: "reconnectsuccess";
159
- payload: {
160
- attempts: number;
161
- };
162
- } | {
163
- event: "reconnectfailed";
164
- payload: {
165
- attempts: 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
155
  } | {
169
156
  event: "recovery";
170
157
  payload: {
171
- attempt: number;
172
- maxAttempts: number;
158
+ sessionId: string;
173
159
  phase: "detected";
174
160
  recoveryId: number;
175
161
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
176
- trigger: "error" | "manual" | "visibility";
162
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
163
+ attempt: number;
164
+ maxAttempts: number;
165
+ elapsedMs: number;
177
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;
178
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";
179
173
  attempt: number;
180
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;
181
179
  phase: "attempting";
182
180
  recoveryId: number;
183
181
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
184
- trigger: "error" | "manual" | "visibility";
185
- 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;
186
- } | {
182
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
187
183
  attempt: number;
188
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
189
  phase: "validating";
190
190
  recoveryId: number;
191
191
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
192
- trigger: "error" | "manual" | "visibility";
193
- 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;
194
- } | {
192
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
195
193
  attempt: number;
196
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;
197
199
  phase: "recovered";
198
200
  recoveryId: number;
199
201
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
200
- trigger: "error" | "manual" | "visibility";
202
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
203
+ attempt: number;
204
+ maxAttempts: number;
205
+ elapsedMs: number;
201
206
  validatedBy: "playing_position_advance";
202
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;
203
208
  } | {
204
209
  outcome: "timeout" | "attempts_exhausted";
205
- attempt: number;
206
- maxAttempts: number;
210
+ sessionId: string;
207
211
  phase: "failed";
208
212
  recoveryId: number;
209
213
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
210
- trigger: "error" | "manual" | "visibility";
211
- 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;
212
- } | {
213
- outcome: "source_changed" | "destroyed" | "superseded";
214
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
214
215
  attempt: number;
215
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;
216
222
  phase: "cancelled";
217
223
  recoveryId: number;
218
224
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
219
- trigger: "error" | "manual" | "visibility";
225
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
226
+ attempt: number;
227
+ maxAttempts: number;
228
+ elapsedMs: number;
220
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;
221
230
  };
222
231
  } | {
@@ -243,6 +252,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
243
252
  reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
244
253
  playable: boolean;
245
254
  recoverable: boolean;
255
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
246
256
  };
247
257
  } | {
248
258
  event: "kernelhealth";
@@ -304,6 +314,290 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
304
314
  to: string | number | boolean | null;
305
315
  };
306
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;
307
601
  ready: (payload: {
308
602
  duration: number;
309
603
  quality: import('@video-lab/protocol').QualityLevel[];
@@ -348,12 +642,6 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
348
642
  }, import('zod').ZodUnion<[import('zod').ZodString, import('zod').ZodNumber, import('zod').ZodBoolean]>, "strip"> | undefined;
349
643
  }) => void;
350
644
  autoplayBlocked: () => void;
351
- reconnectStart: (payload: {
352
- attempt: number;
353
- maxAttempts: number;
354
- }) => void;
355
- reconnectSuccess: () => void;
356
- reconnectFailed: () => void;
357
645
  compatWarning: (payload: {
358
646
  code: string;
359
647
  message: string;
@@ -365,9 +653,10 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
365
653
  durationMs?: number;
366
654
  }) => void;
367
655
  playableChange: (payload: {
656
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
368
657
  playable: boolean;
369
- reason: import('@video-lab/protocol').PlayableReason;
370
658
  recoverable: boolean;
659
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
371
660
  }) => void;
372
661
  kernelHealth: (payload: {
373
662
  reason: "media" | "network" | "other";
@@ -436,6 +725,9 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
436
725
  droppedFrames: number;
437
726
  totalFrames: number;
438
727
  }) => void;
728
+ pageFullscreenChange: (payload: {
729
+ active: boolean;
730
+ }) => void;
439
731
  userAction: (payload: {
440
732
  source: string;
441
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";
@@ -447,6 +739,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
447
739
  muted: undefined;
448
740
  loop: undefined;
449
741
  controls: undefined;
742
+ showErrorOverlay: undefined;
743
+ showLoadingOverlay: undefined;
450
744
  interactive: undefined;
451
745
  playsinline: undefined;
452
746
  debug: undefined;
@@ -480,6 +774,11 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
480
774
  durationMs?: number;
481
775
  }) => any) | undefined;
482
776
  onPlayerEvent?: ((payload: {
777
+ event: "pagefullscreenchange";
778
+ payload: {
779
+ active: boolean;
780
+ };
781
+ } | {
483
782
  event: "sourceroute";
484
783
  payload: {
485
784
  outcome: "selected";
@@ -543,8 +842,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
543
842
  } | {
544
843
  event: "volumechange";
545
844
  payload: {
546
- muted: boolean;
547
845
  volume: number;
846
+ muted: boolean;
548
847
  };
549
848
  } | {
550
849
  event: "seeking";
@@ -590,77 +889,80 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
590
889
  } | {
591
890
  event: "autoplayblocked";
592
891
  payload: {};
593
- } | {
594
- event: "reconnectstart";
595
- payload: {
596
- attempt: number;
597
- maxAttempts: number;
598
- 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;
599
- nextDelayMs?: number | undefined;
600
- };
601
- } | {
602
- event: "reconnectsuccess";
603
- payload: {
604
- attempts: number;
605
- };
606
- } | {
607
- event: "reconnectfailed";
608
- payload: {
609
- attempts: number;
610
- 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;
611
- };
612
892
  } | {
613
893
  event: "recovery";
614
894
  payload: {
615
- attempt: number;
616
- maxAttempts: number;
895
+ sessionId: string;
617
896
  phase: "detected";
618
897
  recoveryId: number;
619
898
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
620
- trigger: "error" | "manual" | "visibility";
899
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
900
+ attempt: number;
901
+ maxAttempts: number;
902
+ elapsedMs: number;
621
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;
622
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";
623
910
  attempt: number;
624
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;
625
916
  phase: "attempting";
626
917
  recoveryId: number;
627
918
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
628
- trigger: "error" | "manual" | "visibility";
629
- 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;
630
- } | {
919
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
631
920
  attempt: number;
632
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;
633
926
  phase: "validating";
634
927
  recoveryId: number;
635
928
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
636
- trigger: "error" | "manual" | "visibility";
637
- 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;
638
- } | {
929
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
639
930
  attempt: number;
640
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;
641
936
  phase: "recovered";
642
937
  recoveryId: number;
643
938
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
644
- trigger: "error" | "manual" | "visibility";
939
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
940
+ attempt: number;
941
+ maxAttempts: number;
942
+ elapsedMs: number;
645
943
  validatedBy: "playing_position_advance";
646
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;
647
945
  } | {
648
946
  outcome: "timeout" | "attempts_exhausted";
649
- attempt: number;
650
- maxAttempts: number;
947
+ sessionId: string;
651
948
  phase: "failed";
652
949
  recoveryId: number;
653
950
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
654
- trigger: "error" | "manual" | "visibility";
655
- 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;
656
- } | {
657
- outcome: "source_changed" | "destroyed" | "superseded";
951
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
658
952
  attempt: number;
659
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;
660
959
  phase: "cancelled";
661
960
  recoveryId: number;
662
961
  strategy: "reconnect" | "media_recovery" | "visibility_reload";
663
- trigger: "error" | "manual" | "visibility";
962
+ trigger: "error" | "manual" | "visibility" | "stall" | "startup_timeout";
963
+ attempt: number;
964
+ maxAttempts: number;
965
+ elapsedMs: number;
664
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;
665
967
  };
666
968
  } | {
@@ -687,6 +989,7 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
687
989
  reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
688
990
  playable: boolean;
689
991
  recoverable: boolean;
992
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
690
993
  };
691
994
  } | {
692
995
  event: "kernelhealth";
@@ -748,6 +1051,290 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
748
1051
  to: string | number | boolean | null;
749
1052
  };
750
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;
751
1338
  onReady?: ((payload: {
752
1339
  duration: number;
753
1340
  quality: import('@video-lab/protocol').QualityLevel[];
@@ -769,21 +1356,16 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
769
1356
  id: number | null;
770
1357
  }) => any) | undefined;
771
1358
  onAutoplayBlocked?: (() => any) | undefined;
772
- onReconnectStart?: ((payload: {
773
- attempt: number;
774
- maxAttempts: number;
775
- }) => any) | undefined;
776
- onReconnectSuccess?: (() => any) | undefined;
777
- onReconnectFailed?: (() => any) | undefined;
778
1359
  onCompatWarning?: ((payload: {
779
1360
  code: string;
780
1361
  message: string;
781
1362
  ua: string;
782
1363
  }) => any) | undefined;
783
1364
  onPlayableChange?: ((payload: {
1365
+ reason: "error" | "stalled" | "ok" | "initializing" | "buffering" | "reconnecting" | "autoplay_blocked" | "frame_disconnected" | "degraded";
784
1366
  playable: boolean;
785
- reason: import('@video-lab/protocol').PlayableReason;
786
1367
  recoverable: boolean;
1368
+ action?: "play" | "none" | "retry" | "replace-source" | "recreate-frame" | undefined;
787
1369
  }) => any) | undefined;
788
1370
  onKernelHealth?: ((payload: {
789
1371
  reason: "media" | "network" | "other";
@@ -852,6 +1434,9 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
852
1434
  droppedFrames: number;
853
1435
  totalFrames: number;
854
1436
  }) => any) | undefined;
1437
+ onPageFullscreenChange?: ((payload: {
1438
+ active: boolean;
1439
+ }) => any) | undefined;
855
1440
  onUserAction?: ((payload: {
856
1441
  source: string;
857
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";
@@ -863,6 +1448,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_WithDefaults<
863
1448
  muted: boolean;
864
1449
  loop: boolean;
865
1450
  controls: boolean;
1451
+ showErrorOverlay: boolean;
1452
+ showLoadingOverlay: boolean;
866
1453
  interactive: boolean;
867
1454
  playsinline: boolean;
868
1455
  debug: boolean;