mirror of
https://github.com/LuanRT/googlevideo.git
synced 2026-06-02 12:13:19 +00:00
fix(generate-proto): Use forceLong=string option
Noticed YouTube returning very large int64 values, causing the protobuf library to throw.
This commit is contained in:
@@ -45,7 +45,7 @@ if (!protoFiles.length) {
|
||||
}
|
||||
|
||||
protoFiles.forEach((file) => {
|
||||
const command = `protoc --proto_path=${protoDir} --plugin=protoc-gen-ts=${protocGenTs} --ts_opt=env=browser --ts_opt=importSuffix=.js --ts_out=${outDir} --ts_opt=outputJsonMethods=false --ts_opt=outputPartialMethods=false --ts_opt=removeEnumPrefix=true ${file}`;
|
||||
const command = `protoc --proto_path=${protoDir} --plugin=protoc-gen-ts=${protocGenTs} --ts_opt=env=browser --ts_opt=forceLong=string --ts_opt=importSuffix=.js --ts_out=${outDir} --ts_opt=outputJsonMethods=false --ts_opt=outputPartialMethods=false --ts_opt=removeEnumPrefix=true ${file}`;
|
||||
exec(command, (error, _stdout, stderr) => {
|
||||
if (error) {
|
||||
console.error(`Error compiling ${file}:`, stderr);
|
||||
|
||||
@@ -185,7 +185,7 @@ export interface HttpHeader {
|
||||
|
||||
export interface FormatId {
|
||||
itag?: number | undefined;
|
||||
lastModified?: number | undefined;
|
||||
lastModified?: string | undefined;
|
||||
xtags?: string | undefined;
|
||||
}
|
||||
|
||||
@@ -265,7 +265,7 @@ export const HttpHeader: MessageFns<HttpHeader> = {
|
||||
};
|
||||
|
||||
function createBaseFormatId(): FormatId {
|
||||
return { itag: 0, lastModified: 0, xtags: "" };
|
||||
return { itag: 0, lastModified: "0", xtags: "" };
|
||||
}
|
||||
|
||||
export const FormatId: MessageFns<FormatId> = {
|
||||
@@ -273,7 +273,7 @@ export const FormatId: MessageFns<FormatId> = {
|
||||
if (message.itag !== undefined && message.itag !== 0) {
|
||||
writer.uint32(8).int32(message.itag);
|
||||
}
|
||||
if (message.lastModified !== undefined && message.lastModified !== 0) {
|
||||
if (message.lastModified !== undefined && message.lastModified !== "0") {
|
||||
writer.uint32(16).uint64(message.lastModified);
|
||||
}
|
||||
if (message.xtags !== undefined && message.xtags !== "") {
|
||||
@@ -302,7 +302,7 @@ export const FormatId: MessageFns<FormatId> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.lastModified = longToNumber(reader.uint64());
|
||||
message.lastModified = reader.uint64().toString();
|
||||
continue;
|
||||
}
|
||||
case 3: {
|
||||
@@ -585,17 +585,6 @@ export const PlaybackAuthorization: MessageFns<PlaybackAuthorization> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -13,8 +13,8 @@ export const protobufPackage = "video_streaming";
|
||||
|
||||
export interface BufferedRange {
|
||||
formatId: FormatId | undefined;
|
||||
startTimeMs: number;
|
||||
durationMs: number;
|
||||
startTimeMs: string;
|
||||
durationMs: string;
|
||||
startSegmentIndex: number;
|
||||
endSegmentIndex: number;
|
||||
timeRange?: TimeRange | undefined;
|
||||
@@ -29,7 +29,7 @@ export interface BufferedRange_UnknownMessage1 {
|
||||
|
||||
export interface BufferedRange_UnknownMessage1_UnknownInnerMessage {
|
||||
videoId?: string | undefined;
|
||||
lmt?: number | undefined;
|
||||
lmt?: string | undefined;
|
||||
}
|
||||
|
||||
export interface BufferedRange_UnknownMessage2 {
|
||||
@@ -41,8 +41,8 @@ export interface BufferedRange_UnknownMessage2 {
|
||||
function createBaseBufferedRange(): BufferedRange {
|
||||
return {
|
||||
formatId: undefined,
|
||||
startTimeMs: 0,
|
||||
durationMs: 0,
|
||||
startTimeMs: "0",
|
||||
durationMs: "0",
|
||||
startSegmentIndex: 0,
|
||||
endSegmentIndex: 0,
|
||||
timeRange: undefined,
|
||||
@@ -57,10 +57,10 @@ export const BufferedRange: MessageFns<BufferedRange> = {
|
||||
if (message.formatId !== undefined) {
|
||||
FormatId.encode(message.formatId, writer.uint32(10).fork()).join();
|
||||
}
|
||||
if (message.startTimeMs !== 0) {
|
||||
if (message.startTimeMs !== "0") {
|
||||
writer.uint32(16).int64(message.startTimeMs);
|
||||
}
|
||||
if (message.durationMs !== 0) {
|
||||
if (message.durationMs !== "0") {
|
||||
writer.uint32(24).int64(message.durationMs);
|
||||
}
|
||||
if (message.startSegmentIndex !== 0) {
|
||||
@@ -104,7 +104,7 @@ export const BufferedRange: MessageFns<BufferedRange> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.startTimeMs = longToNumber(reader.int64());
|
||||
message.startTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 3: {
|
||||
@@ -112,7 +112,7 @@ export const BufferedRange: MessageFns<BufferedRange> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.durationMs = longToNumber(reader.int64());
|
||||
message.durationMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 4: {
|
||||
@@ -211,7 +211,7 @@ export const BufferedRange_UnknownMessage1: MessageFns<BufferedRange_UnknownMess
|
||||
};
|
||||
|
||||
function createBaseBufferedRange_UnknownMessage1_UnknownInnerMessage(): BufferedRange_UnknownMessage1_UnknownInnerMessage {
|
||||
return { videoId: "", lmt: 0 };
|
||||
return { videoId: "", lmt: "0" };
|
||||
}
|
||||
|
||||
export const BufferedRange_UnknownMessage1_UnknownInnerMessage: MessageFns<
|
||||
@@ -224,7 +224,7 @@ export const BufferedRange_UnknownMessage1_UnknownInnerMessage: MessageFns<
|
||||
if (message.videoId !== undefined && message.videoId !== "") {
|
||||
writer.uint32(10).string(message.videoId);
|
||||
}
|
||||
if (message.lmt !== undefined && message.lmt !== 0) {
|
||||
if (message.lmt !== undefined && message.lmt !== "0") {
|
||||
writer.uint32(16).uint64(message.lmt);
|
||||
}
|
||||
return writer;
|
||||
@@ -250,7 +250,7 @@ export const BufferedRange_UnknownMessage1_UnknownInnerMessage: MessageFns<
|
||||
break;
|
||||
}
|
||||
|
||||
message.lmt = longToNumber(reader.uint64());
|
||||
message.lmt = reader.uint64().toString();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -322,17 +322,6 @@ export const BufferedRange_UnknownMessage2: MessageFns<BufferedRange_UnknownMess
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -18,39 +18,39 @@ import { MediaCapabilities } from "./media_capabilities.js";
|
||||
export const protobufPackage = "video_streaming";
|
||||
|
||||
export interface ClientAbrState {
|
||||
timeSinceLastManualFormatSelectionMs?: number | undefined;
|
||||
timeSinceLastManualFormatSelectionMs?: string | undefined;
|
||||
lastManualDirection?: number | undefined;
|
||||
lastManualSelectedResolution?: number | undefined;
|
||||
detailedNetworkType?: number | undefined;
|
||||
clientViewportWidth?: number | undefined;
|
||||
clientViewportHeight?: number | undefined;
|
||||
clientBitrateCapBytesPerSec?: number | undefined;
|
||||
clientBitrateCapBytesPerSec?: string | undefined;
|
||||
stickyResolution?: number | undefined;
|
||||
clientViewportIsFlexible?: boolean | undefined;
|
||||
bandwidthEstimate?: number | undefined;
|
||||
bandwidthEstimate?: string | undefined;
|
||||
minAudioQuality?: AudioQuality | undefined;
|
||||
maxAudioQuality?: AudioQuality | undefined;
|
||||
videoQualitySetting?: VideoQualitySetting | undefined;
|
||||
audioRoute?: PlaybackAudioRouteOutputType | undefined;
|
||||
playerTimeMs?: number | undefined;
|
||||
timeSinceLastSeek?: number | undefined;
|
||||
playerTimeMs?: string | undefined;
|
||||
timeSinceLastSeek?: string | undefined;
|
||||
dataSaverMode?: boolean | undefined;
|
||||
networkMeteredState?: NetworkMeteredState | undefined;
|
||||
visibility?: number | undefined;
|
||||
playbackRate?: number | undefined;
|
||||
elapsedWallTimeMs?: number | undefined;
|
||||
elapsedWallTimeMs?: string | undefined;
|
||||
mediaCapabilities?: MediaCapabilities | undefined;
|
||||
timeSinceLastActionMs?: number | undefined;
|
||||
timeSinceLastActionMs?: string | undefined;
|
||||
enabledTrackTypesBitfield?: number | undefined;
|
||||
maxPacingRate?: number | undefined;
|
||||
playerState?: number | undefined;
|
||||
playerState?: string | undefined;
|
||||
drcEnabled?: boolean | undefined;
|
||||
field48?: number | undefined;
|
||||
field50?: number | undefined;
|
||||
field51?: number | undefined;
|
||||
sabrReportRequestCancellationInfo?: number | undefined;
|
||||
disableStreamingXhr?: boolean | undefined;
|
||||
field57?: number | undefined;
|
||||
field57?: string | undefined;
|
||||
preferVp9?:
|
||||
| boolean
|
||||
| undefined;
|
||||
@@ -63,7 +63,7 @@ export interface ClientAbrState {
|
||||
allowProximaLiveLatency?: number | undefined;
|
||||
sabrForceProxima?: number | undefined;
|
||||
field67?: number | undefined;
|
||||
sabrForceMaxNetworkInterruptionDurationMs?: number | undefined;
|
||||
sabrForceMaxNetworkInterruptionDurationMs?: string | undefined;
|
||||
audioTrackId?: string | undefined;
|
||||
enableVoiceBoost?: boolean | undefined;
|
||||
playbackAuthorization?: PlaybackAuthorization | undefined;
|
||||
@@ -71,39 +71,39 @@ export interface ClientAbrState {
|
||||
|
||||
function createBaseClientAbrState(): ClientAbrState {
|
||||
return {
|
||||
timeSinceLastManualFormatSelectionMs: 0,
|
||||
timeSinceLastManualFormatSelectionMs: "0",
|
||||
lastManualDirection: 0,
|
||||
lastManualSelectedResolution: 0,
|
||||
detailedNetworkType: 0,
|
||||
clientViewportWidth: 0,
|
||||
clientViewportHeight: 0,
|
||||
clientBitrateCapBytesPerSec: 0,
|
||||
clientBitrateCapBytesPerSec: "0",
|
||||
stickyResolution: 0,
|
||||
clientViewportIsFlexible: false,
|
||||
bandwidthEstimate: 0,
|
||||
bandwidthEstimate: "0",
|
||||
minAudioQuality: 0,
|
||||
maxAudioQuality: 0,
|
||||
videoQualitySetting: 0,
|
||||
audioRoute: 0,
|
||||
playerTimeMs: 0,
|
||||
timeSinceLastSeek: 0,
|
||||
playerTimeMs: "0",
|
||||
timeSinceLastSeek: "0",
|
||||
dataSaverMode: false,
|
||||
networkMeteredState: 0,
|
||||
visibility: 0,
|
||||
playbackRate: 0,
|
||||
elapsedWallTimeMs: 0,
|
||||
elapsedWallTimeMs: "0",
|
||||
mediaCapabilities: undefined,
|
||||
timeSinceLastActionMs: 0,
|
||||
timeSinceLastActionMs: "0",
|
||||
enabledTrackTypesBitfield: 0,
|
||||
maxPacingRate: 0,
|
||||
playerState: 0,
|
||||
playerState: "0",
|
||||
drcEnabled: false,
|
||||
field48: 0,
|
||||
field50: 0,
|
||||
field51: 0,
|
||||
sabrReportRequestCancellationInfo: 0,
|
||||
disableStreamingXhr: false,
|
||||
field57: 0,
|
||||
field57: "0",
|
||||
preferVp9: false,
|
||||
av1QualityThreshold: 0,
|
||||
field60: 0,
|
||||
@@ -113,7 +113,7 @@ function createBaseClientAbrState(): ClientAbrState {
|
||||
allowProximaLiveLatency: 0,
|
||||
sabrForceProxima: 0,
|
||||
field67: 0,
|
||||
sabrForceMaxNetworkInterruptionDurationMs: 0,
|
||||
sabrForceMaxNetworkInterruptionDurationMs: "0",
|
||||
audioTrackId: "",
|
||||
enableVoiceBoost: false,
|
||||
playbackAuthorization: undefined,
|
||||
@@ -123,7 +123,7 @@ function createBaseClientAbrState(): ClientAbrState {
|
||||
export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
encode(message: ClientAbrState, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||
if (
|
||||
message.timeSinceLastManualFormatSelectionMs !== undefined && message.timeSinceLastManualFormatSelectionMs !== 0
|
||||
message.timeSinceLastManualFormatSelectionMs !== undefined && message.timeSinceLastManualFormatSelectionMs !== "0"
|
||||
) {
|
||||
writer.uint32(104).int64(message.timeSinceLastManualFormatSelectionMs);
|
||||
}
|
||||
@@ -142,7 +142,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.clientViewportHeight !== undefined && message.clientViewportHeight !== 0) {
|
||||
writer.uint32(152).int32(message.clientViewportHeight);
|
||||
}
|
||||
if (message.clientBitrateCapBytesPerSec !== undefined && message.clientBitrateCapBytesPerSec !== 0) {
|
||||
if (message.clientBitrateCapBytesPerSec !== undefined && message.clientBitrateCapBytesPerSec !== "0") {
|
||||
writer.uint32(160).int64(message.clientBitrateCapBytesPerSec);
|
||||
}
|
||||
if (message.stickyResolution !== undefined && message.stickyResolution !== 0) {
|
||||
@@ -151,7 +151,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.clientViewportIsFlexible !== undefined && message.clientViewportIsFlexible !== false) {
|
||||
writer.uint32(176).bool(message.clientViewportIsFlexible);
|
||||
}
|
||||
if (message.bandwidthEstimate !== undefined && message.bandwidthEstimate !== 0) {
|
||||
if (message.bandwidthEstimate !== undefined && message.bandwidthEstimate !== "0") {
|
||||
writer.uint32(184).int64(message.bandwidthEstimate);
|
||||
}
|
||||
if (message.minAudioQuality !== undefined && message.minAudioQuality !== 0) {
|
||||
@@ -166,10 +166,10 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.audioRoute !== undefined && message.audioRoute !== 0) {
|
||||
writer.uint32(216).int32(message.audioRoute);
|
||||
}
|
||||
if (message.playerTimeMs !== undefined && message.playerTimeMs !== 0) {
|
||||
if (message.playerTimeMs !== undefined && message.playerTimeMs !== "0") {
|
||||
writer.uint32(224).int64(message.playerTimeMs);
|
||||
}
|
||||
if (message.timeSinceLastSeek !== undefined && message.timeSinceLastSeek !== 0) {
|
||||
if (message.timeSinceLastSeek !== undefined && message.timeSinceLastSeek !== "0") {
|
||||
writer.uint32(232).int64(message.timeSinceLastSeek);
|
||||
}
|
||||
if (message.dataSaverMode !== undefined && message.dataSaverMode !== false) {
|
||||
@@ -184,13 +184,13 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.playbackRate !== undefined && message.playbackRate !== 0) {
|
||||
writer.uint32(285).float(message.playbackRate);
|
||||
}
|
||||
if (message.elapsedWallTimeMs !== undefined && message.elapsedWallTimeMs !== 0) {
|
||||
if (message.elapsedWallTimeMs !== undefined && message.elapsedWallTimeMs !== "0") {
|
||||
writer.uint32(288).int64(message.elapsedWallTimeMs);
|
||||
}
|
||||
if (message.mediaCapabilities !== undefined) {
|
||||
MediaCapabilities.encode(message.mediaCapabilities, writer.uint32(306).fork()).join();
|
||||
}
|
||||
if (message.timeSinceLastActionMs !== undefined && message.timeSinceLastActionMs !== 0) {
|
||||
if (message.timeSinceLastActionMs !== undefined && message.timeSinceLastActionMs !== "0") {
|
||||
writer.uint32(312).int64(message.timeSinceLastActionMs);
|
||||
}
|
||||
if (message.enabledTrackTypesBitfield !== undefined && message.enabledTrackTypesBitfield !== 0) {
|
||||
@@ -199,7 +199,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.maxPacingRate !== undefined && message.maxPacingRate !== 0) {
|
||||
writer.uint32(344).int32(message.maxPacingRate);
|
||||
}
|
||||
if (message.playerState !== undefined && message.playerState !== 0) {
|
||||
if (message.playerState !== undefined && message.playerState !== "0") {
|
||||
writer.uint32(352).int64(message.playerState);
|
||||
}
|
||||
if (message.drcEnabled !== undefined && message.drcEnabled !== false) {
|
||||
@@ -220,7 +220,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
if (message.disableStreamingXhr !== undefined && message.disableStreamingXhr !== false) {
|
||||
writer.uint32(448).bool(message.disableStreamingXhr);
|
||||
}
|
||||
if (message.field57 !== undefined && message.field57 !== 0) {
|
||||
if (message.field57 !== undefined && message.field57 !== "0") {
|
||||
writer.uint32(456).int64(message.field57);
|
||||
}
|
||||
if (message.preferVp9 !== undefined && message.preferVp9 !== false) {
|
||||
@@ -252,7 +252,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
}
|
||||
if (
|
||||
message.sabrForceMaxNetworkInterruptionDurationMs !== undefined &&
|
||||
message.sabrForceMaxNetworkInterruptionDurationMs !== 0
|
||||
message.sabrForceMaxNetworkInterruptionDurationMs !== "0"
|
||||
) {
|
||||
writer.uint32(544).int64(message.sabrForceMaxNetworkInterruptionDurationMs);
|
||||
}
|
||||
@@ -280,7 +280,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.timeSinceLastManualFormatSelectionMs = longToNumber(reader.int64());
|
||||
message.timeSinceLastManualFormatSelectionMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 14: {
|
||||
@@ -328,7 +328,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.clientBitrateCapBytesPerSec = longToNumber(reader.int64());
|
||||
message.clientBitrateCapBytesPerSec = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 21: {
|
||||
@@ -352,7 +352,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.bandwidthEstimate = longToNumber(reader.int64());
|
||||
message.bandwidthEstimate = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 24: {
|
||||
@@ -392,7 +392,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.playerTimeMs = longToNumber(reader.int64());
|
||||
message.playerTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 29: {
|
||||
@@ -400,7 +400,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.timeSinceLastSeek = longToNumber(reader.int64());
|
||||
message.timeSinceLastSeek = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 30: {
|
||||
@@ -440,7 +440,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.elapsedWallTimeMs = longToNumber(reader.int64());
|
||||
message.elapsedWallTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 38: {
|
||||
@@ -456,7 +456,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.timeSinceLastActionMs = longToNumber(reader.int64());
|
||||
message.timeSinceLastActionMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 40: {
|
||||
@@ -480,7 +480,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.playerState = longToNumber(reader.int64());
|
||||
message.playerState = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 46: {
|
||||
@@ -536,7 +536,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.field57 = longToNumber(reader.int64());
|
||||
message.field57 = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 58: {
|
||||
@@ -616,7 +616,7 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.sabrForceMaxNetworkInterruptionDurationMs = longToNumber(reader.int64());
|
||||
message.sabrForceMaxNetworkInterruptionDurationMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 69: {
|
||||
@@ -653,17 +653,6 @@ export const ClientAbrState: MessageFns<ClientAbrState> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -13,28 +13,28 @@ export const protobufPackage = "video_streaming";
|
||||
export interface FormatInitializationMetadata {
|
||||
videoId?: string | undefined;
|
||||
formatId?: FormatId | undefined;
|
||||
endTimeMs?: number | undefined;
|
||||
endSegmentNumber?: number | undefined;
|
||||
endTimeMs?: string | undefined;
|
||||
endSegmentNumber?: string | undefined;
|
||||
mimeType?: string | undefined;
|
||||
initRange?: Range | undefined;
|
||||
indexRange?: Range | undefined;
|
||||
field8?: number | undefined;
|
||||
durationUnits?: number | undefined;
|
||||
durationTimescale?: number | undefined;
|
||||
field8?: string | undefined;
|
||||
durationUnits?: string | undefined;
|
||||
durationTimescale?: string | undefined;
|
||||
}
|
||||
|
||||
function createBaseFormatInitializationMetadata(): FormatInitializationMetadata {
|
||||
return {
|
||||
videoId: "",
|
||||
formatId: undefined,
|
||||
endTimeMs: 0,
|
||||
endSegmentNumber: 0,
|
||||
endTimeMs: "0",
|
||||
endSegmentNumber: "0",
|
||||
mimeType: "",
|
||||
initRange: undefined,
|
||||
indexRange: undefined,
|
||||
field8: 0,
|
||||
durationUnits: 0,
|
||||
durationTimescale: 0,
|
||||
field8: "0",
|
||||
durationUnits: "0",
|
||||
durationTimescale: "0",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -46,10 +46,10 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
if (message.formatId !== undefined) {
|
||||
FormatId.encode(message.formatId, writer.uint32(18).fork()).join();
|
||||
}
|
||||
if (message.endTimeMs !== undefined && message.endTimeMs !== 0) {
|
||||
if (message.endTimeMs !== undefined && message.endTimeMs !== "0") {
|
||||
writer.uint32(24).int64(message.endTimeMs);
|
||||
}
|
||||
if (message.endSegmentNumber !== undefined && message.endSegmentNumber !== 0) {
|
||||
if (message.endSegmentNumber !== undefined && message.endSegmentNumber !== "0") {
|
||||
writer.uint32(32).int64(message.endSegmentNumber);
|
||||
}
|
||||
if (message.mimeType !== undefined && message.mimeType !== "") {
|
||||
@@ -61,13 +61,13 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
if (message.indexRange !== undefined) {
|
||||
Range.encode(message.indexRange, writer.uint32(58).fork()).join();
|
||||
}
|
||||
if (message.field8 !== undefined && message.field8 !== 0) {
|
||||
if (message.field8 !== undefined && message.field8 !== "0") {
|
||||
writer.uint32(64).int64(message.field8);
|
||||
}
|
||||
if (message.durationUnits !== undefined && message.durationUnits !== 0) {
|
||||
if (message.durationUnits !== undefined && message.durationUnits !== "0") {
|
||||
writer.uint32(72).int64(message.durationUnits);
|
||||
}
|
||||
if (message.durationTimescale !== undefined && message.durationTimescale !== 0) {
|
||||
if (message.durationTimescale !== undefined && message.durationTimescale !== "0") {
|
||||
writer.uint32(80).int64(message.durationTimescale);
|
||||
}
|
||||
return writer;
|
||||
@@ -101,7 +101,7 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
break;
|
||||
}
|
||||
|
||||
message.endTimeMs = longToNumber(reader.int64());
|
||||
message.endTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 4: {
|
||||
@@ -109,7 +109,7 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
break;
|
||||
}
|
||||
|
||||
message.endSegmentNumber = longToNumber(reader.int64());
|
||||
message.endSegmentNumber = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 5: {
|
||||
@@ -141,7 +141,7 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
break;
|
||||
}
|
||||
|
||||
message.field8 = longToNumber(reader.int64());
|
||||
message.field8 = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 9: {
|
||||
@@ -149,7 +149,7 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
break;
|
||||
}
|
||||
|
||||
message.durationUnits = longToNumber(reader.int64());
|
||||
message.durationUnits = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 10: {
|
||||
@@ -157,7 +157,7 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
break;
|
||||
}
|
||||
|
||||
message.durationTimescale = longToNumber(reader.int64());
|
||||
message.durationTimescale = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -170,17 +170,6 @@ export const FormatInitializationMetadata: MessageFns<FormatInitializationMetada
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -11,30 +11,30 @@ export const protobufPackage = "video_streaming";
|
||||
|
||||
export interface LiveMetadata {
|
||||
broadcastId?: string | undefined;
|
||||
headSequenceNumber?: number | undefined;
|
||||
headTimeMs?: number | undefined;
|
||||
wallTimeMs?: number | undefined;
|
||||
headSequenceNumber?: string | undefined;
|
||||
headTimeMs?: string | undefined;
|
||||
wallTimeMs?: string | undefined;
|
||||
videoId?: string | undefined;
|
||||
postLiveDvr?: boolean | undefined;
|
||||
headm?: number | undefined;
|
||||
minSeekableTimeTicks?: number | undefined;
|
||||
headm?: string | undefined;
|
||||
minSeekableTimeTicks?: string | undefined;
|
||||
minSeekableTimescale?: number | undefined;
|
||||
maxSeekableTimeTicks?: number | undefined;
|
||||
maxSeekableTimeTicks?: string | undefined;
|
||||
maxSeekableTimescale?: number | undefined;
|
||||
}
|
||||
|
||||
function createBaseLiveMetadata(): LiveMetadata {
|
||||
return {
|
||||
broadcastId: "",
|
||||
headSequenceNumber: 0,
|
||||
headTimeMs: 0,
|
||||
wallTimeMs: 0,
|
||||
headSequenceNumber: "0",
|
||||
headTimeMs: "0",
|
||||
wallTimeMs: "0",
|
||||
videoId: "",
|
||||
postLiveDvr: false,
|
||||
headm: 0,
|
||||
minSeekableTimeTicks: 0,
|
||||
headm: "0",
|
||||
minSeekableTimeTicks: "0",
|
||||
minSeekableTimescale: 0,
|
||||
maxSeekableTimeTicks: 0,
|
||||
maxSeekableTimeTicks: "0",
|
||||
maxSeekableTimescale: 0,
|
||||
};
|
||||
}
|
||||
@@ -44,13 +44,13 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
if (message.broadcastId !== undefined && message.broadcastId !== "") {
|
||||
writer.uint32(10).string(message.broadcastId);
|
||||
}
|
||||
if (message.headSequenceNumber !== undefined && message.headSequenceNumber !== 0) {
|
||||
if (message.headSequenceNumber !== undefined && message.headSequenceNumber !== "0") {
|
||||
writer.uint32(24).int64(message.headSequenceNumber);
|
||||
}
|
||||
if (message.headTimeMs !== undefined && message.headTimeMs !== 0) {
|
||||
if (message.headTimeMs !== undefined && message.headTimeMs !== "0") {
|
||||
writer.uint32(32).int64(message.headTimeMs);
|
||||
}
|
||||
if (message.wallTimeMs !== undefined && message.wallTimeMs !== 0) {
|
||||
if (message.wallTimeMs !== undefined && message.wallTimeMs !== "0") {
|
||||
writer.uint32(40).int64(message.wallTimeMs);
|
||||
}
|
||||
if (message.videoId !== undefined && message.videoId !== "") {
|
||||
@@ -59,16 +59,16 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
if (message.postLiveDvr !== undefined && message.postLiveDvr !== false) {
|
||||
writer.uint32(64).bool(message.postLiveDvr);
|
||||
}
|
||||
if (message.headm !== undefined && message.headm !== 0) {
|
||||
if (message.headm !== undefined && message.headm !== "0") {
|
||||
writer.uint32(80).int64(message.headm);
|
||||
}
|
||||
if (message.minSeekableTimeTicks !== undefined && message.minSeekableTimeTicks !== 0) {
|
||||
if (message.minSeekableTimeTicks !== undefined && message.minSeekableTimeTicks !== "0") {
|
||||
writer.uint32(96).int64(message.minSeekableTimeTicks);
|
||||
}
|
||||
if (message.minSeekableTimescale !== undefined && message.minSeekableTimescale !== 0) {
|
||||
writer.uint32(104).int32(message.minSeekableTimescale);
|
||||
}
|
||||
if (message.maxSeekableTimeTicks !== undefined && message.maxSeekableTimeTicks !== 0) {
|
||||
if (message.maxSeekableTimeTicks !== undefined && message.maxSeekableTimeTicks !== "0") {
|
||||
writer.uint32(112).int64(message.maxSeekableTimeTicks);
|
||||
}
|
||||
if (message.maxSeekableTimescale !== undefined && message.maxSeekableTimescale !== 0) {
|
||||
@@ -97,7 +97,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.headSequenceNumber = longToNumber(reader.int64());
|
||||
message.headSequenceNumber = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 4: {
|
||||
@@ -105,7 +105,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.headTimeMs = longToNumber(reader.int64());
|
||||
message.headTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 5: {
|
||||
@@ -113,7 +113,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.wallTimeMs = longToNumber(reader.int64());
|
||||
message.wallTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 6: {
|
||||
@@ -137,7 +137,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.headm = longToNumber(reader.int64());
|
||||
message.headm = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 12: {
|
||||
@@ -145,7 +145,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.minSeekableTimeTicks = longToNumber(reader.int64());
|
||||
message.minSeekableTimeTicks = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 13: {
|
||||
@@ -161,7 +161,7 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.maxSeekableTimeTicks = longToNumber(reader.int64());
|
||||
message.maxSeekableTimeTicks = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 15: {
|
||||
@@ -182,17 +182,6 @@ export const LiveMetadata: MessageFns<LiveMetadata> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -15,19 +15,19 @@ export interface MediaHeader {
|
||||
headerId?: number | undefined;
|
||||
videoId?: string | undefined;
|
||||
itag?: number | undefined;
|
||||
lmt?: number | undefined;
|
||||
lmt?: string | undefined;
|
||||
xtags?: string | undefined;
|
||||
startRange?: number | undefined;
|
||||
startRange?: string | undefined;
|
||||
compressionAlgorithm?: CompressionType | undefined;
|
||||
isInitSeg?: boolean | undefined;
|
||||
sequenceNumber?: number | undefined;
|
||||
bitrateBps?: number | undefined;
|
||||
startMs?: number | undefined;
|
||||
durationMs?: number | undefined;
|
||||
bitrateBps?: string | undefined;
|
||||
startMs?: string | undefined;
|
||||
durationMs?: string | undefined;
|
||||
formatId?: FormatId | undefined;
|
||||
contentLength?: number | undefined;
|
||||
contentLength?: string | undefined;
|
||||
timeRange?: TimeRange | undefined;
|
||||
sequenceLmt?: number | undefined;
|
||||
sequenceLmt?: string | undefined;
|
||||
}
|
||||
|
||||
function createBaseMediaHeader(): MediaHeader {
|
||||
@@ -35,19 +35,19 @@ function createBaseMediaHeader(): MediaHeader {
|
||||
headerId: 0,
|
||||
videoId: "",
|
||||
itag: 0,
|
||||
lmt: 0,
|
||||
lmt: "0",
|
||||
xtags: "",
|
||||
startRange: 0,
|
||||
startRange: "0",
|
||||
compressionAlgorithm: 0,
|
||||
isInitSeg: false,
|
||||
sequenceNumber: 0,
|
||||
bitrateBps: 0,
|
||||
startMs: 0,
|
||||
durationMs: 0,
|
||||
bitrateBps: "0",
|
||||
startMs: "0",
|
||||
durationMs: "0",
|
||||
formatId: undefined,
|
||||
contentLength: 0,
|
||||
contentLength: "0",
|
||||
timeRange: undefined,
|
||||
sequenceLmt: 0,
|
||||
sequenceLmt: "0",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -62,13 +62,13 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
if (message.itag !== undefined && message.itag !== 0) {
|
||||
writer.uint32(24).int32(message.itag);
|
||||
}
|
||||
if (message.lmt !== undefined && message.lmt !== 0) {
|
||||
if (message.lmt !== undefined && message.lmt !== "0") {
|
||||
writer.uint32(32).uint64(message.lmt);
|
||||
}
|
||||
if (message.xtags !== undefined && message.xtags !== "") {
|
||||
writer.uint32(42).string(message.xtags);
|
||||
}
|
||||
if (message.startRange !== undefined && message.startRange !== 0) {
|
||||
if (message.startRange !== undefined && message.startRange !== "0") {
|
||||
writer.uint32(48).int64(message.startRange);
|
||||
}
|
||||
if (message.compressionAlgorithm !== undefined && message.compressionAlgorithm !== 0) {
|
||||
@@ -78,27 +78,27 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
writer.uint32(64).bool(message.isInitSeg);
|
||||
}
|
||||
if (message.sequenceNumber !== undefined && message.sequenceNumber !== 0) {
|
||||
writer.uint32(72).int64(message.sequenceNumber);
|
||||
writer.uint32(72).int32(message.sequenceNumber);
|
||||
}
|
||||
if (message.bitrateBps !== undefined && message.bitrateBps !== 0) {
|
||||
if (message.bitrateBps !== undefined && message.bitrateBps !== "0") {
|
||||
writer.uint32(80).int64(message.bitrateBps);
|
||||
}
|
||||
if (message.startMs !== undefined && message.startMs !== 0) {
|
||||
if (message.startMs !== undefined && message.startMs !== "0") {
|
||||
writer.uint32(88).int64(message.startMs);
|
||||
}
|
||||
if (message.durationMs !== undefined && message.durationMs !== 0) {
|
||||
if (message.durationMs !== undefined && message.durationMs !== "0") {
|
||||
writer.uint32(96).int64(message.durationMs);
|
||||
}
|
||||
if (message.formatId !== undefined) {
|
||||
FormatId.encode(message.formatId, writer.uint32(106).fork()).join();
|
||||
}
|
||||
if (message.contentLength !== undefined && message.contentLength !== 0) {
|
||||
if (message.contentLength !== undefined && message.contentLength !== "0") {
|
||||
writer.uint32(112).int64(message.contentLength);
|
||||
}
|
||||
if (message.timeRange !== undefined) {
|
||||
TimeRange.encode(message.timeRange, writer.uint32(122).fork()).join();
|
||||
}
|
||||
if (message.sequenceLmt !== undefined && message.sequenceLmt !== 0) {
|
||||
if (message.sequenceLmt !== undefined && message.sequenceLmt !== "0") {
|
||||
writer.uint32(128).uint64(message.sequenceLmt);
|
||||
}
|
||||
return writer;
|
||||
@@ -140,7 +140,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.lmt = longToNumber(reader.uint64());
|
||||
message.lmt = reader.uint64().toString();
|
||||
continue;
|
||||
}
|
||||
case 5: {
|
||||
@@ -156,7 +156,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.startRange = longToNumber(reader.int64());
|
||||
message.startRange = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 7: {
|
||||
@@ -180,7 +180,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.sequenceNumber = longToNumber(reader.int64());
|
||||
message.sequenceNumber = reader.int32();
|
||||
continue;
|
||||
}
|
||||
case 10: {
|
||||
@@ -188,7 +188,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.bitrateBps = longToNumber(reader.int64());
|
||||
message.bitrateBps = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 11: {
|
||||
@@ -196,7 +196,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.startMs = longToNumber(reader.int64());
|
||||
message.startMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 12: {
|
||||
@@ -204,7 +204,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.durationMs = longToNumber(reader.int64());
|
||||
message.durationMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 13: {
|
||||
@@ -220,7 +220,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.contentLength = longToNumber(reader.int64());
|
||||
message.contentLength = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 15: {
|
||||
@@ -236,7 +236,7 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.sequenceLmt = longToNumber(reader.uint64());
|
||||
message.sequenceLmt = reader.uint64().toString();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -249,17 +249,6 @@ export const MediaHeader: MessageFns<MediaHeader> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -16,11 +16,11 @@ export interface OnesieHeader {
|
||||
videoId?: string | undefined;
|
||||
itag?: string | undefined;
|
||||
cryptoParams?: CryptoParams | undefined;
|
||||
lastModified?: number | undefined;
|
||||
expectedMediaSizeBytes?: number | undefined;
|
||||
lastModified?: string | undefined;
|
||||
expectedMediaSizeBytes?: string | undefined;
|
||||
restrictedFormats: string[];
|
||||
xtags?: string | undefined;
|
||||
sequenceNumber?: number | undefined;
|
||||
sequenceNumber?: string | undefined;
|
||||
field23?: OnesieHeader_UnknownMessage1 | undefined;
|
||||
field34?: OnesieHeader_UnknownMessage2 | undefined;
|
||||
}
|
||||
@@ -39,11 +39,11 @@ function createBaseOnesieHeader(): OnesieHeader {
|
||||
videoId: "",
|
||||
itag: "",
|
||||
cryptoParams: undefined,
|
||||
lastModified: 0,
|
||||
expectedMediaSizeBytes: 0,
|
||||
lastModified: "0",
|
||||
expectedMediaSizeBytes: "0",
|
||||
restrictedFormats: [],
|
||||
xtags: "",
|
||||
sequenceNumber: 0,
|
||||
sequenceNumber: "0",
|
||||
field23: undefined,
|
||||
field34: undefined,
|
||||
};
|
||||
@@ -63,10 +63,10 @@ export const OnesieHeader: MessageFns<OnesieHeader> = {
|
||||
if (message.cryptoParams !== undefined) {
|
||||
CryptoParams.encode(message.cryptoParams, writer.uint32(34).fork()).join();
|
||||
}
|
||||
if (message.lastModified !== undefined && message.lastModified !== 0) {
|
||||
if (message.lastModified !== undefined && message.lastModified !== "0") {
|
||||
writer.uint32(40).uint64(message.lastModified);
|
||||
}
|
||||
if (message.expectedMediaSizeBytes !== undefined && message.expectedMediaSizeBytes !== 0) {
|
||||
if (message.expectedMediaSizeBytes !== undefined && message.expectedMediaSizeBytes !== "0") {
|
||||
writer.uint32(56).int64(message.expectedMediaSizeBytes);
|
||||
}
|
||||
for (const v of message.restrictedFormats) {
|
||||
@@ -75,7 +75,7 @@ export const OnesieHeader: MessageFns<OnesieHeader> = {
|
||||
if (message.xtags !== undefined && message.xtags !== "") {
|
||||
writer.uint32(122).string(message.xtags);
|
||||
}
|
||||
if (message.sequenceNumber !== undefined && message.sequenceNumber !== 0) {
|
||||
if (message.sequenceNumber !== undefined && message.sequenceNumber !== "0") {
|
||||
writer.uint32(144).int64(message.sequenceNumber);
|
||||
}
|
||||
if (message.field23 !== undefined) {
|
||||
@@ -131,7 +131,7 @@ export const OnesieHeader: MessageFns<OnesieHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.lastModified = longToNumber(reader.uint64());
|
||||
message.lastModified = reader.uint64().toString();
|
||||
continue;
|
||||
}
|
||||
case 7: {
|
||||
@@ -139,7 +139,7 @@ export const OnesieHeader: MessageFns<OnesieHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.expectedMediaSizeBytes = longToNumber(reader.int64());
|
||||
message.expectedMediaSizeBytes = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 11: {
|
||||
@@ -163,7 +163,7 @@ export const OnesieHeader: MessageFns<OnesieHeader> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.sequenceNumber = longToNumber(reader.int64());
|
||||
message.sequenceNumber = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 23: {
|
||||
@@ -266,17 +266,6 @@ export const OnesieHeader_UnknownMessage2: MessageFns<OnesieHeader_UnknownMessag
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -50,7 +50,7 @@ export interface SabrContextValue_ContentInfo {
|
||||
}
|
||||
|
||||
export interface SabrContextValue_TimingInfo {
|
||||
timestampMs?: number | undefined;
|
||||
timestampMs?: string | undefined;
|
||||
durationMs?: number | undefined;
|
||||
content?: SabrContextValue_ContentInfo | undefined;
|
||||
}
|
||||
@@ -244,12 +244,12 @@ export const SabrContextValue_ContentInfo: MessageFns<SabrContextValue_ContentIn
|
||||
};
|
||||
|
||||
function createBaseSabrContextValue_TimingInfo(): SabrContextValue_TimingInfo {
|
||||
return { timestampMs: 0, durationMs: 0, content: undefined };
|
||||
return { timestampMs: "0", durationMs: 0, content: undefined };
|
||||
}
|
||||
|
||||
export const SabrContextValue_TimingInfo: MessageFns<SabrContextValue_TimingInfo> = {
|
||||
encode(message: SabrContextValue_TimingInfo, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||
if (message.timestampMs !== undefined && message.timestampMs !== 0) {
|
||||
if (message.timestampMs !== undefined && message.timestampMs !== "0") {
|
||||
writer.uint32(8).int64(message.timestampMs);
|
||||
}
|
||||
if (message.durationMs !== undefined && message.durationMs !== 0) {
|
||||
@@ -273,7 +273,7 @@ export const SabrContextValue_TimingInfo: MessageFns<SabrContextValue_TimingInfo
|
||||
break;
|
||||
}
|
||||
|
||||
message.timestampMs = longToNumber(reader.int64());
|
||||
message.timestampMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 2: {
|
||||
@@ -302,17 +302,6 @@ export const SabrContextValue_TimingInfo: MessageFns<SabrContextValue_TimingInfo
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -11,18 +11,18 @@ import { SeekSource } from "../misc/common.js";
|
||||
export const protobufPackage = "video_streaming";
|
||||
|
||||
export interface SabrSeek {
|
||||
seekMediaTime?: number | undefined;
|
||||
seekMediaTime?: string | undefined;
|
||||
seekMediaTimescale?: number | undefined;
|
||||
seekSource?: SeekSource | undefined;
|
||||
}
|
||||
|
||||
function createBaseSabrSeek(): SabrSeek {
|
||||
return { seekMediaTime: 0, seekMediaTimescale: 0, seekSource: 0 };
|
||||
return { seekMediaTime: "0", seekMediaTimescale: 0, seekSource: 0 };
|
||||
}
|
||||
|
||||
export const SabrSeek: MessageFns<SabrSeek> = {
|
||||
encode(message: SabrSeek, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||
if (message.seekMediaTime !== undefined && message.seekMediaTime !== 0) {
|
||||
if (message.seekMediaTime !== undefined && message.seekMediaTime !== "0") {
|
||||
writer.uint32(8).int64(message.seekMediaTime);
|
||||
}
|
||||
if (message.seekMediaTimescale !== undefined && message.seekMediaTimescale !== 0) {
|
||||
@@ -46,7 +46,7 @@ export const SabrSeek: MessageFns<SabrSeek> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.seekMediaTime = longToNumber(reader.int64());
|
||||
message.seekMediaTime = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 2: {
|
||||
@@ -75,17 +75,6 @@ export const SabrSeek: MessageFns<SabrSeek> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -50,7 +50,7 @@ export interface StreamerContext_ClientInfo {
|
||||
windowHeightPoints?: number | undefined;
|
||||
androidSdkVersion?: number | undefined;
|
||||
screenDensityFloat?: number | undefined;
|
||||
utcOffsetMinutes?: number | undefined;
|
||||
utcOffsetMinutes?: string | undefined;
|
||||
timeZone?:
|
||||
| string
|
||||
| undefined;
|
||||
@@ -236,7 +236,7 @@ function createBaseStreamerContext_ClientInfo(): StreamerContext_ClientInfo {
|
||||
windowHeightPoints: 0,
|
||||
androidSdkVersion: 0,
|
||||
screenDensityFloat: 0,
|
||||
utcOffsetMinutes: 0,
|
||||
utcOffsetMinutes: "0",
|
||||
timeZone: "",
|
||||
chipset: "",
|
||||
glDeviceInfo: undefined,
|
||||
@@ -302,7 +302,7 @@ export const StreamerContext_ClientInfo: MessageFns<StreamerContext_ClientInfo>
|
||||
if (message.screenDensityFloat !== undefined && message.screenDensityFloat !== 0) {
|
||||
writer.uint32(525).float(message.screenDensityFloat);
|
||||
}
|
||||
if (message.utcOffsetMinutes !== undefined && message.utcOffsetMinutes !== 0) {
|
||||
if (message.utcOffsetMinutes !== undefined && message.utcOffsetMinutes !== "0") {
|
||||
writer.uint32(536).int64(message.utcOffsetMinutes);
|
||||
}
|
||||
if (message.timeZone !== undefined && message.timeZone !== "") {
|
||||
@@ -481,7 +481,7 @@ export const StreamerContext_ClientInfo: MessageFns<StreamerContext_ClientInfo>
|
||||
break;
|
||||
}
|
||||
|
||||
message.utcOffsetMinutes = longToNumber(reader.int64());
|
||||
message.utcOffsetMinutes = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 80: {
|
||||
@@ -726,17 +726,6 @@ export const StreamerContext_UnknownMessage1_UnknownInnerMessage1: MessageFns<
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -10,21 +10,21 @@ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
|
||||
export const protobufPackage = "video_streaming";
|
||||
|
||||
export interface TimeRange {
|
||||
startTicks?: number | undefined;
|
||||
durationTicks?: number | undefined;
|
||||
startTicks?: string | undefined;
|
||||
durationTicks?: string | undefined;
|
||||
timescale?: number | undefined;
|
||||
}
|
||||
|
||||
function createBaseTimeRange(): TimeRange {
|
||||
return { startTicks: 0, durationTicks: 0, timescale: 0 };
|
||||
return { startTicks: "0", durationTicks: "0", timescale: 0 };
|
||||
}
|
||||
|
||||
export const TimeRange: MessageFns<TimeRange> = {
|
||||
encode(message: TimeRange, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
|
||||
if (message.startTicks !== undefined && message.startTicks !== 0) {
|
||||
if (message.startTicks !== undefined && message.startTicks !== "0") {
|
||||
writer.uint32(8).int64(message.startTicks);
|
||||
}
|
||||
if (message.durationTicks !== undefined && message.durationTicks !== 0) {
|
||||
if (message.durationTicks !== undefined && message.durationTicks !== "0") {
|
||||
writer.uint32(16).int64(message.durationTicks);
|
||||
}
|
||||
if (message.timescale !== undefined && message.timescale !== 0) {
|
||||
@@ -45,7 +45,7 @@ export const TimeRange: MessageFns<TimeRange> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.startTicks = longToNumber(reader.int64());
|
||||
message.startTicks = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 2: {
|
||||
@@ -53,7 +53,7 @@ export const TimeRange: MessageFns<TimeRange> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.durationTicks = longToNumber(reader.int64());
|
||||
message.durationTicks = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 3: {
|
||||
@@ -74,17 +74,6 @@ export const TimeRange: MessageFns<TimeRange> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -19,7 +19,7 @@ export interface VideoPlaybackAbrRequest {
|
||||
selectedFormatIds: FormatId[];
|
||||
bufferedRanges: BufferedRange[];
|
||||
/** `osts` (Onesie Start Time Seconds) param on Onesie requests. */
|
||||
playerTimeMs?: number | undefined;
|
||||
playerTimeMs?: string | undefined;
|
||||
videoPlaybackUstreamerConfig?: Uint8Array | undefined;
|
||||
field6?:
|
||||
| UnknownMessage1
|
||||
@@ -38,7 +38,7 @@ export interface VideoPlaybackAbrRequest {
|
||||
|
||||
export interface UnknownMessage1 {
|
||||
formatId?: FormatId | undefined;
|
||||
lmt?: number | undefined;
|
||||
lmt?: string | undefined;
|
||||
sequenceNumber?: number | undefined;
|
||||
timeRange?: TimeRange | undefined;
|
||||
field5?: number | undefined;
|
||||
@@ -64,7 +64,7 @@ function createBaseVideoPlaybackAbrRequest(): VideoPlaybackAbrRequest {
|
||||
clientAbrState: undefined,
|
||||
selectedFormatIds: [],
|
||||
bufferedRanges: [],
|
||||
playerTimeMs: 0,
|
||||
playerTimeMs: "0",
|
||||
videoPlaybackUstreamerConfig: new Uint8Array(0),
|
||||
field6: undefined,
|
||||
preferredAudioFormatIds: [],
|
||||
@@ -89,7 +89,7 @@ export const VideoPlaybackAbrRequest: MessageFns<VideoPlaybackAbrRequest> = {
|
||||
for (const v of message.bufferedRanges) {
|
||||
BufferedRange.encode(v!, writer.uint32(26).fork()).join();
|
||||
}
|
||||
if (message.playerTimeMs !== undefined && message.playerTimeMs !== 0) {
|
||||
if (message.playerTimeMs !== undefined && message.playerTimeMs !== "0") {
|
||||
writer.uint32(32).int64(message.playerTimeMs);
|
||||
}
|
||||
if (message.videoPlaybackUstreamerConfig !== undefined && message.videoPlaybackUstreamerConfig.length !== 0) {
|
||||
@@ -161,7 +161,7 @@ export const VideoPlaybackAbrRequest: MessageFns<VideoPlaybackAbrRequest> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.playerTimeMs = longToNumber(reader.int64());
|
||||
message.playerTimeMs = reader.int64().toString();
|
||||
continue;
|
||||
}
|
||||
case 5: {
|
||||
@@ -255,7 +255,7 @@ export const VideoPlaybackAbrRequest: MessageFns<VideoPlaybackAbrRequest> = {
|
||||
};
|
||||
|
||||
function createBaseUnknownMessage1(): UnknownMessage1 {
|
||||
return { formatId: undefined, lmt: 0, sequenceNumber: 0, timeRange: undefined, field5: 0 };
|
||||
return { formatId: undefined, lmt: "0", sequenceNumber: 0, timeRange: undefined, field5: 0 };
|
||||
}
|
||||
|
||||
export const UnknownMessage1: MessageFns<UnknownMessage1> = {
|
||||
@@ -263,7 +263,7 @@ export const UnknownMessage1: MessageFns<UnknownMessage1> = {
|
||||
if (message.formatId !== undefined) {
|
||||
FormatId.encode(message.formatId, writer.uint32(10).fork()).join();
|
||||
}
|
||||
if (message.lmt !== undefined && message.lmt !== 0) {
|
||||
if (message.lmt !== undefined && message.lmt !== "0") {
|
||||
writer.uint32(16).sint64(message.lmt);
|
||||
}
|
||||
if (message.sequenceNumber !== undefined && message.sequenceNumber !== 0) {
|
||||
@@ -298,7 +298,7 @@ export const UnknownMessage1: MessageFns<UnknownMessage1> = {
|
||||
break;
|
||||
}
|
||||
|
||||
message.lmt = longToNumber(reader.sint64());
|
||||
message.lmt = reader.sint64().toString();
|
||||
continue;
|
||||
}
|
||||
case 3: {
|
||||
@@ -486,17 +486,6 @@ export const UnknownMessage3: MessageFns<UnknownMessage3> = {
|
||||
},
|
||||
};
|
||||
|
||||
function longToNumber(int64: { toString(): string }): number {
|
||||
const num = globalThis.Number(int64.toString());
|
||||
if (num > globalThis.Number.MAX_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
|
||||
}
|
||||
if (num < globalThis.Number.MIN_SAFE_INTEGER) {
|
||||
throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
|
||||
}
|
||||
return num;
|
||||
}
|
||||
|
||||
export interface MessageFns<T> {
|
||||
encode(message: T, writer?: BinaryWriter): BinaryWriter;
|
||||
decode(input: BinaryReader | Uint8Array, length?: number): T;
|
||||
|
||||
@@ -13,7 +13,7 @@ message MediaHeader {
|
||||
optional int64 start_range = 6;
|
||||
optional .misc.CompressionType compression_algorithm = 7;
|
||||
optional bool is_init_seg = 8;
|
||||
optional int64 sequence_number = 9;
|
||||
optional int32 sequence_number = 9;
|
||||
optional int64 bitrate_bps = 10;
|
||||
optional int64 start_ms = 11;
|
||||
optional int64 duration_ms = 12;
|
||||
|
||||
@@ -85,7 +85,7 @@ interface SelectedFormats {
|
||||
interface Segment {
|
||||
formatIdKey: string;
|
||||
segmentNumber: number;
|
||||
durationMs?: number;
|
||||
durationMs?: string;
|
||||
mediaHeader: MediaHeader;
|
||||
bufferedChunks: Uint8Array[];
|
||||
}
|
||||
@@ -367,7 +367,7 @@ export class SabrStream extends EventEmitterLike {
|
||||
const maxRetries = options.maxRetries !== undefined ? options.maxRetries : DEFAULT_MAX_RETRIES;
|
||||
const enabledTrackTypesBitfield = options.enabledTrackTypes ?? EnabledTrackTypes.VIDEO_AND_AUDIO;
|
||||
|
||||
const abrState = {
|
||||
const abrState: Record<string, any> = {
|
||||
playerTimeMs,
|
||||
audioTrackId: audioFormat.audioTrackId,
|
||||
playbackRate: 1,
|
||||
@@ -385,7 +385,7 @@ export class SabrStream extends EventEmitterLike {
|
||||
FormatKeyUtils.fromFormat(audioFormat);
|
||||
}
|
||||
|
||||
while (abrState.playerTimeMs < this.durationMs) {
|
||||
while (parseInt(abrState.playerTimeMs) < this.durationMs) {
|
||||
if (this._aborted) {
|
||||
this.logger.debug(TAG, 'Download process aborted, exiting streaming loop.');
|
||||
break;
|
||||
@@ -410,6 +410,9 @@ export class SabrStream extends EventEmitterLike {
|
||||
if (shouldStop)
|
||||
break;
|
||||
|
||||
// Needed for the pb library.
|
||||
abrState.playerTimeMs = abrState.playerTimeMs.toString();
|
||||
|
||||
const success = await this.executeWithRetry(
|
||||
() => this.fetchAndProcessSegments(
|
||||
abrState,
|
||||
@@ -528,7 +531,7 @@ export class SabrStream extends EventEmitterLike {
|
||||
if (downloadedDurationCloseness < 5000) {
|
||||
this.logger.warn(TAG, 'Stream is close to completion, but stalled. Checking if we have the last segment.');
|
||||
|
||||
const endSegmentNumber = this.mainFormat?.formatInitializationMetadata.endSegmentNumber || -1;
|
||||
const endSegmentNumber = parseInt(this.mainFormat?.formatInitializationMetadata.endSegmentNumber || '0') || -1;
|
||||
const lastSegment = this.mainFormat?.downloadedSegments.get(endSegmentNumber);
|
||||
|
||||
if (lastSegment && lastSegment.segmentNumber === endSegmentNumber) {
|
||||
@@ -651,16 +654,16 @@ export class SabrStream extends EventEmitterLike {
|
||||
}
|
||||
|
||||
const mediaHeaders = initializedFormat.lastMediaHeaders;
|
||||
const durationMs = mediaHeaders.reduce((sum, header) => sum + (header.durationMs || 0), 0);
|
||||
const durationMs = mediaHeaders.reduce((sum, header) => sum + (parseInt(header.durationMs || '0')), 0);
|
||||
|
||||
bufferedRanges.push({
|
||||
durationMs,
|
||||
durationMs: durationMs.toString(),
|
||||
formatId: initializedFormat.formatInitializationMetadata.formatId,
|
||||
startTimeMs: mediaHeaders[0].startMs || 0,
|
||||
startTimeMs: String(mediaHeaders[0].startMs || '0'),
|
||||
startSegmentIndex: mediaHeaders[0].sequenceNumber || 1,
|
||||
endSegmentIndex: mediaHeaders[mediaHeaders.length - 1].sequenceNumber || 1,
|
||||
timeRange: {
|
||||
durationTicks: durationMs,
|
||||
durationTicks: durationMs.toString(),
|
||||
startTicks: mediaHeaders[0].startMs,
|
||||
timescale: mediaHeaders[0].timeRange?.timescale
|
||||
}
|
||||
@@ -761,12 +764,12 @@ export class SabrStream extends EventEmitterLike {
|
||||
updatedBufferedRanges.push({
|
||||
formatId: format,
|
||||
durationMs: MAX_INT32_VALUE,
|
||||
startTimeMs: 0,
|
||||
startSegmentIndex: MAX_INT32_VALUE,
|
||||
endSegmentIndex: MAX_INT32_VALUE,
|
||||
startTimeMs: String(0),
|
||||
startSegmentIndex: parseInt(MAX_INT32_VALUE),
|
||||
endSegmentIndex: parseInt(MAX_INT32_VALUE),
|
||||
timeRange: {
|
||||
durationTicks: MAX_INT32_VALUE,
|
||||
startTicks: 0,
|
||||
startTicks: '0',
|
||||
timescale: 1000
|
||||
}
|
||||
});
|
||||
@@ -1108,8 +1111,8 @@ export class SabrStream extends EventEmitterLike {
|
||||
|
||||
const headerId = mediaHeader.headerId || 0;
|
||||
const formatIdKey = FormatKeyUtils.fromMediaHeader(mediaHeader);
|
||||
const segmentNumber = mediaHeader.isInitSeg ? 0 : mediaHeader.sequenceNumber!;
|
||||
const durationMs = mediaHeader.durationMs || Math.ceil(((mediaHeader.timeRange?.durationTicks || 0) / (mediaHeader.timeRange?.timescale || 0)) * 1000);
|
||||
const segmentNumber = mediaHeader.isInitSeg ? 0 : mediaHeader.sequenceNumber || 0;
|
||||
const durationMs = mediaHeader.durationMs || Math.ceil((parseInt(mediaHeader.timeRange?.durationTicks || '0') / (mediaHeader.timeRange?.timescale || 0)) * 1000).toString();
|
||||
|
||||
const initializedFormat = this.initializedFormatsMap.get(formatIdKey);
|
||||
if (!initializedFormat) {
|
||||
@@ -1179,7 +1182,7 @@ export class SabrStream extends EventEmitterLike {
|
||||
|
||||
const loadedBytes = segment.bufferedChunks.reduce((sum, chunk) => sum + chunk.length, 0);
|
||||
|
||||
if (loadedBytes !== segment.mediaHeader.contentLength) {
|
||||
if (loadedBytes !== parseInt(segment.mediaHeader.contentLength || '0')) {
|
||||
this.logger.warn(TAG, `Content length mismatch for segment ${segment.segmentNumber} (Header ID: ${headerId}, key: ${segment.formatIdKey}, expected: ${segment.mediaHeader.contentLength}, received: ${loadedBytes})`);
|
||||
this.partialSegmentQueue.delete(headerId);
|
||||
return;
|
||||
@@ -1220,8 +1223,8 @@ export class SabrStream extends EventEmitterLike {
|
||||
* @private
|
||||
*/
|
||||
private validateAndCorrectDuration(formatInitializationMetadata: FormatInitializationMetadata): void {
|
||||
const durationUnits = formatInitializationMetadata.durationUnits || 0;
|
||||
const durationTimescale = formatInitializationMetadata.durationTimescale || 0;
|
||||
const durationUnits = parseInt(formatInitializationMetadata.durationUnits || '0');
|
||||
const durationTimescale = parseInt(formatInitializationMetadata.durationTimescale || '0');
|
||||
|
||||
if (durationTimescale === 0) {
|
||||
this.logger.warn(TAG, 'Invalid timescale (0) in format initialization metadata');
|
||||
@@ -1249,8 +1252,8 @@ export class SabrStream extends EventEmitterLike {
|
||||
}
|
||||
|
||||
const totalDuration = getTotalDownloadedDuration(initializedFormat);
|
||||
const durationUnits = initializedFormat.formatInitializationMetadata.durationUnits || 0;
|
||||
const durationTimescale = initializedFormat.formatInitializationMetadata.durationTimescale || 0;
|
||||
const durationUnits = parseInt(initializedFormat.formatInitializationMetadata.durationUnits || '0');
|
||||
const durationTimescale = parseInt(initializedFormat.formatInitializationMetadata.durationTimescale || '0');
|
||||
const expectedDuration = durationTimescale ? durationUnits / (durationTimescale / 1000) : 0;
|
||||
|
||||
const durationMismatch = Math.abs(totalDuration - expectedDuration);
|
||||
@@ -1264,7 +1267,7 @@ export class SabrStream extends EventEmitterLike {
|
||||
|
||||
segments.sort(([ numA ], [ numB ]) => numA - numB);
|
||||
|
||||
const expectedSegmentCount = initializedFormat.formatInitializationMetadata.endSegmentNumber!;
|
||||
const expectedSegmentCount = parseInt(initializedFormat.formatInitializationMetadata.endSegmentNumber || '0');
|
||||
const missingSegments = [];
|
||||
|
||||
// Find all missing segments in the expected range.
|
||||
|
||||
@@ -34,8 +34,8 @@ interface InitializedFormat {
|
||||
formatId: FormatId;
|
||||
startSequenceNumber: number;
|
||||
endSequenceNumber: number;
|
||||
startTimeMs: number;
|
||||
durationMs: number;
|
||||
startTimeMs: string;
|
||||
durationMs: string;
|
||||
timescale: number;
|
||||
};
|
||||
}
|
||||
@@ -349,10 +349,9 @@ export class SabrStreamingAdapter {
|
||||
return {
|
||||
clientAbrState: {
|
||||
playbackRate: this.playerAdapter.getPlaybackRate(),
|
||||
playerTimeMs: Math.round((request.segment.getStartTime() ?? this.lastPlayerTimeSecs) * 1000),
|
||||
timeSinceLastManualFormatSelectionMs: 0,
|
||||
playerTimeMs: Math.round((request.segment.getStartTime() ?? this.lastPlayerTimeSecs) * 1000).toString(),
|
||||
clientViewportIsFlexible: false,
|
||||
bandwidthEstimate: Math.round(this.playerAdapter.getBandwidthEstimate() || 0),
|
||||
bandwidthEstimate: Math.round(this.playerAdapter.getBandwidthEstimate() || 0).toString(),
|
||||
drcEnabled: currentFormat?.isDrc ?? false,
|
||||
enabledTrackTypesBitfield: currentFormat.width ? EnabledTrackTypes.VIDEO_ONLY : EnabledTrackTypes.AUDIO_ONLY,
|
||||
audioTrackId: currentFormat.audioTrackId
|
||||
@@ -428,12 +427,12 @@ export class SabrStreamingAdapter {
|
||||
return {
|
||||
formatId: format,
|
||||
durationMs: MAX_INT32_VALUE,
|
||||
startTimeMs: 0,
|
||||
startSegmentIndex: MAX_INT32_VALUE,
|
||||
endSegmentIndex: MAX_INT32_VALUE,
|
||||
startTimeMs: '0',
|
||||
startSegmentIndex: Number(MAX_INT32_VALUE),
|
||||
endSegmentIndex: Number(MAX_INT32_VALUE),
|
||||
timeRange: {
|
||||
durationTicks: MAX_INT32_VALUE,
|
||||
startTicks: 0,
|
||||
startTicks: '0',
|
||||
timescale: 1000
|
||||
}
|
||||
};
|
||||
@@ -454,11 +453,11 @@ export class SabrStreamingAdapter {
|
||||
formatId,
|
||||
startSegmentIndex: startSequenceNumber,
|
||||
durationMs,
|
||||
startTimeMs: 0,
|
||||
startTimeMs: '0',
|
||||
endSegmentIndex: endSequenceNumber,
|
||||
timeRange: {
|
||||
timescale,
|
||||
startTicks: 0,
|
||||
startTicks: '0',
|
||||
durationTicks: durationMs
|
||||
}
|
||||
};
|
||||
@@ -581,8 +580,8 @@ export class SabrStreamingAdapter {
|
||||
formatId: streamInfo.mediaHeader.formatId!,
|
||||
startSequenceNumber: streamInfo.mediaHeader.sequenceNumber || 1,
|
||||
endSequenceNumber: streamInfo.mediaHeader.sequenceNumber || 1,
|
||||
startTimeMs: streamInfo.mediaHeader.startMs || 0,
|
||||
durationMs: streamInfo.mediaHeader.durationMs || 0,
|
||||
startTimeMs: streamInfo.mediaHeader.startMs || '0',
|
||||
durationMs: streamInfo.mediaHeader.durationMs || '0',
|
||||
timescale: streamInfo.mediaHeader.timeRange?.timescale || 1000
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ export type Part = {
|
||||
|
||||
export interface SabrFormat {
|
||||
itag: number;
|
||||
lastModified: number;
|
||||
lastModified: string;
|
||||
xtags?: string;
|
||||
width?: number;
|
||||
height?: number;
|
||||
|
||||
@@ -67,7 +67,7 @@ export function createSegmentCacheKeyFromMetadata(
|
||||
const pseudoMediaHeader = {
|
||||
itag: requestMetadata.format.itag,
|
||||
xtags: requestMetadata.format.xtags || '',
|
||||
startRange: requestMetadata.byteRange.start,
|
||||
startRange: requestMetadata.byteRange.start.toString(),
|
||||
isInitSeg: requestMetadata.isInit
|
||||
};
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ export function getTotalDownloadedDuration(
|
||||
initializedFormat: InitializedFormat
|
||||
): number {
|
||||
return Array.from(initializedFormat.downloadedSegments.values())
|
||||
.reduce((sum, segment) => sum + (segment.durationMs || 0), 0);
|
||||
.reduce((sum, segment) => sum + (parseInt(segment.durationMs || '0')), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { FormatStream, SabrFormat } from '../types/shared.js';
|
||||
|
||||
export const MAX_INT32_VALUE = 2147483647;
|
||||
export const MAX_INT32_VALUE = '2147483647';
|
||||
|
||||
export enum EnabledTrackTypes {
|
||||
VIDEO_AND_AUDIO = 0,
|
||||
@@ -104,7 +104,7 @@ export function concatenateChunks(chunks: Uint8Array[]): Uint8Array {
|
||||
export function buildSabrFormat(formatStream: FormatStream): SabrFormat {
|
||||
return {
|
||||
itag: formatStream.itag,
|
||||
lastModified: parseInt(formatStream.last_modified_ms || formatStream.lastModified || '0'),
|
||||
lastModified: formatStream.last_modified_ms || formatStream.lastModified || '0',
|
||||
xtags: formatStream.xtags,
|
||||
width: formatStream.width,
|
||||
height: formatStream.height,
|
||||
|
||||
Reference in New Issue
Block a user