eb-player 1.54.57 → 2.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.
- package/README.md +2 -6
- package/dist/build/default.js +1 -1
- package/dist/build/eb-player.css +2066 -0
- package/dist/build/ebplayer-engines.bundle.js +2393 -0
- package/dist/build/ebplayer-engines.bundle.js.map +1 -0
- package/dist/build/ebplayer.bundle.js +6580 -0
- package/dist/build/ebplayer.bundle.js.map +1 -0
- package/dist/build/theme-forja.css +10 -0
- package/dist/build/theme-forja.js +1 -0
- package/dist/build/theme-modern.css +520 -0
- package/dist/build/theme-radio.css +11 -0
- package/dist/build/theme-radio.js +1 -0
- package/dist/build/theme-snrt.css +11 -0
- package/dist/build/theme-snrt.js +1 -0
- package/dist/build/theme-v2.css +661 -0
- package/dist/build/types/config.d.ts +139 -0
- package/dist/build/types/config.d.ts.map +1 -0
- package/dist/build/types/core/command-handler.d.ts +49 -0
- package/dist/build/types/core/command-handler.d.ts.map +1 -0
- package/dist/build/types/core/config.d.ts +174 -0
- package/dist/build/types/core/config.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-forja.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-forja.entry.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-radio.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-radio.entry.d.ts.map +1 -0
- package/dist/build/types/core/css/theme-snrt.entry.d.ts +2 -0
- package/dist/build/types/core/css/theme-snrt.entry.d.ts.map +1 -0
- package/dist/build/types/core/engine-state-sync.d.ts +38 -0
- package/dist/build/types/core/engine-state-sync.d.ts.map +1 -0
- package/dist/build/types/core/event-bus.d.ts +87 -0
- package/dist/build/types/core/event-bus.d.ts.map +1 -0
- package/dist/build/types/core/fsm.d.ts +27 -0
- package/dist/build/types/core/fsm.d.ts.map +1 -0
- package/dist/build/types/core/i18n.d.ts +51 -0
- package/dist/build/types/core/i18n.d.ts.map +1 -0
- package/dist/build/types/core/index.d.ts +23 -0
- package/dist/build/types/core/index.d.ts.map +1 -0
- package/dist/build/types/core/lifecycle.d.ts +96 -0
- package/dist/build/types/core/lifecycle.d.ts.map +1 -0
- package/dist/build/types/core/player-state.d.ts +15 -0
- package/dist/build/types/core/player-state.d.ts.map +1 -0
- package/dist/build/types/core/types.d.ts +84 -0
- package/dist/build/types/core/types.d.ts.map +1 -0
- package/dist/build/types/eb-player-standalone.d.ts +12 -0
- package/dist/build/types/eb-player-standalone.d.ts.map +1 -0
- package/dist/build/types/eb-player.d.ts +43 -0
- package/dist/build/types/eb-player.d.ts.map +1 -0
- package/dist/build/types/engine-state-sync.d.ts +38 -0
- package/dist/build/types/engine-state-sync.d.ts.map +1 -0
- package/dist/build/types/engines/abr/dash.d.ts +56 -0
- package/dist/build/types/engines/abr/dash.d.ts.map +1 -0
- package/dist/build/types/engines/abr/hls.d.ts +105 -0
- package/dist/build/types/engines/abr/hls.d.ts.map +1 -0
- package/dist/build/types/engines/base-engine.d.ts +56 -0
- package/dist/build/types/engines/base-engine.d.ts.map +1 -0
- package/dist/build/types/engines/cdn-loader.d.ts +20 -0
- package/dist/build/types/engines/cdn-loader.d.ts.map +1 -0
- package/dist/build/types/engines/cdn-token-manager.d.ts +136 -0
- package/dist/build/types/engines/cdn-token-manager.d.ts.map +1 -0
- package/dist/build/types/engines/dash.d.ts +79 -0
- package/dist/build/types/engines/dash.d.ts.map +1 -0
- package/dist/build/types/engines/drm.d.ts +54 -0
- package/dist/build/types/engines/drm.d.ts.map +1 -0
- package/dist/build/types/engines/hls-discontinuity-patch.d.ts +43 -0
- package/dist/build/types/engines/hls-discontinuity-patch.d.ts.map +1 -0
- package/dist/build/types/engines/hls.d.ts +45 -0
- package/dist/build/types/engines/hls.d.ts.map +1 -0
- package/dist/build/types/engines/index.d.ts +26 -0
- package/dist/build/types/engines/index.d.ts.map +1 -0
- package/dist/build/types/engines/ios/hls.d.ts +20 -0
- package/dist/build/types/engines/ios/hls.d.ts.map +1 -0
- package/dist/build/types/engines/poster/hls.d.ts +35 -0
- package/dist/build/types/engines/poster/hls.d.ts.map +1 -0
- package/dist/build/types/engines/retry/dash.d.ts +39 -0
- package/dist/build/types/engines/retry/dash.d.ts.map +1 -0
- package/dist/build/types/engines/retry/hls.d.ts +35 -0
- package/dist/build/types/engines/retry/hls.d.ts.map +1 -0
- package/dist/build/types/engines/snapshot/dash.d.ts +55 -0
- package/dist/build/types/engines/snapshot/dash.d.ts.map +1 -0
- package/dist/build/types/engines/snapshot/hls.d.ts +104 -0
- package/dist/build/types/engines/snapshot/hls.d.ts.map +1 -0
- package/dist/build/types/engines/stall-watchdog.d.ts +41 -0
- package/dist/build/types/engines/stall-watchdog.d.ts.map +1 -0
- package/dist/build/types/event-bus.d.ts +54 -0
- package/dist/build/types/event-bus.d.ts.map +1 -0
- package/dist/build/types/fsm.d.ts +27 -0
- package/dist/build/types/fsm.d.ts.map +1 -0
- package/dist/build/types/i18n.d.ts +51 -0
- package/dist/build/types/i18n.d.ts.map +1 -0
- package/dist/build/types/index.d.ts +21 -0
- package/dist/build/types/index.d.ts.map +1 -0
- package/dist/build/types/integrations/ads-manager.d.ts +32 -0
- package/dist/build/types/integrations/ads-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/chromecast-manager.d.ts +50 -0
- package/dist/build/types/integrations/chromecast-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/epg-manager.d.ts +22 -0
- package/dist/build/types/integrations/epg-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/index.d.ts +6 -0
- package/dist/build/types/integrations/index.d.ts.map +1 -0
- package/dist/build/types/integrations/p2p-manager.d.ts +33 -0
- package/dist/build/types/integrations/p2p-manager.d.ts.map +1 -0
- package/dist/build/types/integrations/playlist-manager.d.ts +21 -0
- package/dist/build/types/integrations/playlist-manager.d.ts.map +1 -0
- package/dist/build/types/lifecycle.d.ts +64 -0
- package/dist/build/types/lifecycle.d.ts.map +1 -0
- package/dist/build/types/player-state.d.ts +15 -0
- package/dist/build/types/player-state.d.ts.map +1 -0
- package/dist/build/types/skin/bars/bottom-bar.d.ts +16 -0
- package/dist/build/types/skin/bars/bottom-bar.d.ts.map +1 -0
- package/dist/build/types/skin/bars/middle-bar.d.ts +16 -0
- package/dist/build/types/skin/bars/middle-bar.d.ts.map +1 -0
- package/dist/build/types/skin/bars/top-bar.d.ts +15 -0
- package/dist/build/types/skin/bars/top-bar.d.ts.map +1 -0
- package/dist/build/types/skin/base-component.d.ts +69 -0
- package/dist/build/types/skin/base-component.d.ts.map +1 -0
- package/dist/build/types/skin/brand/forja-playlist-bar.d.ts +15 -0
- package/dist/build/types/skin/brand/forja-playlist-bar.d.ts.map +1 -0
- package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts +16 -0
- package/dist/build/types/skin/brand/snrt-radio-carousel.d.ts.map +1 -0
- package/dist/build/types/skin/component-registry.d.ts +16 -0
- package/dist/build/types/skin/component-registry.d.ts.map +1 -0
- package/dist/build/types/skin/controllers/auto-hide.d.ts +27 -0
- package/dist/build/types/skin/controllers/auto-hide.d.ts.map +1 -0
- package/dist/build/types/skin/controllers/keyboard.d.ts +29 -0
- package/dist/build/types/skin/controllers/keyboard.d.ts.map +1 -0
- package/dist/build/types/skin/controls/cast-button.d.ts +15 -0
- package/dist/build/types/skin/controls/cast-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/forward-button.d.ts +15 -0
- package/dist/build/types/skin/controls/forward-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/fullscreen-button.d.ts +17 -0
- package/dist/build/types/skin/controls/fullscreen-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/info-button.d.ts +10 -0
- package/dist/build/types/skin/controls/info-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/live-sync-button.d.ts +20 -0
- package/dist/build/types/skin/controls/live-sync-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/pip-button.d.ts +21 -0
- package/dist/build/types/skin/controls/pip-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/play-pause-button.d.ts +14 -0
- package/dist/build/types/skin/controls/play-pause-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/rewind-button.d.ts +15 -0
- package/dist/build/types/skin/controls/rewind-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/seekbar.d.ts +43 -0
- package/dist/build/types/skin/controls/seekbar.d.ts.map +1 -0
- package/dist/build/types/skin/controls/settings-panel.d.ts +45 -0
- package/dist/build/types/skin/controls/settings-panel.d.ts.map +1 -0
- package/dist/build/types/skin/controls/share-button.d.ts +11 -0
- package/dist/build/types/skin/controls/share-button.d.ts.map +1 -0
- package/dist/build/types/skin/controls/time-display.d.ts +19 -0
- package/dist/build/types/skin/controls/time-display.d.ts.map +1 -0
- package/dist/build/types/skin/controls/volume-control.d.ts +21 -0
- package/dist/build/types/skin/controls/volume-control.d.ts.map +1 -0
- package/dist/build/types/skin/icons/icons-modern.d.ts +10 -0
- package/dist/build/types/skin/icons/icons-modern.d.ts.map +1 -0
- package/dist/build/types/skin/icons/icons.d.ts +10 -0
- package/dist/build/types/skin/icons/icons.d.ts.map +1 -0
- package/dist/build/types/skin/icons/sprite.d.ts +39 -0
- package/dist/build/types/skin/icons/sprite.d.ts.map +1 -0
- package/dist/build/types/skin/index.d.ts +24 -0
- package/dist/build/types/skin/index.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/error-message.d.ts +14 -0
- package/dist/build/types/skin/overlays/error-message.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/info-overlay.d.ts +15 -0
- package/dist/build/types/skin/overlays/info-overlay.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/loading-spinner.d.ts +17 -0
- package/dist/build/types/skin/overlays/loading-spinner.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/socials-overlay.d.ts +17 -0
- package/dist/build/types/skin/overlays/socials-overlay.d.ts.map +1 -0
- package/dist/build/types/skin/overlays/toast-notification.d.ts +18 -0
- package/dist/build/types/skin/overlays/toast-notification.d.ts.map +1 -0
- package/dist/build/types/skin/skin-root.d.ts +80 -0
- package/dist/build/types/skin/skin-root.d.ts.map +1 -0
- package/dist/build/types/types.d.ts +41 -0
- package/dist/build/types/types.d.ts.map +1 -0
- package/dist/build/types/utils/chapters.d.ts +16 -0
- package/dist/build/types/utils/chapters.d.ts.map +1 -0
- package/dist/build/types/utils/format-duration.d.ts +9 -0
- package/dist/build/types/utils/format-duration.d.ts.map +1 -0
- package/dist/build/types/utils/format-wall-clock.d.ts +6 -0
- package/dist/build/types/utils/format-wall-clock.d.ts.map +1 -0
- package/dist/build/types/utils/settings-helpers.d.ts +41 -0
- package/dist/build/types/utils/settings-helpers.d.ts.map +1 -0
- package/dist/dev/default.js +6451 -0
- package/dist/dev/default.js.map +1 -0
- package/dist/dev/easybroadcast.js +6654 -0
- package/dist/dev/easybroadcast.js.map +1 -0
- package/dist/dev/index.html +24 -0
- package/dist/eb-player.css +2066 -0
- package/dist/players/default/default.js +400 -1
- package/dist/players/default/index.html +1 -5
- package/dist/players/forja/forja.js +310 -0
- package/dist/players/forja/index.html +1 -0
- package/dist/players/videos/equipe/EB_lequipe-preprod.js +1 -0
- package/dist/players/videos/equipe/EB_lequipe.js +1 -1
- package/dist/players/videos/equipe/equipe.js +1 -1
- package/dist/theme-forja.css +10 -0
- package/dist/theme-modern.css +520 -0
- package/dist/theme-radio.css +11 -0
- package/dist/theme-snrt.css +11 -0
- package/dist/theme-v2.css +661 -0
- package/package.json +34 -3
- package/dist/build/forja.js +0 -1
- package/dist/players/videos/equipe/EB_lequipe-preprod copy.js +0 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CDN Token Manager
|
|
3
|
+
*
|
|
4
|
+
* TypeScript port of component/utils/token.js (CDNTokenManager class, 459 LOC).
|
|
5
|
+
* Supports four token flows: default (Cloudflare query params), easybroadcast/venom
|
|
6
|
+
* (EasyBroadcast format via POST), akamai (path-segment format), and bunny (POST JSON).
|
|
7
|
+
*
|
|
8
|
+
* All sub-types (TokenError, TokenResponse, ResponseParameters) are inlined here
|
|
9
|
+
* since they are only used by CDNTokenManager.
|
|
10
|
+
*/
|
|
11
|
+
export declare const TOKEN_TYPES: Readonly<{
|
|
12
|
+
readonly EASY_B: "easy_b";
|
|
13
|
+
readonly BUNNY: "bunny";
|
|
14
|
+
readonly AKAMAI: "akamai";
|
|
15
|
+
readonly VENOM: "venom";
|
|
16
|
+
}>;
|
|
17
|
+
export type TokenType = typeof TOKEN_TYPES[keyof typeof TOKEN_TYPES];
|
|
18
|
+
export declare const ERROR_TYPES: Readonly<{
|
|
19
|
+
readonly UNKNOWN: "unknown";
|
|
20
|
+
readonly MAX_RETRY: "max_retry";
|
|
21
|
+
readonly FORBIDDEN: "forbidden";
|
|
22
|
+
}>;
|
|
23
|
+
export type ErrorType = typeof ERROR_TYPES[keyof typeof ERROR_TYPES];
|
|
24
|
+
export interface TokenErrorOptions {
|
|
25
|
+
status?: number | string;
|
|
26
|
+
errorCode?: string;
|
|
27
|
+
errorType?: ErrorType | string;
|
|
28
|
+
message?: string | null;
|
|
29
|
+
}
|
|
30
|
+
export declare class TokenError extends Error {
|
|
31
|
+
status: number | string;
|
|
32
|
+
errorCode: string;
|
|
33
|
+
errorType: ErrorType | string;
|
|
34
|
+
constructor({ status, errorCode, errorType, message }: TokenErrorOptions);
|
|
35
|
+
}
|
|
36
|
+
export interface DefaultResponseParameters {
|
|
37
|
+
token: string | null;
|
|
38
|
+
tokenPath: string | null;
|
|
39
|
+
expires: number | string | null;
|
|
40
|
+
}
|
|
41
|
+
export interface AkamaiResponseParameters {
|
|
42
|
+
hdntl: string | null;
|
|
43
|
+
hdnea: string | null;
|
|
44
|
+
expires: number | string | null;
|
|
45
|
+
acl: string | null;
|
|
46
|
+
hmac: string | null;
|
|
47
|
+
}
|
|
48
|
+
export interface CloudflareResponseParameters {
|
|
49
|
+
verify: string | null;
|
|
50
|
+
expires: number | string | null;
|
|
51
|
+
}
|
|
52
|
+
export type ResponseParameters = DefaultResponseParameters | AkamaiResponseParameters | CloudflareResponseParameters;
|
|
53
|
+
export interface TokenResponseExtras {
|
|
54
|
+
drm_custom_data?: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
export interface TokenResponseData {
|
|
58
|
+
src: string;
|
|
59
|
+
responseParameters?: ResponseParameters;
|
|
60
|
+
error?: TokenError | null;
|
|
61
|
+
extras?: TokenResponseExtras;
|
|
62
|
+
}
|
|
63
|
+
export declare class TokenResponse {
|
|
64
|
+
src: string;
|
|
65
|
+
responseParameters: ResponseParameters | undefined;
|
|
66
|
+
error: TokenError | null;
|
|
67
|
+
extras: TokenResponseExtras;
|
|
68
|
+
constructor({ src, responseParameters, error, extras }: TokenResponseData);
|
|
69
|
+
static fromJson({ src, json }: {
|
|
70
|
+
src: string;
|
|
71
|
+
json: string;
|
|
72
|
+
}): TokenResponse;
|
|
73
|
+
static fromAkamai({ src, text }: {
|
|
74
|
+
src: string;
|
|
75
|
+
text: string;
|
|
76
|
+
}): TokenResponse;
|
|
77
|
+
static fromText({ src, text }: {
|
|
78
|
+
src: string;
|
|
79
|
+
text: string;
|
|
80
|
+
}): TokenResponse;
|
|
81
|
+
static fromDefault({ src, text }: {
|
|
82
|
+
src: string;
|
|
83
|
+
text: string;
|
|
84
|
+
}): TokenResponse;
|
|
85
|
+
static fromError({ src, error }: {
|
|
86
|
+
src: string;
|
|
87
|
+
error: TokenError | TokenErrorOptions | Error;
|
|
88
|
+
}): TokenResponse;
|
|
89
|
+
}
|
|
90
|
+
export interface CDNTokenManagerOptions {
|
|
91
|
+
token: string;
|
|
92
|
+
tokenType?: TokenType;
|
|
93
|
+
srcInTokenRequest?: boolean;
|
|
94
|
+
extraParamsCallback?: ((status?: number | string) => Promise<Record<string, unknown>> | Record<string, unknown>) | null;
|
|
95
|
+
onCDNTokenError?: ((error: {
|
|
96
|
+
status: number | string;
|
|
97
|
+
errorCode: string;
|
|
98
|
+
errorType: ErrorType | string;
|
|
99
|
+
}) => void) | null;
|
|
100
|
+
maxRetries?: number;
|
|
101
|
+
retryInterval?: number;
|
|
102
|
+
expirationMarginInSeconds?: number;
|
|
103
|
+
}
|
|
104
|
+
export declare class CDNTokenManager {
|
|
105
|
+
private tokenGeneratorUrl;
|
|
106
|
+
private tokenType;
|
|
107
|
+
private srcInTokenRequest;
|
|
108
|
+
private extraParamsCallback;
|
|
109
|
+
private callbackError;
|
|
110
|
+
private attempt;
|
|
111
|
+
maxRetries: number;
|
|
112
|
+
retryInterval: number;
|
|
113
|
+
private expirationMarginInSeconds;
|
|
114
|
+
lastTokenResponse: TokenResponse | null;
|
|
115
|
+
private resetAttemptCounterTimeout;
|
|
116
|
+
constructor({ token, tokenType, srcInTokenRequest, extraParamsCallback, onCDNTokenError, maxRetries, retryInterval, expirationMarginInSeconds }: CDNTokenManagerOptions);
|
|
117
|
+
private resetAttemptCounter;
|
|
118
|
+
private _fetchDefaultToken;
|
|
119
|
+
private _fetchEasyBToken;
|
|
120
|
+
private _fetchAkamaiToken;
|
|
121
|
+
private _fetchBunnyToken;
|
|
122
|
+
fetchToken({ src }: {
|
|
123
|
+
src: string;
|
|
124
|
+
}): Promise<TokenResponse | null>;
|
|
125
|
+
updateUrlWithTokenParams({ url }: {
|
|
126
|
+
url: string;
|
|
127
|
+
}): Promise<string>;
|
|
128
|
+
isTokenExpired(expirationTime: number | string | null | undefined): boolean;
|
|
129
|
+
destroy(): void;
|
|
130
|
+
static appendTokenParams(urlString: string, token: string | null, expires: number | string | null, tokenPath: string | null): string;
|
|
131
|
+
static appendAkamaiTokenParams(urlString: string, hdnea: string): string;
|
|
132
|
+
static appendDefaultTokenParams(urlString: string, tokenResponse: {
|
|
133
|
+
responseParameters?: CloudflareResponseParameters | ResponseParameters;
|
|
134
|
+
}): string;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=cdn-token-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cdn-token-manager.d.ts","sourceRoot":"","sources":["../../../../src/engines/cdn-token-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DashEngine — DASH playback engine.
|
|
3
|
+
*
|
|
4
|
+
* Ported from component/engines/dash.js
|
|
5
|
+
*
|
|
6
|
+
* Extends BaseEngine to bridge dash.js MediaPlayer events to PlayerState.
|
|
7
|
+
* Uses CDN loader, CDNTokenManager, StallWatchdog, and DASH retry settings.
|
|
8
|
+
*
|
|
9
|
+
* CRITICAL: driver instance is a private class field — NEVER stored in PlayerState.
|
|
10
|
+
*/
|
|
11
|
+
import { BaseEngine } from './base-engine';
|
|
12
|
+
import type { PlayerConfig } from '../core/config';
|
|
13
|
+
import type { TypedEventBus } from '../core/event-bus';
|
|
14
|
+
interface BitrateInfo {
|
|
15
|
+
height: number;
|
|
16
|
+
width: number;
|
|
17
|
+
bitrate: number;
|
|
18
|
+
qualityIndex: number;
|
|
19
|
+
}
|
|
20
|
+
interface MediaTrack {
|
|
21
|
+
id?: string | number;
|
|
22
|
+
index?: number;
|
|
23
|
+
lang?: string;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
interface DashPlayerInstance {
|
|
27
|
+
initialize: (element: HTMLVideoElement, src: string, autoplay?: boolean) => void;
|
|
28
|
+
on: (event: string, handler: (data?: unknown) => void) => void;
|
|
29
|
+
off: (event: string, handler: (data?: unknown) => void) => void;
|
|
30
|
+
getTracksFor: (type: string) => MediaTrack[];
|
|
31
|
+
getBitrateInfoListFor: (type: string) => BitrateInfo[];
|
|
32
|
+
getQualityFor: (type: string) => number;
|
|
33
|
+
setQualityFor: (type: string, index: number) => void;
|
|
34
|
+
setCurrentTrack: (track: MediaTrack) => void;
|
|
35
|
+
getCurrentLiveLatency: () => number;
|
|
36
|
+
time: () => number;
|
|
37
|
+
duration: () => number;
|
|
38
|
+
updateSettings: (settings: Record<string, unknown>) => void;
|
|
39
|
+
addABRCustomRule: (ruleType: string, ruleName: string, rule: unknown) => void;
|
|
40
|
+
refreshManifest: () => void;
|
|
41
|
+
reset: () => void;
|
|
42
|
+
destroy: () => void;
|
|
43
|
+
seek: (time: number) => void;
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
}
|
|
46
|
+
interface DashPlayerConstructor {
|
|
47
|
+
(): {
|
|
48
|
+
create: () => DashPlayerInstance;
|
|
49
|
+
};
|
|
50
|
+
events: Record<string, string>;
|
|
51
|
+
}
|
|
52
|
+
export interface DashjsType {
|
|
53
|
+
MediaPlayer: DashPlayerConstructor;
|
|
54
|
+
FactoryMaker: {
|
|
55
|
+
getClassFactoryByName: (name: string) => unknown;
|
|
56
|
+
getSingletonFactoryByName: (name: string) => unknown;
|
|
57
|
+
getClassFactory: (fn: unknown) => unknown;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export declare class DashEngine extends BaseEngine {
|
|
61
|
+
private driver;
|
|
62
|
+
private dvrErrorHandler;
|
|
63
|
+
getDriver(): unknown | null;
|
|
64
|
+
setConfig(config: PlayerConfig): void;
|
|
65
|
+
setBus(bus: TypedEventBus): void;
|
|
66
|
+
setVideo(video: HTMLVideoElement): void;
|
|
67
|
+
protected onAttach(): Promise<void>;
|
|
68
|
+
protected onDetach(): void;
|
|
69
|
+
protected recoverFromStall(attempt: number): void;
|
|
70
|
+
setQuality(index: number): void;
|
|
71
|
+
setAudioTrack(index: number): void;
|
|
72
|
+
setSubtitle(index: number): void;
|
|
73
|
+
setPlaybackRate(rate: number): void;
|
|
74
|
+
seekToLive(): void;
|
|
75
|
+
private init;
|
|
76
|
+
private registerDriverEvents;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=dash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash.d.ts","sourceRoot":"","sources":["../../../../src/engines/dash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DrmConfigurator - Builds HLS DRM configuration objects.
|
|
3
|
+
*
|
|
4
|
+
* Isolates DRM complexity from engine initialization code.
|
|
5
|
+
* Ported from component/engines/hls.js init method (lines ~237-268).
|
|
6
|
+
*
|
|
7
|
+
* The licenseXhrSetup hook:
|
|
8
|
+
* 1. Calls tokenManager.extraParamsCallback() for auth token (if configured)
|
|
9
|
+
* 2. Sets Authorization: Bearer <accessToken> on the XHR request
|
|
10
|
+
* 3. Appends drm_custom_data from tokenManager.lastTokenResponse.extras to URL
|
|
11
|
+
*
|
|
12
|
+
* CRITICAL (from MEMORY.md): The licenseXhrSetup hook captures tokenManager
|
|
13
|
+
* via closure reference. The tokenManager is NEVER stored in PlayerState.
|
|
14
|
+
* DrmConfigurator holds a direct class-property reference.
|
|
15
|
+
*/
|
|
16
|
+
import type { EngineSettings } from '../core/config';
|
|
17
|
+
/**
|
|
18
|
+
* Interface for the CDN token manager used in DRM license requests.
|
|
19
|
+
* This mirrors the subset of CDNTokenManager methods used by DrmConfigurator.
|
|
20
|
+
* The full CDNTokenManager class will be ported in a later plan.
|
|
21
|
+
*/
|
|
22
|
+
export interface CDNTokenManagerInterface {
|
|
23
|
+
extraParamsCallback: ((status?: number) => Promise<Record<string, unknown>>) | null;
|
|
24
|
+
lastTokenResponse: {
|
|
25
|
+
extras?: {
|
|
26
|
+
drm_custom_data?: string;
|
|
27
|
+
};
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
} | null;
|
|
30
|
+
fetchToken: (options: {
|
|
31
|
+
src: string;
|
|
32
|
+
}) => Promise<unknown>;
|
|
33
|
+
isTokenExpired: (expirationTime?: unknown) => boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface DrmConfig {
|
|
36
|
+
emeEnabled?: boolean;
|
|
37
|
+
drmSystems?: Record<string, {
|
|
38
|
+
serverURL?: string;
|
|
39
|
+
[key: string]: unknown;
|
|
40
|
+
}>;
|
|
41
|
+
licenseXhrSetup?: (xhr: XMLHttpRequest, url: string) => Promise<void>;
|
|
42
|
+
}
|
|
43
|
+
export declare class DrmConfigurator {
|
|
44
|
+
private readonly tokenManager;
|
|
45
|
+
constructor(tokenManager: CDNTokenManagerInterface | null);
|
|
46
|
+
/**
|
|
47
|
+
* Build the DRM-related fields for the HLS.js constructor config.
|
|
48
|
+
*
|
|
49
|
+
* Returns an empty object when emeEnabled is not set (no DRM).
|
|
50
|
+
* Returns emeEnabled, drmSystems, and licenseXhrSetup when DRM is configured.
|
|
51
|
+
*/
|
|
52
|
+
buildHlsConfig(engineSettings: EngineSettings): DrmConfig;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=drm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drm.d.ts","sourceRoot":"","sources":["../../../../src/engines/drm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACnF,iBAAiB,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3F,UAAU,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,cAAc,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;CACtD;AAED,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;IAC3E,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAoBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;gBAElD,YAAY,EAAE,wBAAwB,GAAG,IAAI;IAIzD;;;;;OAKG;IACH,cAAc,CAAC,cAAc,EAAE,cAAc,GAAG,SAAS;CAqC1D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workaround for hls.js bug: audio-stream-controller deadlocks when
|
|
3
|
+
* the audio playlist has more #EXT-X-DISCONTINUITY tags than video.
|
|
4
|
+
* Two symptoms:
|
|
5
|
+
* 1. WAITING_TRACK deadlock: onAudioTrackLoaded bails when
|
|
6
|
+
* audio endCC > video endCC, caching data forever.
|
|
7
|
+
* 2. WAITING_INIT_PTS loop: audio fragments have CC values that
|
|
8
|
+
* the video never produces initPTS for (e.g., audio CC=4,
|
|
9
|
+
* video only has CC up to 2).
|
|
10
|
+
* Fix: remap audio fragment CC values and endCC to the video's
|
|
11
|
+
* CC range so both checks pass. The actual time alignment uses
|
|
12
|
+
* PDT (EXT-X-PROGRAM-DATE-TIME) as fallback.
|
|
13
|
+
* See https://github.com/video-dev/hls.js/issues/1484
|
|
14
|
+
*
|
|
15
|
+
* IMPORTANT: Must be called BEFORE driver.attachMedia() / driver.loadSource()
|
|
16
|
+
* (Pitfall 4: trigger is set up during construction, so patching after
|
|
17
|
+
* media attach may miss early events).
|
|
18
|
+
*/
|
|
19
|
+
interface HlsFragment {
|
|
20
|
+
cc: number;
|
|
21
|
+
}
|
|
22
|
+
interface HlsFragmentHint {
|
|
23
|
+
cc: number;
|
|
24
|
+
}
|
|
25
|
+
interface HlsLevelDetails {
|
|
26
|
+
endCC: number;
|
|
27
|
+
fragments?: HlsFragment[];
|
|
28
|
+
fragmentHint?: HlsFragmentHint;
|
|
29
|
+
}
|
|
30
|
+
interface HlsLevel {
|
|
31
|
+
details: HlsLevelDetails;
|
|
32
|
+
}
|
|
33
|
+
interface HlsLike {
|
|
34
|
+
trigger: (event: string, eventObject?: unknown) => unknown;
|
|
35
|
+
currentLevel: number;
|
|
36
|
+
levels?: HlsLevel[];
|
|
37
|
+
}
|
|
38
|
+
interface HlsEvents {
|
|
39
|
+
AUDIO_TRACK_LOADED: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function applyDiscontinuityWorkaround(driver: HlsLike, hlsEvents: HlsEvents): void;
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=hls-discontinuity-patch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hls-discontinuity-patch.d.ts","sourceRoot":"","sources":["../../../../src/engines/hls-discontinuity-patch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,UAAU,WAAW;IACnB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAA;CACX;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,WAAW,EAAE,CAAA;IACzB,YAAY,CAAC,EAAE,eAAe,CAAA;CAC/B;AAED,UAAU,QAAQ;IAChB,OAAO,EAAE,eAAe,CAAA;CACzB;AAED,UAAU,OAAO;IACf,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;IAC1D,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAA;CACpB;AAED,UAAU,SAAS;IACjB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CA2BxF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HlsEngine — HLS playback engine.
|
|
3
|
+
*
|
|
4
|
+
* Ported from component/engines/hls.js
|
|
5
|
+
*
|
|
6
|
+
* Extends BaseEngine to bridge hls.js driver events to PlayerState.
|
|
7
|
+
* Uses CDN loader, CDNTokenManager, DrmConfigurator, StallWatchdog,
|
|
8
|
+
* retry handler, and discontinuity workaround.
|
|
9
|
+
*
|
|
10
|
+
* CRITICAL: driver instance is a private class field — NEVER stored in PlayerState.
|
|
11
|
+
* CRITICAL: Call applyDiscontinuityWorkaround BEFORE driver.attachMedia/loadSource (Pitfall 4).
|
|
12
|
+
* CRITICAL: Never call driver.startLoad() from video 'play' event handler (Pitfall 3).
|
|
13
|
+
*/
|
|
14
|
+
import { BaseEngine } from './base-engine';
|
|
15
|
+
export declare class HlsEngine extends BaseEngine {
|
|
16
|
+
private driver;
|
|
17
|
+
private tokenManager;
|
|
18
|
+
private eventState;
|
|
19
|
+
getDriver(): unknown | null;
|
|
20
|
+
protected onAttach(): Promise<void>;
|
|
21
|
+
protected onDetach(): void;
|
|
22
|
+
protected recoverFromStall(attempt: number): void;
|
|
23
|
+
setQuality(index: number): void;
|
|
24
|
+
setAudioTrack(index: number): void;
|
|
25
|
+
setSubtitle(index: number): void;
|
|
26
|
+
setPlaybackRate(rate: number): void;
|
|
27
|
+
private liveSyncDisabled;
|
|
28
|
+
seek(time: number): void;
|
|
29
|
+
seekToLive(): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check whether this engine was detached during an async gap.
|
|
32
|
+
* Used after every await in init() to prevent zombie drivers.
|
|
33
|
+
*/
|
|
34
|
+
private get detached();
|
|
35
|
+
private init;
|
|
36
|
+
private registerDriverEvents;
|
|
37
|
+
private _onManifestLoaded;
|
|
38
|
+
private _onLevelLoaded;
|
|
39
|
+
private _onLevelSwitched;
|
|
40
|
+
private _onAudioTracksUpdated;
|
|
41
|
+
private _onAudioTrackSwitched;
|
|
42
|
+
private _onSubtitleTracksUpdated;
|
|
43
|
+
private _onSubtitleTrackSwitch;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=hls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../../src/engines/hls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAmJ1C,qBAAa,SAAU,SAAQ,UAAU;IAEvC,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,YAAY,CAA+B;IAEnD,OAAO,CAAC,UAAU,CAA2B;IAE7C,SAAS,IAAI,OAAO,GAAG,IAAI;cAQX,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAezC,SAAS,CAAC,QAAQ,IAAI,IAAI;IAkB1B,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAgBjD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKhC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKnC,OAAO,CAAC,gBAAgB,CAAQ;IAEvB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAajC,UAAU,IAAI,IAAI;IAWlB;;;OAGG;IACH,OAAO,KAAK,QAAQ,GAEnB;YAEa,IAAI;IAkKlB,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engine Layer Barrel Export
|
|
3
|
+
*
|
|
4
|
+
* Public API for all engine modules.
|
|
5
|
+
* Import from 'eb-player/engines' or from src/engines/index.ts.
|
|
6
|
+
*
|
|
7
|
+
* Tree-shaking note: engines are separate from src/core/index.ts to keep
|
|
8
|
+
* streaming library integrations (hls.js, dash.js) out of the core bundle.
|
|
9
|
+
*/
|
|
10
|
+
export { BaseEngine } from './base-engine';
|
|
11
|
+
export { HlsEngine } from './hls';
|
|
12
|
+
export { DashEngine } from './dash';
|
|
13
|
+
export { loadScript } from './cdn-loader';
|
|
14
|
+
export { CDNTokenManager } from './cdn-token-manager';
|
|
15
|
+
export { StallWatchdog } from './stall-watchdog';
|
|
16
|
+
export { DrmConfigurator } from './drm';
|
|
17
|
+
export { handleHlsRetry } from './retry/hls';
|
|
18
|
+
export { applyDashRetrySettings } from './retry/dash';
|
|
19
|
+
export { applyDiscontinuityWorkaround } from './hls-discontinuity-patch';
|
|
20
|
+
export { createPosterHandler } from './poster/hls';
|
|
21
|
+
export { createIosHandler } from './ios/hls';
|
|
22
|
+
export { createHlsAbrController } from './abr/hls';
|
|
23
|
+
export { createDashAbrRule } from './abr/dash';
|
|
24
|
+
export { HlsSnapshotHandler } from './snapshot/hls';
|
|
25
|
+
export { DashSnapshotHandler } from './snapshot/dash';
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engines/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* iOS HLS handler.
|
|
3
|
+
*
|
|
4
|
+
* Used when Hls.isSupported() returns false (native HLS on iOS Safari).
|
|
5
|
+
* Native video elements may not report correct duration for live streams,
|
|
6
|
+
* so this handler parses the HLS manifest directly to sum EXTINF durations.
|
|
7
|
+
*
|
|
8
|
+
* Fetches the master manifest, extracts the first child manifest URL,
|
|
9
|
+
* then polls every 5 seconds to keep duration up-to-date.
|
|
10
|
+
*/
|
|
11
|
+
interface IosHandlerData {
|
|
12
|
+
duration?: number;
|
|
13
|
+
}
|
|
14
|
+
interface IosHandler {
|
|
15
|
+
data: IosHandlerData;
|
|
16
|
+
destroy: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function createIosHandler(src: string): IosHandler;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=hls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../../../src/engines/ios/hls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,cAAc,CAAA;IACpB,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CA2CxD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Poster HLS handler.
|
|
3
|
+
*
|
|
4
|
+
* Used to play a looping HLS stream as a video poster/background.
|
|
5
|
+
* The Hls constructor is passed at attach-time (not imported) because
|
|
6
|
+
* hls.js is loaded from CDN at runtime.
|
|
7
|
+
*/
|
|
8
|
+
interface HlsMediaElement {
|
|
9
|
+
play: () => void;
|
|
10
|
+
pause: () => void;
|
|
11
|
+
}
|
|
12
|
+
interface HlsInstance {
|
|
13
|
+
loadSource: (src: string) => void;
|
|
14
|
+
attachMedia: (element: HTMLElement) => void;
|
|
15
|
+
detachMedia?: () => void;
|
|
16
|
+
destroy?: () => void;
|
|
17
|
+
media: HlsMediaElement;
|
|
18
|
+
}
|
|
19
|
+
interface HlsConstructor {
|
|
20
|
+
new (): HlsInstance;
|
|
21
|
+
}
|
|
22
|
+
interface AttachOptions {
|
|
23
|
+
src: string;
|
|
24
|
+
container: HTMLElement;
|
|
25
|
+
Hls: HlsConstructor;
|
|
26
|
+
}
|
|
27
|
+
interface PosterHandler {
|
|
28
|
+
attach: (options: AttachOptions) => void;
|
|
29
|
+
close: () => void;
|
|
30
|
+
play: () => void;
|
|
31
|
+
pause: () => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function createPosterHandler(): PosterHandler;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=hls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../../../src/engines/poster/hls.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,WAAW,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAA;IAC3C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,KAAK,EAAE,eAAe,CAAA;CACvB;AAED,UAAU,cAAc;IACtB,QAAO,WAAW,CAAA;CACnB;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,WAAW,CAAA;IACtB,GAAG,EAAE,cAAc,CAAA;CACpB;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CA6BnD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DASH retry settings.
|
|
3
|
+
*
|
|
4
|
+
* Applies infinite retry configuration to the dash.js driver so that
|
|
5
|
+
* transient network failures (segment fetch, manifest re-fetch, etc.)
|
|
6
|
+
* never permanently stop playback.
|
|
7
|
+
*/
|
|
8
|
+
interface DashDriverLike {
|
|
9
|
+
updateSettings: (settings: DashSettings) => void;
|
|
10
|
+
}
|
|
11
|
+
interface DashRetryIntervals {
|
|
12
|
+
MPD: number;
|
|
13
|
+
XLinkExpansion: number;
|
|
14
|
+
InitializationSegment: number;
|
|
15
|
+
IndexSegment: number;
|
|
16
|
+
MediaSegment: number;
|
|
17
|
+
BitstreamSwitchingSegment: number;
|
|
18
|
+
other: number;
|
|
19
|
+
lowLatencyReductionFactor: number;
|
|
20
|
+
}
|
|
21
|
+
interface DashRetryAttempts {
|
|
22
|
+
MPD: number;
|
|
23
|
+
XLinkExpansion: number;
|
|
24
|
+
InitializationSegment: number;
|
|
25
|
+
IndexSegment: number;
|
|
26
|
+
MediaSegment: number;
|
|
27
|
+
BitstreamSwitchingSegment: number;
|
|
28
|
+
other: number;
|
|
29
|
+
lowLatencyMultiplyFactor: number;
|
|
30
|
+
}
|
|
31
|
+
interface DashSettings {
|
|
32
|
+
streaming: {
|
|
33
|
+
retryIntervals?: DashRetryIntervals;
|
|
34
|
+
retryAttempts?: DashRetryAttempts;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare function applyDashRetrySettings(driver: DashDriverLike): void;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=dash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash.d.ts","sourceRoot":"","sources":["../../../../../src/engines/retry/dash.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,UAAU,cAAc;IACtB,cAAc,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAA;CACjD;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,yBAAyB,EAAE,MAAM,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,yBAAyB,EAAE,MAAM,CAAA;CAClC;AAED,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,yBAAyB,EAAE,MAAM,CAAA;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,wBAAwB,EAAE,MAAM,CAAA;CACjC;AAED,UAAU,YAAY;IACpB,SAAS,EAAE;QACT,cAAc,CAAC,EAAE,kBAAkB,CAAA;QACnC,aAAa,CAAC,EAAE,iBAAiB,CAAA;KAClC,CAAA;CACF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CA6BnE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HLS retry handler.
|
|
3
|
+
*
|
|
4
|
+
* Registers an hlsError listener on the hls.js driver and attempts
|
|
5
|
+
* automatic recovery:
|
|
6
|
+
* - Fatal mediaError: calls recoverMediaError() after 1s
|
|
7
|
+
* - Fatal keySystemError: unrecoverable (e.g. no HTTPS for DRM) — no retry
|
|
8
|
+
* - Fatal other error: calls startLoad() after 1s
|
|
9
|
+
* - Non-fatal error: re-checks after 3s; if currentTime has not advanced
|
|
10
|
+
* (and Chromecast is not casting), applies the same recovery
|
|
11
|
+
*
|
|
12
|
+
* Non-fatal retries are capped to prevent infinite loops (e.g. keyLoadError
|
|
13
|
+
* where startLoad() triggers the same failing key request repeatedly).
|
|
14
|
+
* After the cap is reached, further events for that error are silently ignored.
|
|
15
|
+
*/
|
|
16
|
+
interface HlsDriverLike {
|
|
17
|
+
on: (event: string, handler: (event: string, data: HlsErrorData) => void) => void;
|
|
18
|
+
media: {
|
|
19
|
+
currentTime: number;
|
|
20
|
+
} | null;
|
|
21
|
+
recoverMediaError: () => void;
|
|
22
|
+
startLoad: (startPosition?: number) => void;
|
|
23
|
+
}
|
|
24
|
+
interface HlsErrorData {
|
|
25
|
+
fatal: boolean;
|
|
26
|
+
type: string;
|
|
27
|
+
details?: string;
|
|
28
|
+
}
|
|
29
|
+
interface EngineContext {
|
|
30
|
+
chromecast_casting?: boolean;
|
|
31
|
+
onUnrecoverableError?: (message: string) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function handleHlsRetry(driver: HlsDriverLike, engine?: EngineContext): void;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=hls.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hls.d.ts","sourceRoot":"","sources":["../../../../../src/engines/retry/hls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,UAAU,aAAa;IACrB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,KAAK,IAAI,CAAA;IACjF,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACrC,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5C;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,UAAU,aAAa;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjD;AAQD,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,CAsElF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DASH Snapshot Handler
|
|
3
|
+
*
|
|
4
|
+
* Ported from component/engines/snapshot/dash.js
|
|
5
|
+
*
|
|
6
|
+
* Creates a separate dash.js MediaPlayer instance for seekbar preview thumbnails.
|
|
7
|
+
* The snapshot player runs in an off-screen video element and is independent
|
|
8
|
+
* from the main playback player.
|
|
9
|
+
*/
|
|
10
|
+
interface DashPlayerInstance {
|
|
11
|
+
initialize: (element: HTMLVideoElement, src: string, autoplay: boolean) => void;
|
|
12
|
+
updateSettings: (settings: Record<string, unknown>) => void;
|
|
13
|
+
on: (event: string, handler: (data?: unknown) => void) => void;
|
|
14
|
+
off: (event: string, handler: (data?: unknown) => void) => void;
|
|
15
|
+
setMute: (muted: boolean) => void;
|
|
16
|
+
seek: (time: number) => void;
|
|
17
|
+
isPaused: () => boolean;
|
|
18
|
+
play: () => void;
|
|
19
|
+
pause: () => void;
|
|
20
|
+
reset: () => void;
|
|
21
|
+
}
|
|
22
|
+
interface DashPlayerFactory {
|
|
23
|
+
(): {
|
|
24
|
+
create: () => DashPlayerInstance;
|
|
25
|
+
};
|
|
26
|
+
events: Record<string, string>;
|
|
27
|
+
}
|
|
28
|
+
export interface DashjsForSnapshot {
|
|
29
|
+
MediaPlayer: DashPlayerFactory;
|
|
30
|
+
}
|
|
31
|
+
export interface SnapshotHandle {
|
|
32
|
+
take: (time: number) => void;
|
|
33
|
+
destroy: () => void;
|
|
34
|
+
video: HTMLVideoElement;
|
|
35
|
+
}
|
|
36
|
+
export declare class DashSnapshotHandler {
|
|
37
|
+
private readonly src;
|
|
38
|
+
private player;
|
|
39
|
+
private offscreenVideo;
|
|
40
|
+
private ready;
|
|
41
|
+
constructor(src: string);
|
|
42
|
+
/**
|
|
43
|
+
* Initialise the snapshot player using the provided dashjs constructor.
|
|
44
|
+
* Resolves with a SnapshotHandle once STREAM_INITIALIZED fires.
|
|
45
|
+
* If initialisation fails, resolves with a no-op handle.
|
|
46
|
+
*/
|
|
47
|
+
init(dashjs: DashjsForSnapshot): Promise<SnapshotHandle>;
|
|
48
|
+
/**
|
|
49
|
+
* Reset and destroy the snapshot player and remove the off-screen video element.
|
|
50
|
+
*/
|
|
51
|
+
destroy(): void;
|
|
52
|
+
private cleanup;
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=dash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dash.d.ts","sourceRoot":"","sources":["../../../../../src/engines/snapshot/dash.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,UAAU,kBAAkB;IAC1B,UAAU,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/E,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC3D,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAA;IAC9D,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAA;IAC/D,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,QAAQ,EAAE,MAAM,OAAO,CAAA;IACvB,IAAI,EAAE,MAAM,IAAI,CAAA;IAChB,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED,UAAU,iBAAiB;IACzB,IAAI;QAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;KAAE,CAAA;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,iBAAiB,CAAA;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,KAAK,EAAE,gBAAgB,CAAA;CACxB;AAMD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,KAAK,CAAiB;gBAElB,GAAG,EAAE,MAAM;IAIvB;;;;OAIG;IACH,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAiFxD;;OAEG;IACH,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,OAAO;CAMhB"}
|