googlevideo 3.0.0 → 4.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 +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} +8 -8
- package/dist/src/core/{ChunkedDataBuffer.js → CompositeBuffer.js} +32 -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} +6 -10
- package/dist/src/core/{UMP.js → UmpReader.js} +33 -36
- package/dist/src/core/UmpReader.js.map +1 -0
- package/dist/src/core/UmpWriter.d.ts +16 -0
- package/dist/src/core/UmpWriter.js +56 -0
- package/dist/src/core/UmpWriter.js.map +1 -0
- package/dist/src/exports/protos.d.ts +1 -0
- package/dist/src/exports/protos.js +2 -0
- package/dist/src/exports/protos.js.map +1 -0
- package/dist/src/exports/sabr-stream.d.ts +2 -0
- package/dist/src/exports/sabr-stream.js +2 -0
- package/dist/src/exports/sabr-stream.js.map +1 -0
- package/dist/src/exports/sabr-streaming-adapter.d.ts +3 -0
- package/dist/src/exports/sabr-streaming-adapter.js +3 -0
- package/dist/src/exports/sabr-streaming-adapter.js.map +1 -0
- package/dist/src/exports/ump.d.ts +3 -0
- package/dist/src/exports/ump.js +4 -0
- package/dist/src/exports/ump.js.map +1 -0
- package/dist/src/exports/utils.d.ts +1 -0
- package/dist/src/exports/utils.js +2 -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 +30 -0
- package/dist/src/utils/Logger.js +80 -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 +43 -0
- package/dist/src/utils/shared.js +108 -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,234 @@
|
|
|
1
|
+
import { concatenateChunks } from '../utils/index.js';
|
|
2
|
+
import { createSegmentCacheKey, fromFormat, fromMediaHeader } from '../utils/formatKeyUtils.js';
|
|
3
|
+
import { CompositeBuffer } from './CompositeBuffer.js';
|
|
4
|
+
import { UmpReader } from './UmpReader.js';
|
|
5
|
+
import { FormatInitializationMetadata, MediaHeader, NextRequestPolicy, ReloadPlaybackContext, SabrContextSendingPolicy, SabrContextUpdate, SabrError, SabrRedirect, SnackbarMessage, StreamProtectionStatus, UMPPartId } from '../utils/Protos.js';
|
|
6
|
+
/**
|
|
7
|
+
* This class is responsible for reading a UMP stream, handling different part types
|
|
8
|
+
* (like media headers, media data, and server directives), and populating a
|
|
9
|
+
* metadata object with the extracted information. It is supposed to be used
|
|
10
|
+
* in conjunction with a {@linkcode SabrPlayerAdapter} in video player
|
|
11
|
+
* implementations.
|
|
12
|
+
*/
|
|
13
|
+
export class SabrUmpProcessor {
|
|
14
|
+
constructor(requestMetadata, cacheManager) {
|
|
15
|
+
this.requestMetadata = requestMetadata;
|
|
16
|
+
this.cacheManager = cacheManager;
|
|
17
|
+
this.formatInitMetadata = [];
|
|
18
|
+
this.partialSegments = new Map();
|
|
19
|
+
this.umpPartHandlers = new Map([
|
|
20
|
+
[UMPPartId.FORMAT_INITIALIZATION_METADATA, this.handleFormatInitMetadata.bind(this)],
|
|
21
|
+
[UMPPartId.NEXT_REQUEST_POLICY, this.handleNextRequestPolicy.bind(this)],
|
|
22
|
+
[UMPPartId.SABR_ERROR, this.handleSabrError.bind(this)],
|
|
23
|
+
[UMPPartId.SABR_REDIRECT, this.handleSabrRedirect.bind(this)],
|
|
24
|
+
[UMPPartId.SABR_CONTEXT_UPDATE, this.handleSabrContextUpdate.bind(this)],
|
|
25
|
+
[UMPPartId.SABR_CONTEXT_SENDING_POLICY, this.handleSabrContextSendingPolicy.bind(this)],
|
|
26
|
+
[UMPPartId.SNACKBAR_MESSAGE, this.handleSnackbarMessage.bind(this)],
|
|
27
|
+
[UMPPartId.STREAM_PROTECTION_STATUS, this.handleStreamProtectionStatus.bind(this)],
|
|
28
|
+
[UMPPartId.RELOAD_PLAYER_RESPONSE, this.handleReloadPlayerResponse.bind(this)],
|
|
29
|
+
[UMPPartId.MEDIA_HEADER, this.handleMediaHeader.bind(this)],
|
|
30
|
+
[UMPPartId.MEDIA, this.handleMedia.bind(this)],
|
|
31
|
+
[UMPPartId.MEDIA_END, this.handleMediaEnd.bind(this)]
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Processes a chunk of data from a UMP stream and updates the request context.
|
|
36
|
+
* @returns A promise that resolves with a processing result if a terminal part is found (e.g., MediaEnd), or undefined otherwise.
|
|
37
|
+
* @param value
|
|
38
|
+
*/
|
|
39
|
+
processChunk(value) {
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
let chunk;
|
|
42
|
+
if (this.partialPart) {
|
|
43
|
+
chunk = this.partialPart.data;
|
|
44
|
+
chunk.append(value);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
chunk = new CompositeBuffer([value]);
|
|
48
|
+
}
|
|
49
|
+
const ump = new UmpReader(chunk);
|
|
50
|
+
this.partialPart = ump.read((part) => {
|
|
51
|
+
const handler = this.umpPartHandlers.get(part.type);
|
|
52
|
+
const result = handler?.(part);
|
|
53
|
+
if (result) {
|
|
54
|
+
this.partialPart = undefined;
|
|
55
|
+
this.desiredHeaderId = undefined;
|
|
56
|
+
this.partialSegments.clear();
|
|
57
|
+
resolve(result);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
resolve(undefined);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
getSegmentInfo() {
|
|
64
|
+
return this.partialSegments.get(this.desiredHeaderId || 0);
|
|
65
|
+
}
|
|
66
|
+
decodePart(part, decoder) {
|
|
67
|
+
if (!part.data.chunks.length)
|
|
68
|
+
return undefined;
|
|
69
|
+
try {
|
|
70
|
+
return decoder.decode(concatenateChunks(part.data.chunks));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
handleFormatInitMetadata(part) {
|
|
77
|
+
const formatInitMetadata = this.decodePart(part, FormatInitializationMetadata);
|
|
78
|
+
if (formatInitMetadata) {
|
|
79
|
+
this.formatInitMetadata.push(formatInitMetadata);
|
|
80
|
+
}
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
handleNextRequestPolicy(part) {
|
|
84
|
+
const nextRequestPolicy = this.decodePart(part, NextRequestPolicy);
|
|
85
|
+
if (nextRequestPolicy) {
|
|
86
|
+
this.requestMetadata.streamInfo = {
|
|
87
|
+
...this.requestMetadata.streamInfo,
|
|
88
|
+
nextRequestPolicy
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
handleMediaHeader(part) {
|
|
94
|
+
const mediaHeader = this.decodePart(part, MediaHeader);
|
|
95
|
+
if (!mediaHeader) {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const targetFormatKey = fromFormat(this.requestMetadata.format);
|
|
99
|
+
const segmentFormatKey = fromMediaHeader(mediaHeader);
|
|
100
|
+
if (!this.requestMetadata.isSABR || segmentFormatKey === targetFormatKey) {
|
|
101
|
+
const segmentObj = {
|
|
102
|
+
headerId: mediaHeader.headerId,
|
|
103
|
+
mediaHeader: mediaHeader,
|
|
104
|
+
bufferedChunks: [],
|
|
105
|
+
lastChunkSize: 0
|
|
106
|
+
};
|
|
107
|
+
if (this.desiredHeaderId === undefined) {
|
|
108
|
+
this.desiredHeaderId = mediaHeader.headerId;
|
|
109
|
+
}
|
|
110
|
+
this.partialSegments.set(mediaHeader.headerId, segmentObj);
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
handleMedia(part) {
|
|
115
|
+
const headerId = part.data.getUint8(0);
|
|
116
|
+
const buffer = part.data.split(1).remainingBuffer;
|
|
117
|
+
const segment = this.partialSegments.get(headerId);
|
|
118
|
+
if (segment) {
|
|
119
|
+
segment.lastChunkSize = buffer.getLength();
|
|
120
|
+
for (const chunk of buffer.chunks) {
|
|
121
|
+
segment.bufferedChunks.push(chunk);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return undefined;
|
|
125
|
+
}
|
|
126
|
+
handleMediaEnd(part) {
|
|
127
|
+
const headerId = part.data.getUint8(0);
|
|
128
|
+
const segment = this.partialSegments.get(headerId);
|
|
129
|
+
if (segment && segment.headerId === this.desiredHeaderId) {
|
|
130
|
+
const segmentData = concatenateChunks(segment.bufferedChunks);
|
|
131
|
+
this.requestMetadata.streamInfo = {
|
|
132
|
+
...this.requestMetadata.streamInfo,
|
|
133
|
+
formatInitMetadata: this.formatInitMetadata,
|
|
134
|
+
mediaHeader: segment.mediaHeader
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Cache initialization segments to optimize performance. SABR responses contain larger payloads,
|
|
138
|
+
* and caching the init segment reduces latency when switching between different quality levels
|
|
139
|
+
* or initializing new streams.
|
|
140
|
+
*/
|
|
141
|
+
if (this.cacheManager && this.requestMetadata.isInit && this.requestMetadata.byteRange && this.requestMetadata.format) {
|
|
142
|
+
this.cacheManager.setInitSegment(createSegmentCacheKey(segment.mediaHeader, this.requestMetadata.format), segmentData);
|
|
143
|
+
return {
|
|
144
|
+
data: segmentData.slice(this.requestMetadata.byteRange.start, this.requestMetadata.byteRange.end + 1),
|
|
145
|
+
done: true
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
data: segmentData,
|
|
150
|
+
done: true
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
handleSnackbarMessage(part) {
|
|
155
|
+
const snackbarMessage = this.decodePart(part, SnackbarMessage);
|
|
156
|
+
if (snackbarMessage) {
|
|
157
|
+
this.requestMetadata.streamInfo = {
|
|
158
|
+
...this.requestMetadata.streamInfo,
|
|
159
|
+
snackbarMessage
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return undefined;
|
|
163
|
+
}
|
|
164
|
+
handleSabrError(part) {
|
|
165
|
+
const sabrError = this.decodePart(part, SabrError);
|
|
166
|
+
this.requestMetadata.error = { sabrError };
|
|
167
|
+
return { done: true };
|
|
168
|
+
}
|
|
169
|
+
handleStreamProtectionStatus(part) {
|
|
170
|
+
const streamProtectionStatus = this.decodePart(part, StreamProtectionStatus);
|
|
171
|
+
if (!streamProtectionStatus) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
this.requestMetadata.streamInfo = {
|
|
175
|
+
...this.requestMetadata.streamInfo,
|
|
176
|
+
streamProtectionStatus
|
|
177
|
+
};
|
|
178
|
+
if (streamProtectionStatus.status === 3) {
|
|
179
|
+
return {
|
|
180
|
+
done: true
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
return undefined;
|
|
184
|
+
}
|
|
185
|
+
handleReloadPlayerResponse(part) {
|
|
186
|
+
const reloadPlaybackContext = this.decodePart(part, ReloadPlaybackContext);
|
|
187
|
+
if (!reloadPlaybackContext) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
this.requestMetadata.streamInfo = {
|
|
191
|
+
...this.requestMetadata.streamInfo,
|
|
192
|
+
reloadPlaybackContext
|
|
193
|
+
};
|
|
194
|
+
return {
|
|
195
|
+
done: true
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
handleSabrRedirect(part) {
|
|
199
|
+
const redirect = this.decodePart(part, SabrRedirect);
|
|
200
|
+
if (!redirect) {
|
|
201
|
+
return undefined;
|
|
202
|
+
}
|
|
203
|
+
this.requestMetadata.streamInfo = {
|
|
204
|
+
...this.requestMetadata.streamInfo,
|
|
205
|
+
redirect
|
|
206
|
+
};
|
|
207
|
+
// With just UMP, redirects should be followed immediately.
|
|
208
|
+
if (this.requestMetadata.isUMP && !this.requestMetadata.isSABR) {
|
|
209
|
+
return { done: true };
|
|
210
|
+
}
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
handleSabrContextUpdate(part) {
|
|
214
|
+
const sabrContextUpdate = this.decodePart(part, SabrContextUpdate);
|
|
215
|
+
if (sabrContextUpdate) {
|
|
216
|
+
this.requestMetadata.streamInfo = {
|
|
217
|
+
...this.requestMetadata.streamInfo,
|
|
218
|
+
sabrContextUpdate
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
handleSabrContextSendingPolicy(part) {
|
|
224
|
+
const sabrContextSendingPolicy = this.decodePart(part, SabrContextSendingPolicy);
|
|
225
|
+
if (sabrContextSendingPolicy) {
|
|
226
|
+
this.requestMetadata.streamInfo = {
|
|
227
|
+
...this.requestMetadata.streamInfo,
|
|
228
|
+
sabrContextSendingPolicy
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=SabrUmpProcessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SabrUmpProcessor.js","sourceRoot":"","sources":["../../../src/core/SabrUmpProcessor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
export declare class
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
* Creates a new UMP parser.
|
|
7
|
-
* @param chunkedDataBuffer - Buffer containing UMP format data.
|
|
8
|
-
*/
|
|
9
|
-
constructor(chunkedDataBuffer: ChunkedDataBuffer);
|
|
1
|
+
import type { CompositeBuffer } from './CompositeBuffer.js';
|
|
2
|
+
import type { Part } from '../types/shared.js';
|
|
3
|
+
export declare class UmpReader {
|
|
4
|
+
private compositeBuffer;
|
|
5
|
+
constructor(compositeBuffer: CompositeBuffer);
|
|
10
6
|
/**
|
|
11
7
|
* Parses parts from the buffer and calls the handler for each complete part.
|
|
12
8
|
* @param handlePart - Function called with each complete part.
|
|
13
9
|
* @returns Partial part if parsing is incomplete, undefined otherwise.
|
|
14
10
|
*/
|
|
15
|
-
|
|
11
|
+
read(handlePart: (part: Part) => void): Part | undefined;
|
|
16
12
|
/**
|
|
17
13
|
* Reads a variable-length integer from the buffer.
|
|
18
14
|
* @param offset - Position to start reading from.
|
|
@@ -1,17 +1,13 @@
|
|
|
1
|
-
export class
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @param chunkedDataBuffer - Buffer containing UMP format data.
|
|
5
|
-
*/
|
|
6
|
-
constructor(chunkedDataBuffer) {
|
|
7
|
-
this.chunkedDataBuffer = chunkedDataBuffer;
|
|
1
|
+
export class UmpReader {
|
|
2
|
+
constructor(compositeBuffer) {
|
|
3
|
+
this.compositeBuffer = compositeBuffer;
|
|
8
4
|
}
|
|
9
5
|
/**
|
|
10
6
|
* Parses parts from the buffer and calls the handler for each complete part.
|
|
11
7
|
* @param handlePart - Function called with each complete part.
|
|
12
8
|
* @returns Partial part if parsing is incomplete, undefined otherwise.
|
|
13
9
|
*/
|
|
14
|
-
|
|
10
|
+
read(handlePart) {
|
|
15
11
|
while (true) {
|
|
16
12
|
let offset = 0;
|
|
17
13
|
const [partType, newOffset] = this.readVarInt(offset);
|
|
@@ -20,23 +16,23 @@ export class UMP {
|
|
|
20
16
|
offset = finalOffset;
|
|
21
17
|
if (partType < 0 || partSize < 0)
|
|
22
18
|
break;
|
|
23
|
-
if (!this.
|
|
24
|
-
if (!this.
|
|
19
|
+
if (!this.compositeBuffer.canReadBytes(offset, partSize)) {
|
|
20
|
+
if (!this.compositeBuffer.canReadBytes(offset, 1))
|
|
25
21
|
break;
|
|
26
22
|
return {
|
|
27
23
|
type: partType,
|
|
28
24
|
size: partSize,
|
|
29
|
-
data: this.
|
|
25
|
+
data: this.compositeBuffer
|
|
30
26
|
};
|
|
31
27
|
}
|
|
32
|
-
const splitResult = this.
|
|
28
|
+
const splitResult = this.compositeBuffer.split(offset).remainingBuffer.split(partSize);
|
|
33
29
|
offset = 0;
|
|
34
30
|
handlePart({
|
|
35
31
|
type: partType,
|
|
36
32
|
size: partSize,
|
|
37
33
|
data: splitResult.extractedBuffer
|
|
38
34
|
});
|
|
39
|
-
this.
|
|
35
|
+
this.compositeBuffer = splitResult.remainingBuffer;
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
38
|
/**
|
|
@@ -47,54 +43,54 @@ export class UMP {
|
|
|
47
43
|
readVarInt(offset) {
|
|
48
44
|
let byteLength;
|
|
49
45
|
// Determine the length of the val
|
|
50
|
-
if (this.
|
|
51
|
-
const firstByte = this.
|
|
46
|
+
if (this.compositeBuffer.canReadBytes(offset, 1)) {
|
|
47
|
+
const firstByte = this.compositeBuffer.getUint8(offset);
|
|
52
48
|
byteLength = firstByte < 128 ? 1 : firstByte < 192 ? 2 : firstByte < 224 ? 3 : firstByte < 240 ? 4 : 5;
|
|
53
49
|
}
|
|
54
50
|
else {
|
|
55
51
|
byteLength = 0;
|
|
56
52
|
}
|
|
57
|
-
if (byteLength < 1 || !this.
|
|
53
|
+
if (byteLength < 1 || !this.compositeBuffer.canReadBytes(offset, byteLength)) {
|
|
58
54
|
return [-1, offset];
|
|
59
55
|
}
|
|
60
56
|
let value;
|
|
61
57
|
// Now read it based on the length
|
|
62
58
|
switch (byteLength) {
|
|
63
59
|
case 1:
|
|
64
|
-
value = this.
|
|
60
|
+
value = this.compositeBuffer.getUint8(offset++);
|
|
65
61
|
break;
|
|
66
62
|
case 2: {
|
|
67
|
-
const byte1 = this.
|
|
68
|
-
const byte2 = this.
|
|
63
|
+
const byte1 = this.compositeBuffer.getUint8(offset++);
|
|
64
|
+
const byte2 = this.compositeBuffer.getUint8(offset++);
|
|
69
65
|
value = (byte1 & 0x3f) + 64 * byte2;
|
|
70
66
|
break;
|
|
71
67
|
}
|
|
72
68
|
case 3: {
|
|
73
|
-
const byte1 = this.
|
|
74
|
-
const byte2 = this.
|
|
75
|
-
const byte3 = this.
|
|
69
|
+
const byte1 = this.compositeBuffer.getUint8(offset++);
|
|
70
|
+
const byte2 = this.compositeBuffer.getUint8(offset++);
|
|
71
|
+
const byte3 = this.compositeBuffer.getUint8(offset++);
|
|
76
72
|
value = (byte1 & 0x1f) + 32 * (byte2 + 256 * byte3);
|
|
77
73
|
break;
|
|
78
74
|
}
|
|
79
75
|
case 4: {
|
|
80
|
-
const byte1 = this.
|
|
81
|
-
const byte2 = this.
|
|
82
|
-
const byte3 = this.
|
|
83
|
-
const byte4 = this.
|
|
76
|
+
const byte1 = this.compositeBuffer.getUint8(offset++);
|
|
77
|
+
const byte2 = this.compositeBuffer.getUint8(offset++);
|
|
78
|
+
const byte3 = this.compositeBuffer.getUint8(offset++);
|
|
79
|
+
const byte4 = this.compositeBuffer.getUint8(offset++);
|
|
84
80
|
value = (byte1 & 0x0f) + 16 * (byte2 + 256 * (byte3 + 256 * byte4));
|
|
85
81
|
break;
|
|
86
82
|
}
|
|
87
83
|
default: {
|
|
88
84
|
const tempOffset = offset + 1;
|
|
89
|
-
this.
|
|
85
|
+
this.compositeBuffer.focus(tempOffset);
|
|
90
86
|
if (this.canReadFromCurrentChunk(tempOffset, 4)) {
|
|
91
|
-
value = this.getCurrentDataView().getUint32(tempOffset - this.
|
|
87
|
+
value = this.getCurrentDataView().getUint32(tempOffset - this.compositeBuffer.currentChunkOffset, true);
|
|
92
88
|
}
|
|
93
89
|
else {
|
|
94
|
-
const byte3 = this.
|
|
90
|
+
const byte3 = this.compositeBuffer.getUint8(tempOffset + 2) + 256 * this.compositeBuffer.getUint8(tempOffset + 3);
|
|
95
91
|
value =
|
|
96
|
-
this.
|
|
97
|
-
256 * (this.
|
|
92
|
+
this.compositeBuffer.getUint8(tempOffset) +
|
|
93
|
+
256 * (this.compositeBuffer.getUint8(tempOffset + 1) + 256 * byte3);
|
|
98
94
|
}
|
|
99
95
|
offset += 5;
|
|
100
96
|
break;
|
|
@@ -109,17 +105,18 @@ export class UMP {
|
|
|
109
105
|
* @returns True if bytes can be read from current chunk, false otherwise.
|
|
110
106
|
*/
|
|
111
107
|
canReadFromCurrentChunk(offset, length) {
|
|
112
|
-
return offset - this.
|
|
108
|
+
return offset - this.compositeBuffer.currentChunkOffset + length <= this.compositeBuffer.chunks[this.compositeBuffer.currentChunkIndex].length;
|
|
113
109
|
}
|
|
114
110
|
/**
|
|
115
111
|
* Gets a DataView of the current chunk, creating it if necessary.
|
|
116
112
|
* @returns DataView for the current chunk.
|
|
117
113
|
*/
|
|
118
114
|
getCurrentDataView() {
|
|
119
|
-
if (!this.
|
|
120
|
-
const currentChunk = this.
|
|
121
|
-
this.
|
|
115
|
+
if (!this.compositeBuffer.currentDataView) {
|
|
116
|
+
const currentChunk = this.compositeBuffer.chunks[this.compositeBuffer.currentChunkIndex];
|
|
117
|
+
this.compositeBuffer.currentDataView = new DataView(currentChunk.buffer, currentChunk.byteOffset, currentChunk.length);
|
|
122
118
|
}
|
|
123
|
-
return this.
|
|
119
|
+
return this.compositeBuffer.currentDataView;
|
|
124
120
|
}
|
|
125
121
|
}
|
|
122
|
+
//# sourceMappingURL=UmpReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UmpReader.js","sourceRoot":"","sources":["../../../src/core/UmpReader.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACpB,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAI,CAAC;IAEzD;;;;OAIG;IACI,IAAI,CAAC,UAAgC;QAC1C,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,GAAG,CAAC,CAAC;YAEf,MAAM,CAAE,QAAQ,EAAE,SAAS,CAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,GAAG,SAAS,CAAC;YAEnB,MAAM,CAAE,QAAQ,EAAE,WAAW,CAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,GAAG,WAAW,CAAC;YAErB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;gBAC9B,MAAM;YAER,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC/C,MAAM;gBAER,OAAO;oBACL,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,CAAC,eAAe;iBAC3B,CAAC;YACJ,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvF,MAAM,GAAG,CAAC,CAAC;YAEX,UAAU,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,WAAW,CAAC,eAAe;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,UAAU,CAAC,MAAc;QAC9B,IAAI,UAAkB,CAAC;QAEvB,kCAAkC;QAClC,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxD,UAAU,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;YAC7E,OAAO,CAAE,CAAC,CAAC,EAAE,MAAM,CAAE,CAAC;QACxB,CAAC;QAED,IAAI,KAAa,CAAC;QAElB,kCAAkC;QAClC,QAAQ,UAAU,EAAE,CAAC;YACnB,KAAK,CAAC;gBACJ,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;gBACpC,MAAM;YACR,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;gBACpD,MAAM;YACR,CAAC;YACD,KAAK,CAAC,CAAC,CAAC,CAAC;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;gBACtD,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;gBACpE,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAEvC,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC;oBAChD,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAC1G,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;oBAClH,KAAK;wBACH,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC;4BACzC,GAAG,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC;gBACxE,CAAC;gBACD,MAAM,IAAI,CAAC,CAAC;gBACZ,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,CAAE,KAAK,EAAE,MAAM,CAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACI,uBAAuB,CAAC,MAAc,EAAE,MAAc;QAC3D,OAAO,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,kBAAkB,GAAG,MAAM,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC;IACjJ,CAAC;IAED;;;OAGG;IACI,kBAAkB;QACvB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACzF,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QACzH,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { CompositeBuffer } from './CompositeBuffer.js';
|
|
2
|
+
export declare class UmpWriter {
|
|
3
|
+
private compositeBuffer;
|
|
4
|
+
constructor(compositeBuffer: CompositeBuffer);
|
|
5
|
+
/**
|
|
6
|
+
* Writes a part to the buffer.
|
|
7
|
+
* @param partType - The type of the part.
|
|
8
|
+
* @param partData - The data of the part.
|
|
9
|
+
*/
|
|
10
|
+
write(partType: number, partData: Uint8Array): void;
|
|
11
|
+
/**
|
|
12
|
+
* Writes a variable-length integer to the buffer.
|
|
13
|
+
* @param value - The integer to write.
|
|
14
|
+
*/
|
|
15
|
+
private writeVarInt;
|
|
16
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export class UmpWriter {
|
|
2
|
+
constructor(compositeBuffer) {
|
|
3
|
+
this.compositeBuffer = compositeBuffer;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Writes a part to the buffer.
|
|
7
|
+
* @param partType - The type of the part.
|
|
8
|
+
* @param partData - The data of the part.
|
|
9
|
+
*/
|
|
10
|
+
write(partType, partData) {
|
|
11
|
+
const partSize = partData.length;
|
|
12
|
+
this.writeVarInt(partType);
|
|
13
|
+
this.writeVarInt(partSize);
|
|
14
|
+
this.compositeBuffer.append(partData);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Writes a variable-length integer to the buffer.
|
|
18
|
+
* @param value - The integer to write.
|
|
19
|
+
*/
|
|
20
|
+
writeVarInt(value) {
|
|
21
|
+
if (value < 0)
|
|
22
|
+
throw new Error('VarInt value cannot be negative.');
|
|
23
|
+
if (value < 128) {
|
|
24
|
+
this.compositeBuffer.append(new Uint8Array([value]));
|
|
25
|
+
}
|
|
26
|
+
else if (value < 16384) {
|
|
27
|
+
this.compositeBuffer.append(new Uint8Array([
|
|
28
|
+
(value & 0x3F) | 0x80,
|
|
29
|
+
value >> 6
|
|
30
|
+
]));
|
|
31
|
+
}
|
|
32
|
+
else if (value < 2097152) {
|
|
33
|
+
this.compositeBuffer.append(new Uint8Array([
|
|
34
|
+
(value & 0x1F) | 0xC0,
|
|
35
|
+
(value >> 5) & 0xFF,
|
|
36
|
+
value >> 13
|
|
37
|
+
]));
|
|
38
|
+
}
|
|
39
|
+
else if (value < 268435456) {
|
|
40
|
+
this.compositeBuffer.append(new Uint8Array([
|
|
41
|
+
(value & 0x0F) | 0xE0,
|
|
42
|
+
(value >> 4) & 0xFF,
|
|
43
|
+
(value >> 12) & 0xFF,
|
|
44
|
+
value >> 20
|
|
45
|
+
]));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const data = new Uint8Array(5);
|
|
49
|
+
const view = new DataView(data.buffer);
|
|
50
|
+
data[0] = 0xF0;
|
|
51
|
+
view.setUint32(1, value, true);
|
|
52
|
+
this.compositeBuffer.append(data);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=UmpWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UmpWriter.js","sourceRoot":"","sources":["../../../src/core/UmpWriter.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;IACpB,YACU,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IACtC,CAAC;IAEL;;;;OAIG;IACI,KAAK,CAAC,QAAgB,EAAE,QAAoB;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,KAAa;QAC/B,IAAI,KAAK,GAAG,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAEtD,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAE,KAAK,CAAE,CAAC,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,KAAK,IAAI,CAAC;aACX,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,GAAG,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;gBACnB,KAAK,IAAI,EAAE;aACZ,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;gBACzC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI;gBACrB,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI;gBACnB,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI;gBACpB,KAAK,IAAI,EAAE;aACZ,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../utils/Protos.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protos.js","sourceRoot":"","sources":["../../../src/exports/protos.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabr-stream.js","sourceRoot":"","sources":["../../../src/exports/sabr-stream.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sabr-streaming-adapter.js","sourceRoot":"","sources":["../../../src/exports/sabr-streaming-adapter.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ump.js","sourceRoot":"","sources":["../../../src/exports/ump.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../utils/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/exports/utils.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|