googlevideo 3.0.0 → 4.0.1
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 +93 -45
- package/dist/protos/generated/misc/common.d.ts +180 -6
- package/dist/protos/generated/misc/common.js +282 -19
- package/dist/protos/generated/misc/common.js.map +1 -0
- package/dist/protos/generated/video_streaming/buffered_range.d.ts +10 -10
- package/dist/protos/generated/video_streaming/buffered_range.js +20 -19
- package/dist/protos/generated/video_streaming/buffered_range.js.map +1 -0
- package/dist/protos/generated/video_streaming/client_abr_state.d.ts +22 -11
- package/dist/protos/generated/video_streaming/client_abr_state.js +133 -50
- package/dist/protos/generated/video_streaming/client_abr_state.js.map +1 -0
- package/dist/protos/generated/video_streaming/crypto_params.d.ts +2 -7
- package/dist/protos/generated/video_streaming/crypto_params.js +1 -7
- package/dist/protos/generated/video_streaming/crypto_params.js.map +1 -0
- package/dist/protos/generated/video_streaming/format_initialization_metadata.d.ts +6 -6
- package/dist/protos/generated/video_streaming/format_initialization_metadata.js +32 -21
- package/dist/protos/generated/video_streaming/format_initialization_metadata.js.map +1 -0
- package/dist/protos/generated/video_streaming/format_selection_config.d.ts +12 -0
- package/dist/protos/generated/video_streaming/format_selection_config.js +68 -0
- package/dist/protos/generated/video_streaming/format_selection_config.js.map +1 -0
- package/dist/protos/generated/video_streaming/{encrypted_player_request.d.ts → innertube_request.d.ts} +11 -6
- package/dist/protos/generated/video_streaming/{encrypted_player_request.js → innertube_request.js} +64 -20
- package/dist/protos/generated/video_streaming/innertube_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/live_metadata.d.ts +8 -5
- package/dist/protos/generated/video_streaming/live_metadata.js +57 -26
- package/dist/protos/generated/video_streaming/live_metadata.js.map +1 -0
- package/dist/protos/generated/video_streaming/media_capabilities.js +1 -0
- package/dist/protos/generated/video_streaming/media_capabilities.js.map +1 -0
- package/dist/protos/generated/video_streaming/media_header.d.ts +5 -10
- package/dist/protos/generated/video_streaming/media_header.js +27 -23
- package/dist/protos/generated/video_streaming/media_header.js.map +1 -0
- package/dist/protos/generated/video_streaming/next_request_policy.d.ts +3 -0
- package/dist/protos/generated/video_streaming/next_request_policy.js +31 -0
- package/dist/protos/generated/video_streaming/next_request_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_header.d.ts +7 -7
- package/dist/protos/generated/video_streaming/onesie_header.js +15 -14
- package/dist/protos/generated/video_streaming/onesie_header.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_header_type.d.ts +9 -23
- package/dist/protos/generated/video_streaming/onesie_header_type.js +16 -30
- package/dist/protos/generated/video_streaming/onesie_header_type.js.map +1 -0
- package/dist/protos/generated/video_streaming/{onesie_player_request.d.ts → onesie_innertube_request.d.ts} +2 -2
- package/dist/protos/generated/video_streaming/{onesie_player_request.js → onesie_innertube_request.js} +5 -4
- package/dist/protos/generated/video_streaming/onesie_innertube_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_innertube_response.d.ts +15 -0
- package/dist/protos/generated/video_streaming/{onesie_player_response.js → onesie_innertube_response.js} +5 -22
- package/dist/protos/generated/video_streaming/onesie_innertube_response.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.d.ts +18 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.js +25 -0
- package/dist/protos/generated/video_streaming/onesie_proxy_status.js.map +1 -0
- package/dist/protos/generated/video_streaming/onesie_request.d.ts +6 -3
- package/dist/protos/generated/video_streaming/onesie_request.js +17 -5
- package/dist/protos/generated/video_streaming/onesie_request.js.map +1 -0
- package/dist/protos/generated/video_streaming/playback_cookie.d.ts +2 -2
- package/dist/protos/generated/video_streaming/playback_cookie.js +5 -4
- package/dist/protos/generated/video_streaming/playback_cookie.js.map +1 -0
- package/dist/protos/generated/video_streaming/playback_start_policy.js +1 -0
- package/dist/protos/generated/video_streaming/playback_start_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/reload_player_response.d.ts +14 -0
- package/dist/protos/generated/video_streaming/reload_player_response.js +73 -0
- package/dist/protos/generated/video_streaming/reload_player_response.js.map +1 -0
- package/dist/protos/generated/video_streaming/request_cancellation_policy.js +1 -0
- package/dist/protos/generated/video_streaming/request_cancellation_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/request_identifier.d.ts +10 -0
- package/dist/protos/generated/video_streaming/request_identifier.js +41 -0
- package/dist/protos/generated/video_streaming/request_identifier.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.d.ts +12 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js +86 -0
- package/dist/protos/generated/video_streaming/sabr_context_sending_policy.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.d.ts +48 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.js +242 -0
- package/dist/protos/generated/video_streaming/sabr_context_update.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_error.js +1 -0
- package/dist/protos/generated/video_streaming/sabr_error.js.map +1 -0
- package/dist/protos/generated/video_streaming/sabr_redirect.js +1 -0
- package/dist/protos/generated/video_streaming/sabr_redirect.js.map +1 -0
- package/dist/protos/generated/video_streaming/snackbar_message.d.ts +10 -0
- package/dist/protos/generated/video_streaming/snackbar_message.js +41 -0
- package/dist/protos/generated/video_streaming/snackbar_message.js.map +1 -0
- package/dist/protos/generated/video_streaming/stream_protection_status.d.ts +1 -1
- package/dist/protos/generated/video_streaming/stream_protection_status.js +5 -4
- package/dist/protos/generated/video_streaming/stream_protection_status.js.map +1 -0
- package/dist/protos/generated/video_streaming/streamer_context.d.ts +11 -11
- package/dist/protos/generated/video_streaming/streamer_context.js +32 -32
- package/dist/protos/generated/video_streaming/streamer_context.js.map +1 -0
- package/dist/protos/generated/video_streaming/time_range.d.ts +2 -2
- package/dist/protos/generated/video_streaming/time_range.js +8 -7
- package/dist/protos/generated/video_streaming/time_range.js.map +1 -0
- package/dist/protos/generated/video_streaming/ump_part_id.d.ts +58 -0
- package/dist/protos/generated/video_streaming/ump_part_id.js +89 -0
- package/dist/protos/generated/video_streaming/ump_part_id.js.map +1 -0
- package/dist/protos/generated/video_streaming/video_playback_abr_request.d.ts +20 -21
- package/dist/protos/generated/video_streaming/video_playback_abr_request.js +48 -86
- package/dist/protos/generated/video_streaming/video_playback_abr_request.js.map +1 -0
- package/dist/src/core/{ChunkedDataBuffer.d.ts → CompositeBuffer.d.ts} +11 -8
- package/dist/src/core/{ChunkedDataBuffer.js → CompositeBuffer.js} +35 -27
- package/dist/src/core/CompositeBuffer.js.map +1 -0
- package/dist/src/core/SabrStream.d.ts +356 -0
- package/dist/src/core/SabrStream.js +958 -0
- package/dist/src/core/SabrStream.js.map +1 -0
- package/dist/src/core/SabrStreamingAdapter.d.ts +158 -0
- package/dist/src/core/SabrStreamingAdapter.js +496 -0
- package/dist/src/core/SabrStreamingAdapter.js.map +1 -0
- package/dist/src/core/SabrUmpProcessor.d.ts +53 -0
- package/dist/src/core/SabrUmpProcessor.js +234 -0
- package/dist/src/core/SabrUmpProcessor.js.map +1 -0
- package/dist/src/core/{UMP.d.ts → UmpReader.d.ts} +9 -10
- package/dist/src/core/{UMP.js → UmpReader.js} +36 -36
- package/dist/src/core/UmpReader.js.map +1 -0
- package/dist/src/core/UmpWriter.d.ts +19 -0
- package/dist/src/core/UmpWriter.js +59 -0
- package/dist/src/core/UmpWriter.js.map +1 -0
- package/dist/src/exports/protos.d.ts +5 -0
- package/dist/src/exports/protos.js +6 -0
- package/dist/src/exports/protos.js.map +1 -0
- package/dist/src/exports/sabr-stream.d.ts +6 -0
- package/dist/src/exports/sabr-stream.js +6 -0
- package/dist/src/exports/sabr-stream.js.map +1 -0
- package/dist/src/exports/sabr-streaming-adapter.d.ts +8 -0
- package/dist/src/exports/sabr-streaming-adapter.js +8 -0
- package/dist/src/exports/sabr-streaming-adapter.js.map +1 -0
- package/dist/src/exports/ump.d.ts +7 -0
- package/dist/src/exports/ump.js +8 -0
- package/dist/src/exports/ump.js.map +1 -0
- package/dist/src/exports/utils.d.ts +5 -0
- package/dist/src/exports/utils.js +6 -0
- package/dist/src/exports/utils.js.map +1 -0
- package/dist/src/types/sabrStreamTypes.d.ts +102 -0
- package/dist/src/types/sabrStreamTypes.js +2 -0
- package/dist/src/types/sabrStreamTypes.js.map +1 -0
- package/dist/src/types/sabrStreamingAdapterTypes.d.ts +93 -0
- package/dist/src/types/sabrStreamingAdapterTypes.js +2 -0
- package/dist/src/types/sabrStreamingAdapterTypes.js.map +1 -0
- package/dist/src/types/shared.d.ts +64 -0
- package/dist/src/types/shared.js +2 -0
- package/dist/src/types/shared.js.map +1 -0
- package/dist/src/utils/CacheManager.d.ts +32 -0
- package/dist/src/utils/CacheManager.js +131 -0
- package/dist/src/utils/CacheManager.js.map +1 -0
- package/dist/src/utils/EventEmitterLike.d.ts +5 -0
- package/dist/src/utils/EventEmitterLike.js +51 -10
- package/dist/src/utils/EventEmitterLike.js.map +1 -0
- package/dist/src/utils/Logger.d.ts +43 -0
- package/dist/src/utils/Logger.js +93 -0
- package/dist/src/utils/Logger.js.map +1 -0
- package/dist/src/utils/Protos.d.ts +20 -13
- package/dist/src/utils/Protos.js +21 -13
- package/dist/src/utils/Protos.js.map +1 -0
- package/dist/src/utils/RequestMetadataManager.d.ts +15 -0
- package/dist/src/utils/RequestMetadataManager.js +48 -0
- package/dist/src/utils/RequestMetadataManager.js.map +1 -0
- package/dist/src/utils/formatKeyUtils.d.ts +45 -0
- package/dist/src/utils/formatKeyUtils.js +77 -0
- package/dist/src/utils/formatKeyUtils.js.map +1 -0
- package/dist/src/utils/index.d.ts +5 -3
- package/dist/src/utils/index.js +6 -2
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/sabrStreamUtils.d.ts +28 -0
- package/dist/src/utils/sabrStreamUtils.js +76 -0
- package/dist/src/utils/sabrStreamUtils.js.map +1 -0
- package/dist/src/utils/shared.d.ts +55 -0
- package/dist/src/utils/shared.js +120 -0
- package/dist/src/utils/shared.js.map +1 -0
- package/package.json +40 -12
- package/dist/protos/generated/video_streaming/onesie_player_response.d.ts +0 -31
- package/dist/protos/generated/video_streaming/proxy_status.d.ts +0 -14
- package/dist/protos/generated/video_streaming/proxy_status.js +0 -21
- package/dist/src/core/ServerAbrStream.d.ts +0 -39
- package/dist/src/core/ServerAbrStream.js +0 -259
- package/dist/src/core/index.d.ts +0 -3
- package/dist/src/core/index.js +0 -3
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.js +0 -4
- package/dist/src/utils/helpers.d.ts +0 -63
- package/dist/src/utils/helpers.js +0 -101
- package/dist/src/utils/types.d.ts +0 -65
- package/dist/src/utils/types.js +0 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { SabrStreamState } from '../core/SabrStream.js';
|
|
2
|
+
import type { FetchFunction, SabrFormat } from './shared.js';
|
|
3
|
+
import type { EnabledTrackTypes } from '../utils/index.js';
|
|
4
|
+
import type { ClientInfo } from '../utils/Protos.js';
|
|
5
|
+
export interface SabrStreamConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Custom fetch implementation to use for HTTP requests.
|
|
8
|
+
* If not provided, the global `fetch` function will be used.
|
|
9
|
+
*/
|
|
10
|
+
fetch?: FetchFunction;
|
|
11
|
+
/**
|
|
12
|
+
* The URL endpoint for server-side ABR streaming requests.
|
|
13
|
+
* This is typically obtained from the initial player response.
|
|
14
|
+
*/
|
|
15
|
+
serverAbrStreamingUrl?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Base64-encoded Ustreamer configuration obtained from the player response.
|
|
18
|
+
* Required for authorizing and configuring the streaming session.
|
|
19
|
+
*/
|
|
20
|
+
videoPlaybackUstreamerConfig?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Client information used to identify the requesting device/app.
|
|
23
|
+
* Contains details like client name, version, and capabilities.
|
|
24
|
+
*/
|
|
25
|
+
clientInfo?: ClientInfo;
|
|
26
|
+
/**
|
|
27
|
+
* Proof of Origin token for content protection verification.
|
|
28
|
+
*/
|
|
29
|
+
poToken?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Total duration of the media content in milliseconds.
|
|
32
|
+
* If not provided, will be determined from format metadata.
|
|
33
|
+
*/
|
|
34
|
+
durationMs?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Array of available streaming formats obtained from the player response.
|
|
37
|
+
*/
|
|
38
|
+
formats?: SabrFormat[];
|
|
39
|
+
}
|
|
40
|
+
export interface SabrPlaybackOptions {
|
|
41
|
+
/**
|
|
42
|
+
* Video format selection, can be a format ID number, a SabrFormat object,
|
|
43
|
+
* or a function that selects a format from the available formats array.
|
|
44
|
+
*/
|
|
45
|
+
videoFormat?: number | SabrFormat | ((formats: SabrFormat[]) => SabrFormat | undefined);
|
|
46
|
+
/**
|
|
47
|
+
* Audio format selection, can be a format ID number, a SabrFormat object,
|
|
48
|
+
* or a function that selects a format from the available formats array.
|
|
49
|
+
*/
|
|
50
|
+
audioFormat?: number | SabrFormat | ((formats: SabrFormat[]) => SabrFormat | undefined);
|
|
51
|
+
/**
|
|
52
|
+
* Preferred video quality (e.g., "1080p", "720p").
|
|
53
|
+
*/
|
|
54
|
+
videoQuality?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Preferred audio quality (e.g., "high", "medium").
|
|
57
|
+
*/
|
|
58
|
+
audioQuality?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Preferred video language code.
|
|
61
|
+
*/
|
|
62
|
+
videoLanguage?: string;
|
|
63
|
+
/**
|
|
64
|
+
* Preferred audio language code.
|
|
65
|
+
*/
|
|
66
|
+
audioLanguage?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Whether to prefer WebM container format.
|
|
69
|
+
*/
|
|
70
|
+
preferWebM?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Whether to prefer MP4 container format.
|
|
73
|
+
*/
|
|
74
|
+
preferMP4?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Whether to prefer H.264 video codec.
|
|
77
|
+
*/
|
|
78
|
+
preferH264?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Whether to prefer Opus audio codec.
|
|
81
|
+
*/
|
|
82
|
+
preferOpus?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Maximum number of retry attempts when fetching segments.
|
|
85
|
+
* Default is 10.
|
|
86
|
+
*/
|
|
87
|
+
maxRetries?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Duration in milliseconds after which a stall is detected if no progress is made.
|
|
90
|
+
* Default is 30000 (30 seconds).
|
|
91
|
+
*/
|
|
92
|
+
stallDetectionMs?: number;
|
|
93
|
+
/**
|
|
94
|
+
* Enabled track types for streaming (audio only, video only, or both).
|
|
95
|
+
* @see EnabledTrackTypes
|
|
96
|
+
*/
|
|
97
|
+
enabledTrackTypes?: EnabledTrackTypes;
|
|
98
|
+
/**
|
|
99
|
+
* Previously saved state to resume a download.
|
|
100
|
+
*/
|
|
101
|
+
state?: SabrStreamState;
|
|
102
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabrStreamTypes.js","sourceRoot":"","sources":["../../../src/types/sabrStreamTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { ClientInfo, FormatInitializationMetadata, MediaHeader, NextRequestPolicy, PlaybackCookie, ReloadPlaybackContext, SabrContextSendingPolicy, SabrContextUpdate, SabrError, SabrRedirect, SnackbarMessage, StreamProtectionStatus } from '../utils/Protos.js';
|
|
2
|
+
import type { SabrFormat } from './shared.js';
|
|
3
|
+
import type { CacheManager, RequestMetadataManager } from '../utils/index.js';
|
|
4
|
+
export interface SabrRequestMetadata {
|
|
5
|
+
byteRange?: {
|
|
6
|
+
start: number;
|
|
7
|
+
end: number;
|
|
8
|
+
};
|
|
9
|
+
format?: SabrFormat;
|
|
10
|
+
isInit?: boolean;
|
|
11
|
+
isUMP?: boolean;
|
|
12
|
+
isSABR?: boolean;
|
|
13
|
+
streamInfo?: {
|
|
14
|
+
playbackCookie?: PlaybackCookie;
|
|
15
|
+
nextRequestPolicy?: NextRequestPolicy;
|
|
16
|
+
formatInitMetadata?: FormatInitializationMetadata[];
|
|
17
|
+
streamProtectionStatus?: StreamProtectionStatus;
|
|
18
|
+
reloadPlaybackContext?: ReloadPlaybackContext;
|
|
19
|
+
sabrContextSendingPolicy?: SabrContextSendingPolicy;
|
|
20
|
+
sabrContextUpdate?: SabrContextUpdate;
|
|
21
|
+
snackbarMessage?: SnackbarMessage;
|
|
22
|
+
mediaHeader?: MediaHeader;
|
|
23
|
+
redirect?: SabrRedirect;
|
|
24
|
+
};
|
|
25
|
+
error?: {
|
|
26
|
+
sabrError?: SabrError;
|
|
27
|
+
};
|
|
28
|
+
timestamp: number;
|
|
29
|
+
}
|
|
30
|
+
export interface SabrOptions {
|
|
31
|
+
/**
|
|
32
|
+
* Whether to enable caching of SABR segments.
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
enableCaching?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Enables verbose logging of all SABR requests made by the player.
|
|
38
|
+
* @NOTE: `DEBUG` level logging must be enabled for this to take effect.
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
enableVerboseRequestLogging?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Maximum size of the segment cache in megabytes.
|
|
44
|
+
* @default 3
|
|
45
|
+
*/
|
|
46
|
+
maxCacheSizeMB?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Maximum age of cached segments in seconds.
|
|
49
|
+
* @default 300 (5 minutes)
|
|
50
|
+
*/
|
|
51
|
+
maxCacheAgeSeconds?: number;
|
|
52
|
+
/**
|
|
53
|
+
* Player adapter to use for SABR streaming.
|
|
54
|
+
*/
|
|
55
|
+
playerAdapter?: SabrPlayerAdapter;
|
|
56
|
+
/**
|
|
57
|
+
* Client information to send with SABR requests.
|
|
58
|
+
*/
|
|
59
|
+
clientInfo?: ClientInfo;
|
|
60
|
+
}
|
|
61
|
+
export interface PlayerHttpResponse {
|
|
62
|
+
url: string;
|
|
63
|
+
method: string;
|
|
64
|
+
headers: Record<string, string>;
|
|
65
|
+
data?: ArrayBuffer | ArrayBufferView;
|
|
66
|
+
makeRequest: (url: string, headers: Record<string, string>) => Promise<Omit<PlayerHttpResponse, 'makeRequest'>>;
|
|
67
|
+
}
|
|
68
|
+
export interface PlayerHttpRequest {
|
|
69
|
+
url: string;
|
|
70
|
+
method: string;
|
|
71
|
+
headers: Record<string, string>;
|
|
72
|
+
segment: RequestSegment;
|
|
73
|
+
body?: ArrayBuffer | ArrayBufferView | null;
|
|
74
|
+
}
|
|
75
|
+
export interface RequestSegment {
|
|
76
|
+
getStartTime: () => number | null;
|
|
77
|
+
isInit: () => boolean;
|
|
78
|
+
}
|
|
79
|
+
export type RequestFilter = (request: PlayerHttpRequest) => Promise<PlayerHttpRequest | undefined> | PlayerHttpRequest | undefined;
|
|
80
|
+
export type ResponseFilter = (response: PlayerHttpResponse) => Promise<PlayerHttpResponse | undefined> | PlayerHttpResponse | undefined;
|
|
81
|
+
export interface SabrPlayerAdapter {
|
|
82
|
+
initialize(player: any, requestMetadataManager: RequestMetadataManager, cache: CacheManager | null): void;
|
|
83
|
+
getPlayerTime(): number;
|
|
84
|
+
getPlaybackRate(): number;
|
|
85
|
+
getBandwidthEstimate(): number;
|
|
86
|
+
getActiveTrackFormats(activeFormat: SabrFormat, sabrFormats: SabrFormat[]): {
|
|
87
|
+
audioFormat?: SabrFormat;
|
|
88
|
+
videoFormat?: SabrFormat;
|
|
89
|
+
};
|
|
90
|
+
registerRequestInterceptor(interceptor: RequestFilter): void;
|
|
91
|
+
registerResponseInterceptor(interceptor: ResponseFilter): void;
|
|
92
|
+
dispose(): void;
|
|
93
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabrStreamingAdapterTypes.js","sourceRoot":"","sources":["../../../src/types/sabrStreamingAdapterTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { CompositeBuffer } from '../core/CompositeBuffer.js';
|
|
2
|
+
export type Part = {
|
|
3
|
+
type: number;
|
|
4
|
+
size: number;
|
|
5
|
+
data: CompositeBuffer;
|
|
6
|
+
};
|
|
7
|
+
export interface SabrFormat {
|
|
8
|
+
itag: number;
|
|
9
|
+
lastModified: number;
|
|
10
|
+
xtags?: string;
|
|
11
|
+
width?: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
contentLength?: number;
|
|
14
|
+
audioTrackId?: string;
|
|
15
|
+
mimeType?: string;
|
|
16
|
+
isDrc?: boolean;
|
|
17
|
+
quality?: string;
|
|
18
|
+
qualityLabel?: string;
|
|
19
|
+
averageBitrate?: number;
|
|
20
|
+
bitrate: number;
|
|
21
|
+
audioQuality?: string;
|
|
22
|
+
approxDurationMs: number;
|
|
23
|
+
language?: string | null;
|
|
24
|
+
isDubbed?: boolean;
|
|
25
|
+
isAutoDubbed?: boolean;
|
|
26
|
+
isDescriptive?: boolean;
|
|
27
|
+
isSecondary?: boolean;
|
|
28
|
+
isOriginal?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface FormatStream {
|
|
31
|
+
itag: number;
|
|
32
|
+
last_modified_ms?: string;
|
|
33
|
+
lastModified?: string;
|
|
34
|
+
xtags?: string;
|
|
35
|
+
width?: number;
|
|
36
|
+
height?: number;
|
|
37
|
+
mime_type?: string;
|
|
38
|
+
mimeType?: string;
|
|
39
|
+
audio_quality?: string;
|
|
40
|
+
audioQuality?: string;
|
|
41
|
+
bitrate: number;
|
|
42
|
+
average_bitrate?: number;
|
|
43
|
+
averageBitrate?: number;
|
|
44
|
+
quality?: string;
|
|
45
|
+
quality_label?: string;
|
|
46
|
+
qualityLabel?: string;
|
|
47
|
+
audio_track?: {
|
|
48
|
+
id: string;
|
|
49
|
+
};
|
|
50
|
+
audioTrackId?: string;
|
|
51
|
+
is_drc?: boolean;
|
|
52
|
+
isDrc?: boolean;
|
|
53
|
+
approx_duration_ms?: number;
|
|
54
|
+
approxDurationMs?: string;
|
|
55
|
+
content_length?: number;
|
|
56
|
+
contentLength?: string;
|
|
57
|
+
is_auto_dubbed?: boolean;
|
|
58
|
+
is_descriptive?: boolean;
|
|
59
|
+
is_dubbed?: boolean;
|
|
60
|
+
language?: string | null;
|
|
61
|
+
is_original?: boolean;
|
|
62
|
+
is_secondary?: boolean;
|
|
63
|
+
}
|
|
64
|
+
export type FetchFunction = typeof fetch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/types/shared.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface CacheEntry {
|
|
2
|
+
data: Uint8Array;
|
|
3
|
+
timestamp: number;
|
|
4
|
+
size: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* A "proper" cache for storing segments.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CacheManager {
|
|
10
|
+
private initSegmentCache;
|
|
11
|
+
private segmentCache;
|
|
12
|
+
private currentSize;
|
|
13
|
+
private timerId;
|
|
14
|
+
private readonly maxCacheSize;
|
|
15
|
+
private readonly maxAge;
|
|
16
|
+
private readonly logger;
|
|
17
|
+
constructor(maxSizeMB?: number, maxAgeSeconds?: number);
|
|
18
|
+
getCacheEntries(): {
|
|
19
|
+
initSegmentCache: Map<string, CacheEntry>;
|
|
20
|
+
segmentCache: Map<string, CacheEntry>;
|
|
21
|
+
};
|
|
22
|
+
setInitSegment(key: string, data: Uint8Array): void;
|
|
23
|
+
setSegment(key: string, data: Uint8Array): void;
|
|
24
|
+
getInitSegment(key: string): Uint8Array | undefined;
|
|
25
|
+
getSegment(key: string): Uint8Array | undefined;
|
|
26
|
+
private isExpired;
|
|
27
|
+
private enforceStorageLimit;
|
|
28
|
+
private clearExpiredEntries;
|
|
29
|
+
private removeOldestEntries;
|
|
30
|
+
private startGarbageCollection;
|
|
31
|
+
dispose(): void;
|
|
32
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Logger } from './Logger.js';
|
|
2
|
+
const TAG = 'CacheManager';
|
|
3
|
+
/**
|
|
4
|
+
* A "proper" cache for storing segments.
|
|
5
|
+
*/
|
|
6
|
+
export class CacheManager {
|
|
7
|
+
constructor(maxSizeMB = 50, maxAgeSeconds = 600) {
|
|
8
|
+
this.initSegmentCache = new Map();
|
|
9
|
+
this.segmentCache = new Map();
|
|
10
|
+
this.currentSize = 0;
|
|
11
|
+
this.logger = Logger.getInstance();
|
|
12
|
+
this.maxCacheSize = maxSizeMB * 1024 * 1024;
|
|
13
|
+
this.maxAge = maxAgeSeconds * 1000;
|
|
14
|
+
this.startGarbageCollection();
|
|
15
|
+
}
|
|
16
|
+
getCacheEntries() {
|
|
17
|
+
return {
|
|
18
|
+
initSegmentCache: this.initSegmentCache,
|
|
19
|
+
segmentCache: this.segmentCache
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
setInitSegment(key, data) {
|
|
23
|
+
const entry = {
|
|
24
|
+
data,
|
|
25
|
+
timestamp: Date.now(),
|
|
26
|
+
size: data.byteLength
|
|
27
|
+
};
|
|
28
|
+
if (!this.initSegmentCache.has(key)) {
|
|
29
|
+
this.currentSize += entry.size;
|
|
30
|
+
this.enforceStorageLimit();
|
|
31
|
+
}
|
|
32
|
+
this.initSegmentCache.set(key, entry);
|
|
33
|
+
}
|
|
34
|
+
setSegment(key, data) {
|
|
35
|
+
const entry = {
|
|
36
|
+
data,
|
|
37
|
+
timestamp: Date.now(),
|
|
38
|
+
size: data.byteLength
|
|
39
|
+
};
|
|
40
|
+
this.currentSize += entry.size;
|
|
41
|
+
this.enforceStorageLimit();
|
|
42
|
+
this.segmentCache.set(key, entry);
|
|
43
|
+
}
|
|
44
|
+
getInitSegment(key) {
|
|
45
|
+
const entry = this.initSegmentCache.get(key);
|
|
46
|
+
if (entry && !this.isExpired(entry)) {
|
|
47
|
+
this.logger.debug(TAG, `Cache hit for init segment: ${key}`);
|
|
48
|
+
entry.timestamp = Date.now();
|
|
49
|
+
return entry.data;
|
|
50
|
+
}
|
|
51
|
+
// Expired. Get rid of it.
|
|
52
|
+
if (entry) {
|
|
53
|
+
this.initSegmentCache.delete(key);
|
|
54
|
+
this.currentSize -= entry.size;
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
getSegment(key) {
|
|
59
|
+
const entry = this.segmentCache.get(key);
|
|
60
|
+
if (entry && !this.isExpired(entry)) {
|
|
61
|
+
this.logger.debug(TAG, `Cache hit for segment: ${key}`);
|
|
62
|
+
const data = entry.data;
|
|
63
|
+
this.segmentCache.delete(key);
|
|
64
|
+
this.currentSize -= entry.size;
|
|
65
|
+
return data;
|
|
66
|
+
}
|
|
67
|
+
// Expired. Get rid of it.
|
|
68
|
+
if (entry) {
|
|
69
|
+
this.segmentCache.delete(key);
|
|
70
|
+
this.currentSize -= entry.size;
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
isExpired(entry) {
|
|
75
|
+
return Date.now() - entry.timestamp > this.maxAge;
|
|
76
|
+
}
|
|
77
|
+
enforceStorageLimit() {
|
|
78
|
+
if (this.currentSize <= this.maxCacheSize)
|
|
79
|
+
return;
|
|
80
|
+
this.clearExpiredEntries();
|
|
81
|
+
// If still over limit, remove oldest entries.
|
|
82
|
+
if (this.currentSize > this.maxCacheSize) {
|
|
83
|
+
this.removeOldestEntries();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
clearExpiredEntries() {
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
for (const [key, entry] of this.segmentCache.entries()) {
|
|
89
|
+
if (now - entry.timestamp > this.maxAge) {
|
|
90
|
+
this.logger.debug(TAG, `Removing expired segment from cache: ${key}`);
|
|
91
|
+
this.segmentCache.delete(key);
|
|
92
|
+
this.currentSize -= entry.size;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const [key, entry] of this.initSegmentCache.entries()) {
|
|
96
|
+
if (now - entry.timestamp > this.maxAge) {
|
|
97
|
+
this.logger.debug(TAG, `Removing expired init segment from cache: ${key}`);
|
|
98
|
+
this.initSegmentCache.delete(key);
|
|
99
|
+
this.currentSize -= entry.size;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
removeOldestEntries() {
|
|
104
|
+
const segments = Array.from(this.segmentCache.entries());
|
|
105
|
+
const initSegments = Array.from(this.initSegmentCache.entries());
|
|
106
|
+
const allEntries = [...segments, ...initSegments]
|
|
107
|
+
.sort((a, b) => a[1].timestamp - b[1].timestamp);
|
|
108
|
+
while (this.currentSize > this.maxCacheSize && allEntries.length > 0) {
|
|
109
|
+
const [key, entry] = allEntries.shift();
|
|
110
|
+
this.segmentCache.delete(key);
|
|
111
|
+
this.initSegmentCache.delete(key);
|
|
112
|
+
this.currentSize -= entry.size;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
startGarbageCollection() {
|
|
116
|
+
this.timerId = setInterval(() => {
|
|
117
|
+
this.clearExpiredEntries();
|
|
118
|
+
}, 60000);
|
|
119
|
+
}
|
|
120
|
+
dispose() {
|
|
121
|
+
this.initSegmentCache.clear();
|
|
122
|
+
this.segmentCache.clear();
|
|
123
|
+
this.currentSize = 0;
|
|
124
|
+
if (this.timerId) {
|
|
125
|
+
clearInterval(this.timerId);
|
|
126
|
+
this.timerId = undefined;
|
|
127
|
+
}
|
|
128
|
+
this.logger.debug(TAG, 'Disposed');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=CacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../../src/utils/CacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
export declare class SabrAdapterError extends Error {
|
|
2
|
+
code?: string | undefined;
|
|
3
|
+
constructor(message: string, code?: string | undefined);
|
|
4
|
+
}
|
|
1
5
|
export declare class EventEmitterLike extends EventTarget {
|
|
2
6
|
#private;
|
|
3
7
|
constructor();
|
|
@@ -5,4 +9,5 @@ export declare class EventEmitterLike extends EventTarget {
|
|
|
5
9
|
on(type: string, listener: (...args: any[]) => void): void;
|
|
6
10
|
once(type: string, listener: (...args: any[]) => void): void;
|
|
7
11
|
off(type: string, listener: (...args: any[]) => void): void;
|
|
12
|
+
removeAllListeners(type?: string): void;
|
|
8
13
|
}
|
|
@@ -1,14 +1,38 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
1
7
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
8
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
11
|
};
|
|
6
|
-
var
|
|
7
|
-
|
|
12
|
+
var _CustomEvent_detail, _EventEmitterLike_legacyListeners;
|
|
13
|
+
// See https://github.com/nodejs/node/issues/40678#issuecomment-1126944677
|
|
14
|
+
class CustomEvent extends Event {
|
|
15
|
+
constructor(type, options) {
|
|
16
|
+
super(type, options);
|
|
17
|
+
_CustomEvent_detail.set(this, void 0);
|
|
18
|
+
__classPrivateFieldSet(this, _CustomEvent_detail, options?.detail ?? null, "f");
|
|
19
|
+
}
|
|
20
|
+
get detail() {
|
|
21
|
+
return __classPrivateFieldGet(this, _CustomEvent_detail, "f");
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
_CustomEvent_detail = new WeakMap();
|
|
25
|
+
export class SabrAdapterError extends Error {
|
|
26
|
+
constructor(message, code) {
|
|
27
|
+
super(`[SabrStreamingAdapter] ${message}`);
|
|
28
|
+
this.code = code;
|
|
29
|
+
this.name = 'SabrAdapterError';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
8
32
|
export class EventEmitterLike extends EventTarget {
|
|
9
33
|
constructor() {
|
|
10
34
|
super();
|
|
11
|
-
|
|
35
|
+
_EventEmitterLike_legacyListeners.set(this, new Map());
|
|
12
36
|
}
|
|
13
37
|
emit(type, ...args) {
|
|
14
38
|
const event = new CustomEvent(type, { detail: args });
|
|
@@ -23,7 +47,7 @@ export class EventEmitterLike extends EventTarget {
|
|
|
23
47
|
listener(ev);
|
|
24
48
|
}
|
|
25
49
|
};
|
|
26
|
-
__classPrivateFieldGet(this,
|
|
50
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").set(listener, { type, wrapper });
|
|
27
51
|
this.addEventListener(type, wrapper);
|
|
28
52
|
}
|
|
29
53
|
once(type, listener) {
|
|
@@ -36,15 +60,32 @@ export class EventEmitterLike extends EventTarget {
|
|
|
36
60
|
}
|
|
37
61
|
this.off(type, listener);
|
|
38
62
|
};
|
|
39
|
-
__classPrivateFieldGet(this,
|
|
63
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").set(listener, { type, wrapper });
|
|
40
64
|
this.addEventListener(type, wrapper);
|
|
41
65
|
}
|
|
42
66
|
off(type, listener) {
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
this.removeEventListener(type, wrapper);
|
|
46
|
-
__classPrivateFieldGet(this,
|
|
67
|
+
const listenerData = __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").get(listener);
|
|
68
|
+
if (listenerData && listenerData.type === type) {
|
|
69
|
+
this.removeEventListener(type, listenerData.wrapper);
|
|
70
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
removeAllListeners(type) {
|
|
74
|
+
if (type) {
|
|
75
|
+
for (const [listener, listenerData] of __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").entries()) {
|
|
76
|
+
if (listenerData.type === type) {
|
|
77
|
+
this.removeEventListener(type, listenerData.wrapper);
|
|
78
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
for (const [listener, listenerData] of __classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").entries()) {
|
|
84
|
+
this.removeEventListener(listenerData.type, listenerData.wrapper);
|
|
85
|
+
__classPrivateFieldGet(this, _EventEmitterLike_legacyListeners, "f").delete(listener);
|
|
86
|
+
}
|
|
47
87
|
}
|
|
48
88
|
}
|
|
49
89
|
}
|
|
50
|
-
|
|
90
|
+
_EventEmitterLike_legacyListeners = new WeakMap();
|
|
91
|
+
//# sourceMappingURL=EventEmitterLike.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitterLike.js","sourceRoot":"","sources":["../../../src/utils/EventEmitterLike.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export declare enum LogLevel {
|
|
2
|
+
NONE = 0,
|
|
3
|
+
ERROR = 1,
|
|
4
|
+
WARN = 2,
|
|
5
|
+
INFO = 3,
|
|
6
|
+
DEBUG = 4,
|
|
7
|
+
ALL = 99
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Singleton logger utility.
|
|
11
|
+
*
|
|
12
|
+
* Allows enabling or disabling specific log levels (`ERROR`, `WARN`, `INFO`, `DEBUG`)
|
|
13
|
+
* at runtime. Supports logging with tags and message arguments.
|
|
14
|
+
*
|
|
15
|
+
* Usage:
|
|
16
|
+
* ```ts
|
|
17
|
+
* const logger = Logger.getInstance();
|
|
18
|
+
* logger.setLogLevels(LogLevel.ERROR, LogLevel.INFO);
|
|
19
|
+
* logger.error('MyTag', 'An error occurred');
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare class Logger {
|
|
23
|
+
private static instance;
|
|
24
|
+
private currentLogLevels;
|
|
25
|
+
static getInstance(): Logger;
|
|
26
|
+
/**
|
|
27
|
+
* Sets the active log levels.
|
|
28
|
+
* Call with LogLevel.NONE or no arguments to turn off all logging.
|
|
29
|
+
* Otherwise, specify one or more log levels to be active.
|
|
30
|
+
* Use LogLevel.ALL to enable all log levels.
|
|
31
|
+
*/
|
|
32
|
+
setLogLevels(...levels: LogLevel[]): void;
|
|
33
|
+
/**
|
|
34
|
+
* Gets the current set of active log levels.
|
|
35
|
+
* @returns A new Set containing the active LogLevel enums.
|
|
36
|
+
*/
|
|
37
|
+
getLogLevels(): Set<LogLevel>;
|
|
38
|
+
private log;
|
|
39
|
+
error(tag: string, ...messages: any[]): void;
|
|
40
|
+
warn(tag: string, ...messages: any[]): void;
|
|
41
|
+
info(tag: string, ...messages: any[]): void;
|
|
42
|
+
debug(tag: string, ...messages: any[]): void;
|
|
43
|
+
}
|