From d389d242ab21450b750dd694889334f6a37ef4ca Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Sat, 15 Mar 2025 15:37:56 +0100 Subject: [PATCH] feat(protos): Add `LiveMetadata` protobuf (#18) --- .../video_streaming/live_metadata.ts | 230 ++++++++++++++++++ protos/video_streaming/live_metadata.proto | 13 + src/utils/Protos.ts | 3 +- 3 files changed, 245 insertions(+), 1 deletion(-) create mode 100644 protos/generated/video_streaming/live_metadata.ts create mode 100644 protos/video_streaming/live_metadata.proto diff --git a/protos/generated/video_streaming/live_metadata.ts b/protos/generated/video_streaming/live_metadata.ts new file mode 100644 index 0000000..cb072a8 --- /dev/null +++ b/protos/generated/video_streaming/live_metadata.ts @@ -0,0 +1,230 @@ +// Code generated by protoc-gen-ts_proto. DO NOT EDIT. +// versions: +// protoc-gen-ts_proto v2.2.0 +// protoc v5.28.0 +// source: video_streaming/live_metadata.proto + +/* eslint-disable */ +import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire"; + +export const protobufPackage = "video_streaming"; + +export interface LiveMetadata { + headSequenceNumber?: number | undefined; + headTimeMs?: number | undefined; + wallTimeMs?: number | undefined; + field10?: number | undefined; + field12?: number | undefined; + field13?: number | undefined; + headTimeUsec?: number | undefined; + field15?: number | undefined; +} + +function createBaseLiveMetadata(): LiveMetadata { + return { + headSequenceNumber: 0, + headTimeMs: 0, + wallTimeMs: 0, + field10: 0, + field12: 0, + field13: 0, + headTimeUsec: 0, + field15: 0, + }; +} + +export const LiveMetadata: MessageFns = { + encode(message: LiveMetadata, writer: BinaryWriter = new BinaryWriter()): BinaryWriter { + if (message.headSequenceNumber !== undefined && message.headSequenceNumber !== 0) { + writer.uint32(24).uint32(message.headSequenceNumber); + } + if (message.headTimeMs !== undefined && message.headTimeMs !== 0) { + writer.uint32(32).uint64(message.headTimeMs); + } + if (message.wallTimeMs !== undefined && message.wallTimeMs !== 0) { + writer.uint32(40).uint64(message.wallTimeMs); + } + if (message.field10 !== undefined && message.field10 !== 0) { + writer.uint32(80).uint64(message.field10); + } + if (message.field12 !== undefined && message.field12 !== 0) { + writer.uint32(96).uint64(message.field12); + } + if (message.field13 !== undefined && message.field13 !== 0) { + writer.uint32(104).uint64(message.field13); + } + if (message.headTimeUsec !== undefined && message.headTimeUsec !== 0) { + writer.uint32(112).uint64(message.headTimeUsec); + } + if (message.field15 !== undefined && message.field15 !== 0) { + writer.uint32(120).uint64(message.field15); + } + return writer; + }, + + decode(input: BinaryReader | Uint8Array, length?: number): LiveMetadata { + const reader = input instanceof BinaryReader ? input : new BinaryReader(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseLiveMetadata(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 3: + if (tag !== 24) { + break; + } + + message.headSequenceNumber = reader.uint32(); + continue; + case 4: + if (tag !== 32) { + break; + } + + message.headTimeMs = longToNumber(reader.uint64()); + continue; + case 5: + if (tag !== 40) { + break; + } + + message.wallTimeMs = longToNumber(reader.uint64()); + continue; + case 10: + if (tag !== 80) { + break; + } + + message.field10 = longToNumber(reader.uint64()); + continue; + case 12: + if (tag !== 96) { + break; + } + + message.field12 = longToNumber(reader.uint64()); + continue; + case 13: + if (tag !== 104) { + break; + } + + message.field13 = longToNumber(reader.uint64()); + continue; + case 14: + if (tag !== 112) { + break; + } + + message.headTimeUsec = longToNumber(reader.uint64()); + continue; + case 15: + if (tag !== 120) { + break; + } + + message.field15 = longToNumber(reader.uint64()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skip(tag & 7); + } + return message; + }, + + fromJSON(object: any): LiveMetadata { + return { + headSequenceNumber: isSet(object.headSequenceNumber) ? globalThis.Number(object.headSequenceNumber) : 0, + headTimeMs: isSet(object.headTimeMs) ? globalThis.Number(object.headTimeMs) : 0, + wallTimeMs: isSet(object.wallTimeMs) ? globalThis.Number(object.wallTimeMs) : 0, + field10: isSet(object.field10) ? globalThis.Number(object.field10) : 0, + field12: isSet(object.field12) ? globalThis.Number(object.field12) : 0, + field13: isSet(object.field13) ? globalThis.Number(object.field13) : 0, + headTimeUsec: isSet(object.headTimeUsec) ? globalThis.Number(object.headTimeUsec) : 0, + field15: isSet(object.field15) ? globalThis.Number(object.field15) : 0, + }; + }, + + toJSON(message: LiveMetadata): unknown { + const obj: any = {}; + if (message.headSequenceNumber !== undefined && message.headSequenceNumber !== 0) { + obj.headSequenceNumber = Math.round(message.headSequenceNumber); + } + if (message.headTimeMs !== undefined && message.headTimeMs !== 0) { + obj.headTimeMs = Math.round(message.headTimeMs); + } + if (message.wallTimeMs !== undefined && message.wallTimeMs !== 0) { + obj.wallTimeMs = Math.round(message.wallTimeMs); + } + if (message.field10 !== undefined && message.field10 !== 0) { + obj.field10 = Math.round(message.field10); + } + if (message.field12 !== undefined && message.field12 !== 0) { + obj.field12 = Math.round(message.field12); + } + if (message.field13 !== undefined && message.field13 !== 0) { + obj.field13 = Math.round(message.field13); + } + if (message.headTimeUsec !== undefined && message.headTimeUsec !== 0) { + obj.headTimeUsec = Math.round(message.headTimeUsec); + } + if (message.field15 !== undefined && message.field15 !== 0) { + obj.field15 = Math.round(message.field15); + } + return obj; + }, + + create, I>>(base?: I): LiveMetadata { + return LiveMetadata.fromPartial(base ?? ({} as any)); + }, + fromPartial, I>>(object: I): LiveMetadata { + const message = createBaseLiveMetadata(); + message.headSequenceNumber = object.headSequenceNumber ?? 0; + message.headTimeMs = object.headTimeMs ?? 0; + message.wallTimeMs = object.wallTimeMs ?? 0; + message.field10 = object.field10 ?? 0; + message.field12 = object.field12 ?? 0; + message.field13 = object.field13 ?? 0; + message.headTimeUsec = object.headTimeUsec ?? 0; + message.field15 = object.field15 ?? 0; + return message; + }, +}; + +type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; + +export type DeepPartial = T extends Builtin ? T + : T extends globalThis.Array ? globalThis.Array> + : T extends ReadonlyArray ? ReadonlyArray> + : T extends {} ? { [K in keyof T]?: DeepPartial } + : Partial; + +type KeysOfUnion = T extends T ? keyof T : never; +export type Exact = P extends Builtin ? P + : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; + +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; +} + +function isSet(value: any): boolean { + return value !== null && value !== undefined; +} + +export interface MessageFns { + encode(message: T, writer?: BinaryWriter): BinaryWriter; + decode(input: BinaryReader | Uint8Array, length?: number): T; + fromJSON(object: any): T; + toJSON(message: T): unknown; + create, I>>(base?: I): T; + fromPartial, I>>(object: I): T; +} diff --git a/protos/video_streaming/live_metadata.proto b/protos/video_streaming/live_metadata.proto new file mode 100644 index 0000000..3a01277 --- /dev/null +++ b/protos/video_streaming/live_metadata.proto @@ -0,0 +1,13 @@ +syntax = "proto2"; +package video_streaming; + +message LiveMetadata { + optional uint32 head_sequence_number = 3; + optional uint64 head_time_ms = 4; + optional uint64 wall_time_ms = 5; + optional uint64 field10 = 10; + optional uint64 field12 = 12; + optional uint64 field13 = 13; + optional uint64 head_time_usec = 14; + optional uint64 field15 = 15; +} \ No newline at end of file diff --git a/src/utils/Protos.ts b/src/utils/Protos.ts index af54fdc..06cd73e 100644 --- a/src/utils/Protos.ts +++ b/src/utils/Protos.ts @@ -19,4 +19,5 @@ export { ClientAbrState } from '../../protos/generated/video_streaming/client_ab export { StreamerContext } from '../../protos/generated/video_streaming/streamer_context.js'; export { ProxyStatus } from '../../protos/generated/video_streaming/proxy_status.js'; export { MediaCapabilities } from '../../protos/generated/video_streaming/media_capabilities.js'; -export { CryptoParams } from '../../protos/generated/video_streaming/crypto_params.js'; \ No newline at end of file +export { CryptoParams } from '../../protos/generated/video_streaming/crypto_params.js'; +export { LiveMetadata } from '../../protos/generated/video_streaming/live_metadata.js'; \ No newline at end of file