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,93 @@
|
|
|
1
|
+
export const LogLevel = {
|
|
2
|
+
NONE: 0, 0: "NONE",
|
|
3
|
+
ERROR: 1, 1: "ERROR",
|
|
4
|
+
WARN: 2, 2: "WARN",
|
|
5
|
+
INFO: 3, 3: "INFO",
|
|
6
|
+
DEBUG: 4, 4: "DEBUG",
|
|
7
|
+
ALL: 99, 99: "ALL"
|
|
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 class Logger {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.currentLogLevels = new Set([LogLevel.INFO, LogLevel.ERROR]);
|
|
25
|
+
}
|
|
26
|
+
static getInstance() {
|
|
27
|
+
if (!Logger.instance) {
|
|
28
|
+
Logger.instance = new Logger();
|
|
29
|
+
}
|
|
30
|
+
return Logger.instance;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sets the active log levels.
|
|
34
|
+
* Call with LogLevel.NONE or no arguments to turn off all logging.
|
|
35
|
+
* Otherwise, specify one or more log levels to be active.
|
|
36
|
+
* Use LogLevel.ALL to enable all log levels.
|
|
37
|
+
*/
|
|
38
|
+
setLogLevels(...levels) {
|
|
39
|
+
if (levels.length === 0 || levels.includes(LogLevel.NONE)) {
|
|
40
|
+
this.currentLogLevels = new Set(); // Turn off logging
|
|
41
|
+
}
|
|
42
|
+
else if (levels.includes(LogLevel.ALL)) {
|
|
43
|
+
this.currentLogLevels = new Set([
|
|
44
|
+
LogLevel.ERROR,
|
|
45
|
+
LogLevel.WARN,
|
|
46
|
+
LogLevel.INFO,
|
|
47
|
+
LogLevel.DEBUG
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.currentLogLevels = new Set(levels.filter((level) => level !== LogLevel.NONE && level !== LogLevel.ALL));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Gets the current set of active log levels.
|
|
56
|
+
* @returns A new Set containing the active LogLevel enums.
|
|
57
|
+
*/
|
|
58
|
+
getLogLevels() {
|
|
59
|
+
return new Set(this.currentLogLevels);
|
|
60
|
+
}
|
|
61
|
+
log(level, tag, ...messages) {
|
|
62
|
+
if (level !== LogLevel.NONE && this.currentLogLevels.has(level)) {
|
|
63
|
+
const prefix = `[${LogLevel[level]}] [${tag}]`;
|
|
64
|
+
switch (level) {
|
|
65
|
+
case LogLevel.ERROR:
|
|
66
|
+
console.error(prefix, ...messages);
|
|
67
|
+
break;
|
|
68
|
+
case LogLevel.WARN:
|
|
69
|
+
console.warn(prefix, ...messages);
|
|
70
|
+
break;
|
|
71
|
+
case LogLevel.INFO:
|
|
72
|
+
console.info(prefix, ...messages);
|
|
73
|
+
break;
|
|
74
|
+
case LogLevel.DEBUG:
|
|
75
|
+
console.debug(prefix, ...messages);
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
error(tag, ...messages) {
|
|
81
|
+
this.log(LogLevel.ERROR, tag, ...messages);
|
|
82
|
+
}
|
|
83
|
+
warn(tag, ...messages) {
|
|
84
|
+
this.log(LogLevel.WARN, tag, ...messages);
|
|
85
|
+
}
|
|
86
|
+
info(tag, ...messages) {
|
|
87
|
+
this.log(LogLevel.INFO, tag, ...messages);
|
|
88
|
+
}
|
|
89
|
+
debug(tag, ...messages) {
|
|
90
|
+
this.log(LogLevel.DEBUG, tag, ...messages);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/utils/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,31 @@
|
|
|
1
1
|
export { FormatInitializationMetadata } from '../../protos/generated/video_streaming/format_initialization_metadata.js';
|
|
2
|
-
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
3
2
|
export { MediaHeader } from '../../protos/generated/video_streaming/media_header.js';
|
|
4
|
-
export {
|
|
3
|
+
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
4
|
+
export { MediaCapabilities } from '../../protos/generated/video_streaming/media_capabilities.js';
|
|
5
|
+
export { CryptoParams } from '../../protos/generated/video_streaming/crypto_params.js';
|
|
5
6
|
export { PlaybackCookie } from '../../protos/generated/video_streaming/playback_cookie.js';
|
|
6
7
|
export { PlaybackStartPolicy } from '../../protos/generated/video_streaming/playback_start_policy.js';
|
|
8
|
+
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
9
|
+
export { ClientAbrState } from '../../protos/generated/video_streaming/client_abr_state.js';
|
|
10
|
+
export { NextRequestPolicy } from '../../protos/generated/video_streaming/next_request_policy.js';
|
|
7
11
|
export { RequestCancellationPolicy } from '../../protos/generated/video_streaming/request_cancellation_policy.js';
|
|
12
|
+
export { RequestIdentifier } from '../../protos/generated/video_streaming/request_identifier.js';
|
|
8
13
|
export { SabrError } from '../../protos/generated/video_streaming/sabr_error.js';
|
|
9
14
|
export { SabrRedirect } from '../../protos/generated/video_streaming/sabr_redirect.js';
|
|
10
|
-
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
11
|
-
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
12
15
|
export { OnesieRequest } from '../../protos/generated/video_streaming/onesie_request.js';
|
|
13
|
-
export { EncryptedPlayerRequest } from '../../protos/generated/video_streaming/encrypted_player_request.js';
|
|
14
16
|
export { OnesieHeader } from '../../protos/generated/video_streaming/onesie_header.js';
|
|
15
17
|
export { OnesieHeaderType } from '../../protos/generated/video_streaming/onesie_header_type.js';
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
18
|
+
export { OnesieInnertubeRequest } from '../../protos/generated/video_streaming/onesie_innertube_request.js';
|
|
19
|
+
export { OnesieInnertubeResponse } from '../../protos/generated/video_streaming/onesie_innertube_response.js';
|
|
20
|
+
export { OnesieProxyStatus } from '../../protos/generated/video_streaming/onesie_proxy_status.js';
|
|
21
|
+
export { InnertubeRequest, UstreamerFlags } from '../../protos/generated/video_streaming/innertube_request.js';
|
|
22
|
+
export { StreamerContext, StreamerContext_ClientInfo as ClientInfo } from '../../protos/generated/video_streaming/streamer_context.js';
|
|
23
|
+
export { SabrContextUpdate, SabrContextUpdate_SabrContextWritePolicy as SabrContextWritePolicy, SabrContextValue } from '../../protos/generated/video_streaming/sabr_context_update.js';
|
|
24
|
+
export { SabrContextSendingPolicy } from '../../protos/generated/video_streaming/sabr_context_sending_policy.js';
|
|
25
|
+
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
23
26
|
export { LiveMetadata } from '../../protos/generated/video_streaming/live_metadata.js';
|
|
24
|
-
export {
|
|
27
|
+
export { SnackbarMessage } from '../../protos/generated/video_streaming/snackbar_message.js';
|
|
28
|
+
export { UMPPartId } from '../../protos/generated/video_streaming/ump_part_id.js';
|
|
29
|
+
export { ReloadPlaybackContext, ReloadPlaybackParams } from '../../protos/generated/video_streaming/reload_player_response.js';
|
|
30
|
+
export { FormatSelectionConfig } from '../../protos/generated/video_streaming/format_selection_config.js';
|
|
31
|
+
export { FormatId, KeyValuePair, Range, HttpHeader, IdentifierToken, CompressionType, OnesieRequestTarget, AuthorizedFormat, AudioQuality, PlaybackAuthorization, NetworkMeteredState, PlaybackAudioRouteOutputType, SeekSource, VideoQualitySetting } from '../../protos/generated/misc/common.js';
|
package/dist/src/utils/Protos.js
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
export { FormatInitializationMetadata } from '../../protos/generated/video_streaming/format_initialization_metadata.js';
|
|
2
|
-
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
3
2
|
export { MediaHeader } from '../../protos/generated/video_streaming/media_header.js';
|
|
4
|
-
export {
|
|
3
|
+
export { BufferedRange } from '../../protos/generated/video_streaming/buffered_range.js';
|
|
4
|
+
export { MediaCapabilities } from '../../protos/generated/video_streaming/media_capabilities.js';
|
|
5
|
+
export { CryptoParams } from '../../protos/generated/video_streaming/crypto_params.js';
|
|
5
6
|
export { PlaybackCookie } from '../../protos/generated/video_streaming/playback_cookie.js';
|
|
6
7
|
export { PlaybackStartPolicy } from '../../protos/generated/video_streaming/playback_start_policy.js';
|
|
8
|
+
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
9
|
+
export { ClientAbrState } from '../../protos/generated/video_streaming/client_abr_state.js';
|
|
10
|
+
export { NextRequestPolicy } from '../../protos/generated/video_streaming/next_request_policy.js';
|
|
7
11
|
export { RequestCancellationPolicy } from '../../protos/generated/video_streaming/request_cancellation_policy.js';
|
|
12
|
+
export { RequestIdentifier } from '../../protos/generated/video_streaming/request_identifier.js';
|
|
8
13
|
export { SabrError } from '../../protos/generated/video_streaming/sabr_error.js';
|
|
9
14
|
export { SabrRedirect } from '../../protos/generated/video_streaming/sabr_redirect.js';
|
|
10
|
-
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
11
|
-
export { VideoPlaybackAbrRequest } from '../../protos/generated/video_streaming/video_playback_abr_request.js';
|
|
12
15
|
export { OnesieRequest } from '../../protos/generated/video_streaming/onesie_request.js';
|
|
13
|
-
export { EncryptedPlayerRequest } from '../../protos/generated/video_streaming/encrypted_player_request.js';
|
|
14
16
|
export { OnesieHeader } from '../../protos/generated/video_streaming/onesie_header.js';
|
|
15
17
|
export { OnesieHeaderType } from '../../protos/generated/video_streaming/onesie_header_type.js';
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
18
|
+
export { OnesieInnertubeRequest } from '../../protos/generated/video_streaming/onesie_innertube_request.js';
|
|
19
|
+
export { OnesieInnertubeResponse } from '../../protos/generated/video_streaming/onesie_innertube_response.js';
|
|
20
|
+
export { OnesieProxyStatus } from '../../protos/generated/video_streaming/onesie_proxy_status.js';
|
|
21
|
+
export { InnertubeRequest, UstreamerFlags } from '../../protos/generated/video_streaming/innertube_request.js';
|
|
22
|
+
export { StreamerContext, StreamerContext_ClientInfo as ClientInfo } from '../../protos/generated/video_streaming/streamer_context.js';
|
|
23
|
+
export { SabrContextUpdate, SabrContextUpdate_SabrContextWritePolicy as SabrContextWritePolicy, SabrContextValue } from '../../protos/generated/video_streaming/sabr_context_update.js';
|
|
24
|
+
export { SabrContextSendingPolicy } from '../../protos/generated/video_streaming/sabr_context_sending_policy.js';
|
|
25
|
+
export { StreamProtectionStatus } from '../../protos/generated/video_streaming/stream_protection_status.js';
|
|
23
26
|
export { LiveMetadata } from '../../protos/generated/video_streaming/live_metadata.js';
|
|
24
|
-
export {
|
|
27
|
+
export { SnackbarMessage } from '../../protos/generated/video_streaming/snackbar_message.js';
|
|
28
|
+
export { UMPPartId } from '../../protos/generated/video_streaming/ump_part_id.js';
|
|
29
|
+
export { ReloadPlaybackContext, ReloadPlaybackParams } from '../../protos/generated/video_streaming/reload_player_response.js';
|
|
30
|
+
export { FormatSelectionConfig } from '../../protos/generated/video_streaming/format_selection_config.js';
|
|
31
|
+
export { FormatId, KeyValuePair, Range, HttpHeader, IdentifierToken, CompressionType, OnesieRequestTarget, AuthorizedFormat, AudioQuality, PlaybackAuthorization, NetworkMeteredState, PlaybackAudioRouteOutputType, SeekSource, VideoQualitySetting } from '../../protos/generated/misc/common.js';
|
|
32
|
+
//# sourceMappingURL=Protos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Protos.js","sourceRoot":"","sources":["../../../src/utils/Protos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,0EAA0E,CAAC;AACxH,OAAO,EAAE,WAAW,EAAE,MAAM,wDAAwD,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,0DAA0D,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,iEAAiE,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,sEAAsE,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,4DAA4D,CAAC;AAE5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,+DAA+D,CAAC;AAClG,OAAO,EAAE,yBAAyB,EAAE,MAAM,uEAAuE,CAAC;AAClH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8DAA8D,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AAEvF,OAAO,EAAE,aAAa,EAAE,MAAM,0DAA0D,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,8DAA8D,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,oEAAoE,CAAC;AAC5G,OAAO,EAAE,uBAAuB,EAAE,MAAM,qEAAqE,CAAC;AAC9G,OAAO,EAAE,iBAAiB,EAAE,MAAM,+DAA+D,CAAC;AAClG,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,0BAA0B,IAAI,UAAU,EAAE,MAAM,4DAA4D,CAAC;AACvI,OAAO,EAAE,iBAAiB,EAAE,wCAAwC,IAAI,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,+DAA+D,CAAC;AACxL,OAAO,EAAE,wBAAwB,EAAE,MAAM,uEAAuE,CAAC;AAEjH,OAAO,EAAE,sBAAsB,EAAE,MAAM,oEAAoE,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,yDAAyD,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,4DAA4D,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,uDAAuD,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kEAAkE,CAAC;AAC/H,OAAO,EAAE,qBAAqB,EAAE,MAAM,mEAAmE,CAAC;AAE1G,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,UAAU,EACV,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,mBAAmB,EACnB,4BAA4B,EAC5B,UAAU,EACV,mBAAmB,EACpB,MAAM,uCAAuC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SabrRequestMetadata } from '../types/sabrStreamingAdapterTypes.js';
|
|
2
|
+
/**
|
|
3
|
+
* Manages request metadata objects.
|
|
4
|
+
*/
|
|
5
|
+
export declare class RequestMetadataManager {
|
|
6
|
+
metadataMap: Map<string, SabrRequestMetadata>;
|
|
7
|
+
private lastCleanup;
|
|
8
|
+
private readonly CLEANUP_INTERVAL;
|
|
9
|
+
private readonly ENTRY_EXPIRATION_TIME;
|
|
10
|
+
constructor();
|
|
11
|
+
getRequestMetadata(url: string, del?: boolean): SabrRequestMetadata | undefined;
|
|
12
|
+
setRequestMetadata(url: string, context: SabrRequestMetadata): void;
|
|
13
|
+
private conditionalCleanUp;
|
|
14
|
+
private cleanUp;
|
|
15
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Manages request metadata objects.
|
|
3
|
+
*/
|
|
4
|
+
export class RequestMetadataManager {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.CLEANUP_INTERVAL = 30000;
|
|
7
|
+
this.ENTRY_EXPIRATION_TIME = 1000 * 60 * 3;
|
|
8
|
+
this.metadataMap = new Map();
|
|
9
|
+
this.lastCleanup = Date.now();
|
|
10
|
+
}
|
|
11
|
+
getRequestMetadata(url, del = false) {
|
|
12
|
+
const requestNumber = new URL(url).searchParams.get('rn') || '';
|
|
13
|
+
const streamingContext = this.metadataMap.get(requestNumber);
|
|
14
|
+
// Check if this specific entry is expired.
|
|
15
|
+
if (streamingContext && Date.now() - streamingContext.timestamp > this.ENTRY_EXPIRATION_TIME) {
|
|
16
|
+
this.metadataMap.delete(requestNumber);
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
if (del) {
|
|
20
|
+
this.metadataMap.delete(requestNumber);
|
|
21
|
+
}
|
|
22
|
+
this.conditionalCleanUp();
|
|
23
|
+
return streamingContext;
|
|
24
|
+
}
|
|
25
|
+
setRequestMetadata(url, context) {
|
|
26
|
+
const requestNumber = new URL(url).searchParams.get('rn');
|
|
27
|
+
if (requestNumber) {
|
|
28
|
+
this.metadataMap.set(requestNumber, context);
|
|
29
|
+
this.conditionalCleanUp();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
conditionalCleanUp() {
|
|
33
|
+
const now = Date.now();
|
|
34
|
+
if (now - this.lastCleanup > this.CLEANUP_INTERVAL) {
|
|
35
|
+
this.cleanUp();
|
|
36
|
+
this.lastCleanup = now;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
cleanUp() {
|
|
40
|
+
// Should rarely run. This is only for requests that fail and never get handled (e.g., network errors).
|
|
41
|
+
for (const [key, context] of this.metadataMap.entries()) {
|
|
42
|
+
if (Date.now() - context.timestamp > this.ENTRY_EXPIRATION_TIME) {
|
|
43
|
+
this.metadataMap.delete(key);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=RequestMetadataManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RequestMetadataManager.js","sourceRoot":"","sources":["../../../src/utils/RequestMetadataManager.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAMjC;QAHiB,qBAAgB,GAAG,KAAK,CAAC;QACzB,0BAAqB,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;QAGrD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAA+B,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAEM,kBAAkB,CAAC,GAAW,EAAE,GAAG,GAAG,KAAK;QAChD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAEhE,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7D,2CAA2C;QAC3C,IAAI,gBAAgB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7F,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAEM,kBAAkB,CAAC,GAAW,EAAE,OAA4B;QACjE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAC7C,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,OAAO;QACb,uGAAuG;QACvG,KAAK,MAAM,CAAE,GAAG,EAAE,OAAO,CAAE,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1D,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAChE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { MediaHeader } from './Protos.js';
|
|
2
|
+
import type { FormatInitializationMetadata } from './Protos.js';
|
|
3
|
+
import type { SabrFormat } from '../types/shared.js';
|
|
4
|
+
import type { SabrRequestMetadata } from '../types/sabrStreamingAdapterTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Creates a format key based on itag and xtags.
|
|
7
|
+
* @returns A string format key.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createKey(itag: number | undefined, xtags: string | undefined): string;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a format key from a SabrFormat object.
|
|
12
|
+
* @returns A string format key or undefined if format is undefined.
|
|
13
|
+
*/
|
|
14
|
+
export declare function fromFormat(format?: {
|
|
15
|
+
itag?: number;
|
|
16
|
+
xtags?: string;
|
|
17
|
+
}): string | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a format key from a MediaHeader object.
|
|
20
|
+
* @returns A string format key.
|
|
21
|
+
*/
|
|
22
|
+
export declare function fromMediaHeader(mediaHeader: MediaHeader): string;
|
|
23
|
+
/**
|
|
24
|
+
* Creates a format key from FormatInitializationMetadata.
|
|
25
|
+
* @returns A string format key or undefined if formatId is undefined.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fromFormatInitializationMetadata(formatInitMetadata: FormatInitializationMetadata): string;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a segment cache key.
|
|
30
|
+
* @param mediaHeader - The MediaHeader object.
|
|
31
|
+
* @param format - Format object (needed for init segments.)
|
|
32
|
+
* @returns A string key for caching segments.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createSegmentCacheKey(mediaHeader: MediaHeader, format?: SabrFormat): string;
|
|
35
|
+
/**
|
|
36
|
+
* Creates a cache key from request metadata.
|
|
37
|
+
* @returns A string key for caching segments.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createSegmentCacheKeyFromMetadata(requestMetadata: SabrRequestMetadata): string;
|
|
40
|
+
/**
|
|
41
|
+
* Generates a unique format ID based on the SabrFormat properties.
|
|
42
|
+
* @param format - The SabrFormat object.
|
|
43
|
+
* @returns A unique string identifier for the format.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getUniqueFormatId(format: SabrFormat): string;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a format key based on itag and xtags.
|
|
3
|
+
* @returns A string format key.
|
|
4
|
+
*/
|
|
5
|
+
export function createKey(itag, xtags) {
|
|
6
|
+
return `${itag || ''}:${xtags || ''}`;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Creates a format key from a SabrFormat object.
|
|
10
|
+
* @returns A string format key or undefined if format is undefined.
|
|
11
|
+
*/
|
|
12
|
+
export function fromFormat(format) {
|
|
13
|
+
if (!format)
|
|
14
|
+
return undefined;
|
|
15
|
+
return createKey(format.itag, format.xtags);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Creates a format key from a MediaHeader object.
|
|
19
|
+
* @returns A string format key.
|
|
20
|
+
*/
|
|
21
|
+
export function fromMediaHeader(mediaHeader) {
|
|
22
|
+
return createKey(mediaHeader.itag, mediaHeader.xtags);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates a format key from FormatInitializationMetadata.
|
|
26
|
+
* @returns A string format key or undefined if formatId is undefined.
|
|
27
|
+
*/
|
|
28
|
+
export function fromFormatInitializationMetadata(formatInitMetadata) {
|
|
29
|
+
if (!formatInitMetadata.formatId)
|
|
30
|
+
return '';
|
|
31
|
+
return createKey(formatInitMetadata.formatId.itag, formatInitMetadata.formatId.xtags);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a segment cache key.
|
|
35
|
+
* @param mediaHeader - The MediaHeader object.
|
|
36
|
+
* @param format - Format object (needed for init segments.)
|
|
37
|
+
* @returns A string key for caching segments.
|
|
38
|
+
*/
|
|
39
|
+
export function createSegmentCacheKey(mediaHeader, format) {
|
|
40
|
+
if (mediaHeader.isInitSeg && format) {
|
|
41
|
+
return `${mediaHeader.itag}:${mediaHeader.xtags || ''}:${format.contentLength || ''}:${format.mimeType || ''}`;
|
|
42
|
+
}
|
|
43
|
+
return `${mediaHeader.startRange || '0'}-${mediaHeader.itag}-${mediaHeader.xtags || ''}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates a cache key from request metadata.
|
|
47
|
+
* @returns A string key for caching segments.
|
|
48
|
+
*/
|
|
49
|
+
export function createSegmentCacheKeyFromMetadata(requestMetadata) {
|
|
50
|
+
if (!requestMetadata.byteRange || !requestMetadata.format)
|
|
51
|
+
throw new Error('Invalid metadata: byteRange or format is missing');
|
|
52
|
+
const pseudoMediaHeader = {
|
|
53
|
+
itag: requestMetadata.format.itag,
|
|
54
|
+
xtags: requestMetadata.format.xtags || '',
|
|
55
|
+
startRange: requestMetadata.byteRange.start,
|
|
56
|
+
isInitSeg: requestMetadata.isInit
|
|
57
|
+
};
|
|
58
|
+
return createSegmentCacheKey(pseudoMediaHeader, requestMetadata.isInit ? requestMetadata.format : undefined);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generates a unique format ID based on the SabrFormat properties.
|
|
62
|
+
* @param format - The SabrFormat object.
|
|
63
|
+
* @returns A unique string identifier for the format.
|
|
64
|
+
*/
|
|
65
|
+
export function getUniqueFormatId(format) {
|
|
66
|
+
if (format.width)
|
|
67
|
+
return format.itag.toString();
|
|
68
|
+
const uidParts = [format.itag.toString()];
|
|
69
|
+
if (format.audioTrackId) {
|
|
70
|
+
uidParts.push(format.audioTrackId);
|
|
71
|
+
}
|
|
72
|
+
if (format.isDrc) {
|
|
73
|
+
uidParts.push('drc');
|
|
74
|
+
}
|
|
75
|
+
return uidParts.join('-');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=formatKeyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatKeyUtils.js","sourceRoot":"","sources":["../../../src/utils/formatKeyUtils.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,IAAwB,EAAE,KAAyB;IAC3E,OAAO,GAAG,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAA0C;IACnE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAwB;IACtD,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAC9C,kBAAgD;IAChD,IAAI,CAAC,kBAAkB,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,SAAS,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAwB,EACxB,MAAmB;IAEnB,IAAI,WAAW,CAAC,SAAS,IAAI,MAAM,EAAE,CAAC;QACpC,OAAO,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;IACjH,CAAC;IACD,OAAO,GAAG,WAAW,CAAC,UAAU,IAAI,GAAG,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,eAAoC;IAEpC,IAAI,CAAC,eAAe,CAAC,SAAS,IAAI,CAAC,eAAe,CAAC,MAAM;QACvD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAEtE,MAAM,iBAAiB,GAAG;QACxB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,IAAI;QACjC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACzC,UAAU,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK;QAC3C,SAAS,EAAE,eAAe,CAAC,MAAM;KAClC,CAAC;IAEF,OAAO,qBAAqB,CAC1B,iBAAiB,EACjB,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAC5D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,IAAI,MAAM,CAAC,KAAK;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAEhC,MAAM,QAAQ,GAAG,CAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAE,CAAC;IAE5C,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './Logger.js';
|
|
2
|
+
export * from './shared.js';
|
|
3
|
+
export * from './CacheManager.js';
|
|
2
4
|
export * from './EventEmitterLike.js';
|
|
3
|
-
export *
|
|
4
|
-
export
|
|
5
|
+
export * from './RequestMetadataManager.js';
|
|
6
|
+
export * as FormatKeyUtils from './formatKeyUtils.js';
|
package/dist/src/utils/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './Logger.js';
|
|
2
|
+
export * from './shared.js';
|
|
3
|
+
export * from './CacheManager.js';
|
|
2
4
|
export * from './EventEmitterLike.js';
|
|
3
|
-
export *
|
|
5
|
+
export * from './RequestMetadataManager.js';
|
|
6
|
+
export * as FormatKeyUtils from './formatKeyUtils.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { InitializedFormat } from '../core/SabrStream.js';
|
|
2
|
+
import type { SabrFormat } from '../types/shared.js';
|
|
3
|
+
/**
|
|
4
|
+
* Determines the media type (video or audio) based on the format initialization metadata.
|
|
5
|
+
* @param initializedFormat
|
|
6
|
+
*/
|
|
7
|
+
export declare function getMediaType(initializedFormat: InitializedFormat): 'video' | 'audio';
|
|
8
|
+
/**
|
|
9
|
+
* Calculates the total duration of downloaded segments in milliseconds.
|
|
10
|
+
* @param initializedFormat
|
|
11
|
+
*/
|
|
12
|
+
export declare function getTotalDownloadedDuration(initializedFormat: InitializedFormat): number;
|
|
13
|
+
/**
|
|
14
|
+
* Filters formats by media type (audio or video)
|
|
15
|
+
*/
|
|
16
|
+
export declare function filterFormatsByType(formats: SabrFormat[], isAudio: boolean): SabrFormat[];
|
|
17
|
+
/**
|
|
18
|
+
* Choose the best format based on options
|
|
19
|
+
*/
|
|
20
|
+
export declare function chooseFormat(formats: SabrFormat[], formatOption: number | SabrFormat | ((formats: SabrFormat[]) => SabrFormat | undefined) | undefined, preferences: {
|
|
21
|
+
quality?: string;
|
|
22
|
+
language?: string;
|
|
23
|
+
preferWebM?: boolean;
|
|
24
|
+
preferMP4?: boolean;
|
|
25
|
+
preferH264?: boolean;
|
|
26
|
+
preferOpus?: boolean;
|
|
27
|
+
isAudio: boolean;
|
|
28
|
+
}): SabrFormat | undefined;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Determines the media type (video or audio) based on the format initialization metadata.
|
|
3
|
+
* @param initializedFormat
|
|
4
|
+
*/
|
|
5
|
+
export function getMediaType(initializedFormat) {
|
|
6
|
+
return initializedFormat.formatInitializationMetadata?.mimeType?.includes('video') ? 'video' : 'audio';
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Calculates the total duration of downloaded segments in milliseconds.
|
|
10
|
+
* @param initializedFormat
|
|
11
|
+
*/
|
|
12
|
+
export function getTotalDownloadedDuration(initializedFormat) {
|
|
13
|
+
return Array.from(initializedFormat.downloadedSegments.values())
|
|
14
|
+
.reduce((sum, segment) => sum + (segment.durationMs || 0), 0);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Filters formats by media type (audio or video)
|
|
18
|
+
*/
|
|
19
|
+
export function filterFormatsByType(formats, isAudio) {
|
|
20
|
+
return formats.filter((format) => {
|
|
21
|
+
if (!format.mimeType)
|
|
22
|
+
return false;
|
|
23
|
+
return isAudio
|
|
24
|
+
? format.mimeType.includes('audio')
|
|
25
|
+
: format.mimeType.includes('video');
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Choose the best format based on options
|
|
30
|
+
*/
|
|
31
|
+
export function chooseFormat(formats, formatOption, preferences) {
|
|
32
|
+
if (!formats.length)
|
|
33
|
+
return undefined;
|
|
34
|
+
const typeFormats = filterFormatsByType(formats, preferences.isAudio);
|
|
35
|
+
if (!typeFormats.length)
|
|
36
|
+
return undefined;
|
|
37
|
+
if (typeof formatOption === 'number') {
|
|
38
|
+
return typeFormats.find((format) => format.itag === formatOption);
|
|
39
|
+
}
|
|
40
|
+
if (formatOption && typeof formatOption !== 'function') {
|
|
41
|
+
return formatOption;
|
|
42
|
+
}
|
|
43
|
+
if (typeof formatOption === 'function') {
|
|
44
|
+
return formatOption(typeFormats);
|
|
45
|
+
}
|
|
46
|
+
let filteredFormats = typeFormats;
|
|
47
|
+
if (preferences.language) {
|
|
48
|
+
filteredFormats = filteredFormats.filter((format) => format.language === preferences.language);
|
|
49
|
+
}
|
|
50
|
+
if (preferences.quality) {
|
|
51
|
+
filteredFormats = filteredFormats.filter((format) => preferences.isAudio
|
|
52
|
+
? !!format.audioQuality?.toLowerCase().includes(preferences.quality?.toLowerCase() || '')
|
|
53
|
+
: !!format.qualityLabel?.toLowerCase().includes(preferences.quality?.toLowerCase() || ''));
|
|
54
|
+
}
|
|
55
|
+
if (preferences.isAudio) {
|
|
56
|
+
if (preferences.preferOpus) {
|
|
57
|
+
filteredFormats = applyMimeTypeFilter(filteredFormats, 'opus');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (preferences.preferH264) {
|
|
61
|
+
filteredFormats = filteredFormats.filter((format) => !!format.mimeType && format.mimeType.includes('mp4') && format.mimeType.includes('avc'));
|
|
62
|
+
}
|
|
63
|
+
if (preferences.preferWebM) {
|
|
64
|
+
filteredFormats = applyMimeTypeFilter(filteredFormats, 'webm');
|
|
65
|
+
}
|
|
66
|
+
else if (preferences.preferMP4) {
|
|
67
|
+
filteredFormats = applyMimeTypeFilter(filteredFormats, 'mp4');
|
|
68
|
+
}
|
|
69
|
+
return preferences.isAudio
|
|
70
|
+
? filteredFormats.sort((a, b) => (b.bitrate || 0) - (a.bitrate || 0))[0]
|
|
71
|
+
: filteredFormats.sort((a, b) => (b.height || 0) - (a.height || 0))[0];
|
|
72
|
+
}
|
|
73
|
+
function applyMimeTypeFilter(formats, mimeTypePart) {
|
|
74
|
+
return formats.filter((format) => format.mimeType?.includes(mimeTypePart));
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sabrStreamUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabrStreamUtils.js","sourceRoot":"","sources":["../../../src/utils/sabrStreamUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { FormatStream, SabrFormat } from '../types/shared.js';
|
|
2
|
+
export declare const MAX_INT32_VALUE = 2147483647;
|
|
3
|
+
export declare enum EnabledTrackTypes {
|
|
4
|
+
VIDEO_AND_AUDIO = 0,
|
|
5
|
+
AUDIO_ONLY = 1,
|
|
6
|
+
VIDEO_ONLY = 2
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Determines if a given URL is a Google video URL, specifically for YouTube or SABR-related content.
|
|
10
|
+
*
|
|
11
|
+
* @param url - The URL to check.
|
|
12
|
+
*
|
|
13
|
+
* The function checks the following conditions:
|
|
14
|
+
* 1. If the URL starts with the `sabr://` protocol, it is considered a Google video URL.
|
|
15
|
+
* 2. If the URL ends with `/videoplayback`, it parses the query parameters to check for specific keys
|
|
16
|
+
* (`source=youtube`, `sabr`, `lsig`, or `expire`) that indicate a Google video URL.
|
|
17
|
+
* 3. If the URL contains `/videoplayback/` (e.g., for live or post-live content), it checks the path
|
|
18
|
+
* segments for specific keywords (`videoplayback`, `sabr`, `lsig`, or `expire`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function isGoogleVideoURL(url: string): boolean;
|
|
21
|
+
interface Range {
|
|
22
|
+
start: number;
|
|
23
|
+
end: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parses the Range header value to extract the start and end byte positions.
|
|
27
|
+
* @param rangeHeaderValue
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseRangeHeader(rangeHeaderValue: string | undefined): Range | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Converts a Uint8Array to a Base64 string.
|
|
32
|
+
* @param u8
|
|
33
|
+
*/
|
|
34
|
+
export declare function u8ToBase64(u8: Uint8Array): string;
|
|
35
|
+
/**
|
|
36
|
+
* Converts a Base64 string to a Uint8Array.
|
|
37
|
+
* @param base64
|
|
38
|
+
*/
|
|
39
|
+
export declare function base64ToU8(base64: string): Uint8Array;
|
|
40
|
+
/**
|
|
41
|
+
* Concatenates multiple Uint8Array chunks into a single Uint8Array.
|
|
42
|
+
* @param chunks
|
|
43
|
+
*/
|
|
44
|
+
export declare function concatenateChunks(chunks: Uint8Array[]): Uint8Array;
|
|
45
|
+
/**
|
|
46
|
+
* Converts a FormatStream object to a SabrFormat object.
|
|
47
|
+
* @param formatStream
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildSabrFormat(formatStream: FormatStream): SabrFormat;
|
|
50
|
+
/**
|
|
51
|
+
* Returns a promise that resolves after a specified number of milliseconds.
|
|
52
|
+
* @param ms - The number of milliseconds to wait.
|
|
53
|
+
*/
|
|
54
|
+
export declare function wait(ms: number): Promise<void>;
|
|
55
|
+
export {};
|