livekit-client 0.18.4-RC7 → 0.18.5

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.
Files changed (127) hide show
  1. package/README.md +2 -5
  2. package/dist/api/RequestQueue.d.ts +13 -12
  3. package/dist/api/RequestQueue.d.ts.map +1 -0
  4. package/dist/api/SignalClient.d.ts +67 -66
  5. package/dist/api/SignalClient.d.ts.map +1 -0
  6. package/dist/connect.d.ts +24 -23
  7. package/dist/connect.d.ts.map +1 -0
  8. package/dist/index.d.ts +27 -26
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/livekit-client.esm.mjs +638 -517
  11. package/dist/livekit-client.esm.mjs.map +1 -1
  12. package/dist/livekit-client.umd.js +1 -1
  13. package/dist/livekit-client.umd.js.map +1 -1
  14. package/dist/logger.d.ts +26 -25
  15. package/dist/logger.d.ts.map +1 -0
  16. package/dist/options.d.ts +128 -127
  17. package/dist/options.d.ts.map +1 -0
  18. package/dist/proto/google/protobuf/timestamp.d.ts +133 -132
  19. package/dist/proto/google/protobuf/timestamp.d.ts.map +1 -0
  20. package/dist/proto/livekit_models.d.ts +876 -875
  21. package/dist/proto/livekit_models.d.ts.map +1 -0
  22. package/dist/proto/livekit_rtc.d.ts +3904 -3903
  23. package/dist/proto/livekit_rtc.d.ts.map +1 -0
  24. package/dist/room/DeviceManager.d.ts +8 -7
  25. package/dist/room/DeviceManager.d.ts.map +1 -0
  26. package/dist/room/PCTransport.d.ts +16 -15
  27. package/dist/room/PCTransport.d.ts.map +1 -0
  28. package/dist/room/RTCEngine.d.ts +67 -66
  29. package/dist/room/RTCEngine.d.ts.map +1 -0
  30. package/dist/room/Room.d.ts +166 -165
  31. package/dist/room/Room.d.ts.map +1 -0
  32. package/dist/room/errors.d.ts +29 -28
  33. package/dist/room/errors.d.ts.map +1 -0
  34. package/dist/room/events.d.ts +391 -390
  35. package/dist/room/events.d.ts.map +1 -0
  36. package/dist/room/participant/LocalParticipant.d.ts +126 -125
  37. package/dist/room/participant/LocalParticipant.d.ts.map +1 -0
  38. package/dist/room/participant/Participant.d.ts +94 -93
  39. package/dist/room/participant/Participant.d.ts.map +1 -0
  40. package/dist/room/participant/ParticipantTrackPermission.d.ts +26 -25
  41. package/dist/room/participant/ParticipantTrackPermission.d.ts.map +1 -0
  42. package/dist/room/participant/RemoteParticipant.d.ts +40 -39
  43. package/dist/room/participant/RemoteParticipant.d.ts.map +1 -0
  44. package/dist/room/participant/publishUtils.d.ts +18 -17
  45. package/dist/room/participant/publishUtils.d.ts.map +1 -0
  46. package/dist/room/stats.d.ts +66 -65
  47. package/dist/room/stats.d.ts.map +1 -0
  48. package/dist/room/track/LocalAudioTrack.d.ts +20 -19
  49. package/dist/room/track/LocalAudioTrack.d.ts.map +1 -0
  50. package/dist/room/track/LocalTrack.d.ts +28 -27
  51. package/dist/room/track/LocalTrack.d.ts.map +1 -0
  52. package/dist/room/track/LocalTrackPublication.d.ts +38 -37
  53. package/dist/room/track/LocalTrackPublication.d.ts.map +1 -0
  54. package/dist/room/track/LocalVideoTrack.d.ts +31 -30
  55. package/dist/room/track/LocalVideoTrack.d.ts.map +1 -0
  56. package/dist/room/track/RemoteAudioTrack.d.ts +20 -19
  57. package/dist/room/track/RemoteAudioTrack.d.ts.map +1 -0
  58. package/dist/room/track/RemoteTrack.d.ts +16 -15
  59. package/dist/room/track/RemoteTrack.d.ts.map +1 -0
  60. package/dist/room/track/RemoteTrackPublication.d.ts +51 -50
  61. package/dist/room/track/RemoteTrackPublication.d.ts.map +1 -0
  62. package/dist/room/track/RemoteVideoTrack.d.ts +29 -27
  63. package/dist/room/track/RemoteVideoTrack.d.ts.map +1 -0
  64. package/dist/room/track/Track.d.ts +105 -100
  65. package/dist/room/track/Track.d.ts.map +1 -0
  66. package/dist/room/track/TrackPublication.d.ts +50 -49
  67. package/dist/room/track/TrackPublication.d.ts.map +1 -0
  68. package/dist/room/track/create.d.ts +24 -23
  69. package/dist/room/track/create.d.ts.map +1 -0
  70. package/dist/room/track/defaults.d.ts +5 -4
  71. package/dist/room/track/defaults.d.ts.map +1 -0
  72. package/dist/room/track/options.d.ts +232 -222
  73. package/dist/room/track/options.d.ts.map +1 -0
  74. package/dist/room/track/types.d.ts +19 -18
  75. package/dist/room/track/types.d.ts.map +1 -0
  76. package/dist/room/track/utils.d.ts +14 -13
  77. package/dist/room/track/utils.d.ts.map +1 -0
  78. package/dist/room/utils.d.ts +17 -15
  79. package/dist/room/utils.d.ts.map +1 -0
  80. package/dist/test/mocks.d.ts +12 -11
  81. package/dist/test/mocks.d.ts.map +1 -0
  82. package/dist/version.d.ts +3 -2
  83. package/dist/version.d.ts.map +1 -0
  84. package/package.json +4 -5
  85. package/src/api/RequestQueue.ts +53 -0
  86. package/src/api/SignalClient.ts +497 -0
  87. package/src/connect.ts +98 -0
  88. package/src/index.ts +49 -0
  89. package/src/logger.ts +56 -0
  90. package/src/options.ts +156 -0
  91. package/src/proto/google/protobuf/timestamp.ts +216 -0
  92. package/src/proto/livekit_models.ts +2456 -0
  93. package/src/proto/livekit_rtc.ts +2859 -0
  94. package/src/room/DeviceManager.ts +80 -0
  95. package/src/room/PCTransport.ts +88 -0
  96. package/src/room/RTCEngine.ts +695 -0
  97. package/src/room/Room.ts +970 -0
  98. package/src/room/errors.ts +65 -0
  99. package/src/room/events.ts +438 -0
  100. package/src/room/participant/LocalParticipant.ts +779 -0
  101. package/src/room/participant/Participant.ts +287 -0
  102. package/src/room/participant/ParticipantTrackPermission.ts +42 -0
  103. package/src/room/participant/RemoteParticipant.ts +263 -0
  104. package/src/room/participant/publishUtils.test.ts +144 -0
  105. package/src/room/participant/publishUtils.ts +258 -0
  106. package/src/room/stats.ts +134 -0
  107. package/src/room/track/LocalAudioTrack.ts +134 -0
  108. package/src/room/track/LocalTrack.ts +229 -0
  109. package/src/room/track/LocalTrackPublication.ts +87 -0
  110. package/src/room/track/LocalVideoTrack.test.ts +72 -0
  111. package/src/room/track/LocalVideoTrack.ts +295 -0
  112. package/src/room/track/RemoteAudioTrack.ts +86 -0
  113. package/src/room/track/RemoteTrack.ts +62 -0
  114. package/src/room/track/RemoteTrackPublication.ts +207 -0
  115. package/src/room/track/RemoteVideoTrack.ts +249 -0
  116. package/src/room/track/Track.ts +365 -0
  117. package/src/room/track/TrackPublication.ts +120 -0
  118. package/src/room/track/create.ts +122 -0
  119. package/src/room/track/defaults.ts +26 -0
  120. package/src/room/track/options.ts +292 -0
  121. package/src/room/track/types.ts +20 -0
  122. package/src/room/track/utils.test.ts +110 -0
  123. package/src/room/track/utils.ts +113 -0
  124. package/src/room/utils.ts +115 -0
  125. package/src/test/mocks.ts +17 -0
  126. package/src/version.ts +2 -0
  127. package/CHANGELOG.md +0 -5
@@ -0,0 +1,2456 @@
1
+ /* eslint-disable */
2
+ import Long from 'long';
3
+ import * as _m0 from 'protobufjs/minimal';
4
+ import { Timestamp } from './google/protobuf/timestamp';
5
+
6
+ export const protobufPackage = 'livekit';
7
+
8
+ export enum TrackType {
9
+ AUDIO = 0,
10
+ VIDEO = 1,
11
+ DATA = 2,
12
+ UNRECOGNIZED = -1,
13
+ }
14
+
15
+ export function trackTypeFromJSON(object: any): TrackType {
16
+ switch (object) {
17
+ case 0:
18
+ case 'AUDIO':
19
+ return TrackType.AUDIO;
20
+ case 1:
21
+ case 'VIDEO':
22
+ return TrackType.VIDEO;
23
+ case 2:
24
+ case 'DATA':
25
+ return TrackType.DATA;
26
+ case -1:
27
+ case 'UNRECOGNIZED':
28
+ default:
29
+ return TrackType.UNRECOGNIZED;
30
+ }
31
+ }
32
+
33
+ export function trackTypeToJSON(object: TrackType): string {
34
+ switch (object) {
35
+ case TrackType.AUDIO:
36
+ return 'AUDIO';
37
+ case TrackType.VIDEO:
38
+ return 'VIDEO';
39
+ case TrackType.DATA:
40
+ return 'DATA';
41
+ default:
42
+ return 'UNKNOWN';
43
+ }
44
+ }
45
+
46
+ export enum TrackSource {
47
+ UNKNOWN = 0,
48
+ CAMERA = 1,
49
+ MICROPHONE = 2,
50
+ SCREEN_SHARE = 3,
51
+ SCREEN_SHARE_AUDIO = 4,
52
+ UNRECOGNIZED = -1,
53
+ }
54
+
55
+ export function trackSourceFromJSON(object: any): TrackSource {
56
+ switch (object) {
57
+ case 0:
58
+ case 'UNKNOWN':
59
+ return TrackSource.UNKNOWN;
60
+ case 1:
61
+ case 'CAMERA':
62
+ return TrackSource.CAMERA;
63
+ case 2:
64
+ case 'MICROPHONE':
65
+ return TrackSource.MICROPHONE;
66
+ case 3:
67
+ case 'SCREEN_SHARE':
68
+ return TrackSource.SCREEN_SHARE;
69
+ case 4:
70
+ case 'SCREEN_SHARE_AUDIO':
71
+ return TrackSource.SCREEN_SHARE_AUDIO;
72
+ case -1:
73
+ case 'UNRECOGNIZED':
74
+ default:
75
+ return TrackSource.UNRECOGNIZED;
76
+ }
77
+ }
78
+
79
+ export function trackSourceToJSON(object: TrackSource): string {
80
+ switch (object) {
81
+ case TrackSource.UNKNOWN:
82
+ return 'UNKNOWN';
83
+ case TrackSource.CAMERA:
84
+ return 'CAMERA';
85
+ case TrackSource.MICROPHONE:
86
+ return 'MICROPHONE';
87
+ case TrackSource.SCREEN_SHARE:
88
+ return 'SCREEN_SHARE';
89
+ case TrackSource.SCREEN_SHARE_AUDIO:
90
+ return 'SCREEN_SHARE_AUDIO';
91
+ default:
92
+ return 'UNKNOWN';
93
+ }
94
+ }
95
+
96
+ export enum VideoQuality {
97
+ LOW = 0,
98
+ MEDIUM = 1,
99
+ HIGH = 2,
100
+ OFF = 3,
101
+ UNRECOGNIZED = -1,
102
+ }
103
+
104
+ export function videoQualityFromJSON(object: any): VideoQuality {
105
+ switch (object) {
106
+ case 0:
107
+ case 'LOW':
108
+ return VideoQuality.LOW;
109
+ case 1:
110
+ case 'MEDIUM':
111
+ return VideoQuality.MEDIUM;
112
+ case 2:
113
+ case 'HIGH':
114
+ return VideoQuality.HIGH;
115
+ case 3:
116
+ case 'OFF':
117
+ return VideoQuality.OFF;
118
+ case -1:
119
+ case 'UNRECOGNIZED':
120
+ default:
121
+ return VideoQuality.UNRECOGNIZED;
122
+ }
123
+ }
124
+
125
+ export function videoQualityToJSON(object: VideoQuality): string {
126
+ switch (object) {
127
+ case VideoQuality.LOW:
128
+ return 'LOW';
129
+ case VideoQuality.MEDIUM:
130
+ return 'MEDIUM';
131
+ case VideoQuality.HIGH:
132
+ return 'HIGH';
133
+ case VideoQuality.OFF:
134
+ return 'OFF';
135
+ default:
136
+ return 'UNKNOWN';
137
+ }
138
+ }
139
+
140
+ export enum ConnectionQuality {
141
+ POOR = 0,
142
+ GOOD = 1,
143
+ EXCELLENT = 2,
144
+ UNRECOGNIZED = -1,
145
+ }
146
+
147
+ export function connectionQualityFromJSON(object: any): ConnectionQuality {
148
+ switch (object) {
149
+ case 0:
150
+ case 'POOR':
151
+ return ConnectionQuality.POOR;
152
+ case 1:
153
+ case 'GOOD':
154
+ return ConnectionQuality.GOOD;
155
+ case 2:
156
+ case 'EXCELLENT':
157
+ return ConnectionQuality.EXCELLENT;
158
+ case -1:
159
+ case 'UNRECOGNIZED':
160
+ default:
161
+ return ConnectionQuality.UNRECOGNIZED;
162
+ }
163
+ }
164
+
165
+ export function connectionQualityToJSON(object: ConnectionQuality): string {
166
+ switch (object) {
167
+ case ConnectionQuality.POOR:
168
+ return 'POOR';
169
+ case ConnectionQuality.GOOD:
170
+ return 'GOOD';
171
+ case ConnectionQuality.EXCELLENT:
172
+ return 'EXCELLENT';
173
+ default:
174
+ return 'UNKNOWN';
175
+ }
176
+ }
177
+
178
+ export enum ClientConfigSetting {
179
+ UNSET = 0,
180
+ DISABLED = 1,
181
+ ENABLED = 2,
182
+ UNRECOGNIZED = -1,
183
+ }
184
+
185
+ export function clientConfigSettingFromJSON(object: any): ClientConfigSetting {
186
+ switch (object) {
187
+ case 0:
188
+ case 'UNSET':
189
+ return ClientConfigSetting.UNSET;
190
+ case 1:
191
+ case 'DISABLED':
192
+ return ClientConfigSetting.DISABLED;
193
+ case 2:
194
+ case 'ENABLED':
195
+ return ClientConfigSetting.ENABLED;
196
+ case -1:
197
+ case 'UNRECOGNIZED':
198
+ default:
199
+ return ClientConfigSetting.UNRECOGNIZED;
200
+ }
201
+ }
202
+
203
+ export function clientConfigSettingToJSON(object: ClientConfigSetting): string {
204
+ switch (object) {
205
+ case ClientConfigSetting.UNSET:
206
+ return 'UNSET';
207
+ case ClientConfigSetting.DISABLED:
208
+ return 'DISABLED';
209
+ case ClientConfigSetting.ENABLED:
210
+ return 'ENABLED';
211
+ default:
212
+ return 'UNKNOWN';
213
+ }
214
+ }
215
+
216
+ export interface Room {
217
+ sid: string;
218
+ name: string;
219
+ emptyTimeout: number;
220
+ maxParticipants: number;
221
+ creationTime: number;
222
+ turnPassword: string;
223
+ enabledCodecs: Codec[];
224
+ metadata: string;
225
+ numParticipants: number;
226
+ activeRecording: boolean;
227
+ }
228
+
229
+ export interface Codec {
230
+ mime: string;
231
+ fmtpLine: string;
232
+ }
233
+
234
+ export interface ParticipantPermission {
235
+ /** allow participant to subscribe to other tracks in the room */
236
+ canSubscribe: boolean;
237
+ /** allow participant to publish new tracks to room */
238
+ canPublish: boolean;
239
+ /** allow participant to publish data */
240
+ canPublishData: boolean;
241
+ /** indicates that it's hidden to others */
242
+ hidden: boolean;
243
+ /** indicates it's a recorder instance */
244
+ recorder: boolean;
245
+ }
246
+
247
+ export interface ParticipantInfo {
248
+ sid: string;
249
+ identity: string;
250
+ state: ParticipantInfo_State;
251
+ tracks: TrackInfo[];
252
+ metadata: string;
253
+ /** timestamp when participant joined room, in seconds */
254
+ joinedAt: number;
255
+ name: string;
256
+ version: number;
257
+ permission?: ParticipantPermission;
258
+ region: string;
259
+ /**
260
+ * indicates the participant has an active publisher connection
261
+ * and can publish to the server
262
+ */
263
+ isPublisher: boolean;
264
+ }
265
+
266
+ export enum ParticipantInfo_State {
267
+ /** JOINING - websocket' connected, but not offered yet */
268
+ JOINING = 0,
269
+ /** JOINED - server received client offer */
270
+ JOINED = 1,
271
+ /** ACTIVE - ICE connectivity established */
272
+ ACTIVE = 2,
273
+ /** DISCONNECTED - WS disconnected */
274
+ DISCONNECTED = 3,
275
+ UNRECOGNIZED = -1,
276
+ }
277
+
278
+ export function participantInfo_StateFromJSON(object: any): ParticipantInfo_State {
279
+ switch (object) {
280
+ case 0:
281
+ case 'JOINING':
282
+ return ParticipantInfo_State.JOINING;
283
+ case 1:
284
+ case 'JOINED':
285
+ return ParticipantInfo_State.JOINED;
286
+ case 2:
287
+ case 'ACTIVE':
288
+ return ParticipantInfo_State.ACTIVE;
289
+ case 3:
290
+ case 'DISCONNECTED':
291
+ return ParticipantInfo_State.DISCONNECTED;
292
+ case -1:
293
+ case 'UNRECOGNIZED':
294
+ default:
295
+ return ParticipantInfo_State.UNRECOGNIZED;
296
+ }
297
+ }
298
+
299
+ export function participantInfo_StateToJSON(object: ParticipantInfo_State): string {
300
+ switch (object) {
301
+ case ParticipantInfo_State.JOINING:
302
+ return 'JOINING';
303
+ case ParticipantInfo_State.JOINED:
304
+ return 'JOINED';
305
+ case ParticipantInfo_State.ACTIVE:
306
+ return 'ACTIVE';
307
+ case ParticipantInfo_State.DISCONNECTED:
308
+ return 'DISCONNECTED';
309
+ default:
310
+ return 'UNKNOWN';
311
+ }
312
+ }
313
+
314
+ export interface TrackInfo {
315
+ sid: string;
316
+ type: TrackType;
317
+ name: string;
318
+ muted: boolean;
319
+ /**
320
+ * original width of video (unset for audio)
321
+ * clients may receive a lower resolution version with simulcast
322
+ */
323
+ width: number;
324
+ /** original height of video (unset for audio) */
325
+ height: number;
326
+ /** true if track is simulcasted */
327
+ simulcast: boolean;
328
+ /** true if DTX (Discontinuous Transmission) is disabled for audio */
329
+ disableDtx: boolean;
330
+ /** source of media */
331
+ source: TrackSource;
332
+ layers: VideoLayer[];
333
+ /** mime type of codec */
334
+ mimeType: string;
335
+ mid: string;
336
+ }
337
+
338
+ /** provide information about available spatial layers */
339
+ export interface VideoLayer {
340
+ /** for tracks with a single layer, this should be HIGH */
341
+ quality: VideoQuality;
342
+ width: number;
343
+ height: number;
344
+ /** target bitrate, server will measure actual */
345
+ bitrate: number;
346
+ ssrc: number;
347
+ }
348
+
349
+ /** new DataPacket API */
350
+ export interface DataPacket {
351
+ kind: DataPacket_Kind;
352
+ user?: UserPacket | undefined;
353
+ speaker?: ActiveSpeakerUpdate | undefined;
354
+ }
355
+
356
+ export enum DataPacket_Kind {
357
+ RELIABLE = 0,
358
+ LOSSY = 1,
359
+ UNRECOGNIZED = -1,
360
+ }
361
+
362
+ export function dataPacket_KindFromJSON(object: any): DataPacket_Kind {
363
+ switch (object) {
364
+ case 0:
365
+ case 'RELIABLE':
366
+ return DataPacket_Kind.RELIABLE;
367
+ case 1:
368
+ case 'LOSSY':
369
+ return DataPacket_Kind.LOSSY;
370
+ case -1:
371
+ case 'UNRECOGNIZED':
372
+ default:
373
+ return DataPacket_Kind.UNRECOGNIZED;
374
+ }
375
+ }
376
+
377
+ export function dataPacket_KindToJSON(object: DataPacket_Kind): string {
378
+ switch (object) {
379
+ case DataPacket_Kind.RELIABLE:
380
+ return 'RELIABLE';
381
+ case DataPacket_Kind.LOSSY:
382
+ return 'LOSSY';
383
+ default:
384
+ return 'UNKNOWN';
385
+ }
386
+ }
387
+
388
+ export interface ActiveSpeakerUpdate {
389
+ speakers: SpeakerInfo[];
390
+ }
391
+
392
+ export interface SpeakerInfo {
393
+ sid: string;
394
+ /** audio level, 0-1.0, 1 is loudest */
395
+ level: number;
396
+ /** true if speaker is currently active */
397
+ active: boolean;
398
+ }
399
+
400
+ export interface UserPacket {
401
+ /** participant ID of user that sent the message */
402
+ participantSid: string;
403
+ /** user defined payload */
404
+ payload: Uint8Array;
405
+ /** the ID of the participants who will receive the message (the message will be sent to all the people in the room if this variable is empty) */
406
+ destinationSids: string[];
407
+ }
408
+
409
+ export interface ParticipantTracks {
410
+ /** participant ID of participant to whom the tracks belong */
411
+ participantSid: string;
412
+ trackSids: string[];
413
+ }
414
+
415
+ /** details about the client */
416
+ export interface ClientInfo {
417
+ sdk: ClientInfo_SDK;
418
+ version: string;
419
+ protocol: number;
420
+ os: string;
421
+ osVersion: string;
422
+ deviceModel: string;
423
+ browser: string;
424
+ browserVersion: string;
425
+ address: string;
426
+ }
427
+
428
+ export enum ClientInfo_SDK {
429
+ UNKNOWN = 0,
430
+ JS = 1,
431
+ SWIFT = 2,
432
+ ANDROID = 3,
433
+ FLUTTER = 4,
434
+ GO = 5,
435
+ UNITY = 6,
436
+ UNRECOGNIZED = -1,
437
+ }
438
+
439
+ export function clientInfo_SDKFromJSON(object: any): ClientInfo_SDK {
440
+ switch (object) {
441
+ case 0:
442
+ case 'UNKNOWN':
443
+ return ClientInfo_SDK.UNKNOWN;
444
+ case 1:
445
+ case 'JS':
446
+ return ClientInfo_SDK.JS;
447
+ case 2:
448
+ case 'SWIFT':
449
+ return ClientInfo_SDK.SWIFT;
450
+ case 3:
451
+ case 'ANDROID':
452
+ return ClientInfo_SDK.ANDROID;
453
+ case 4:
454
+ case 'FLUTTER':
455
+ return ClientInfo_SDK.FLUTTER;
456
+ case 5:
457
+ case 'GO':
458
+ return ClientInfo_SDK.GO;
459
+ case 6:
460
+ case 'UNITY':
461
+ return ClientInfo_SDK.UNITY;
462
+ case -1:
463
+ case 'UNRECOGNIZED':
464
+ default:
465
+ return ClientInfo_SDK.UNRECOGNIZED;
466
+ }
467
+ }
468
+
469
+ export function clientInfo_SDKToJSON(object: ClientInfo_SDK): string {
470
+ switch (object) {
471
+ case ClientInfo_SDK.UNKNOWN:
472
+ return 'UNKNOWN';
473
+ case ClientInfo_SDK.JS:
474
+ return 'JS';
475
+ case ClientInfo_SDK.SWIFT:
476
+ return 'SWIFT';
477
+ case ClientInfo_SDK.ANDROID:
478
+ return 'ANDROID';
479
+ case ClientInfo_SDK.FLUTTER:
480
+ return 'FLUTTER';
481
+ case ClientInfo_SDK.GO:
482
+ return 'GO';
483
+ case ClientInfo_SDK.UNITY:
484
+ return 'UNITY';
485
+ default:
486
+ return 'UNKNOWN';
487
+ }
488
+ }
489
+
490
+ /** server provided client configuration */
491
+ export interface ClientConfiguration {
492
+ video?: VideoConfiguration;
493
+ screen?: VideoConfiguration;
494
+ resumeConnection: ClientConfigSetting;
495
+ }
496
+
497
+ export interface VideoConfiguration {
498
+ hardwareEncoder: ClientConfigSetting;
499
+ }
500
+
501
+ export interface RTPStats {
502
+ startTime?: Date;
503
+ endTime?: Date;
504
+ duration: number;
505
+ packets: number;
506
+ packetRate: number;
507
+ bytes: number;
508
+ bitrate: number;
509
+ packetsLost: number;
510
+ packetLossRate: number;
511
+ packetLossPercentage: number;
512
+ packetsDuplicate: number;
513
+ packetDuplicateRate: number;
514
+ bytesDuplicate: number;
515
+ bitrateDuplicate: number;
516
+ packetsPadding: number;
517
+ packetPaddingRate: number;
518
+ bytesPadding: number;
519
+ bitratePadding: number;
520
+ packetsOutOfOrder: number;
521
+ frames: number;
522
+ frameRate: number;
523
+ jitterCurrent: number;
524
+ jitterMax: number;
525
+ gapHistogram: { [key: number]: number };
526
+ nacks: number;
527
+ nackMisses: number;
528
+ plis: number;
529
+ lastPli?: Date;
530
+ firs: number;
531
+ lastFir?: Date;
532
+ rttCurrent: number;
533
+ rttMax: number;
534
+ keyFrames: number;
535
+ lastKeyFrame?: Date;
536
+ layerLockPlis: number;
537
+ lastLayerLockPli?: Date;
538
+ }
539
+
540
+ export interface RTPStats_GapHistogramEntry {
541
+ key: number;
542
+ value: number;
543
+ }
544
+
545
+ function createBaseRoom(): Room {
546
+ return {
547
+ sid: '',
548
+ name: '',
549
+ emptyTimeout: 0,
550
+ maxParticipants: 0,
551
+ creationTime: 0,
552
+ turnPassword: '',
553
+ enabledCodecs: [],
554
+ metadata: '',
555
+ numParticipants: 0,
556
+ activeRecording: false,
557
+ };
558
+ }
559
+
560
+ export const Room = {
561
+ encode(message: Room, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
562
+ if (message.sid !== '') {
563
+ writer.uint32(10).string(message.sid);
564
+ }
565
+ if (message.name !== '') {
566
+ writer.uint32(18).string(message.name);
567
+ }
568
+ if (message.emptyTimeout !== 0) {
569
+ writer.uint32(24).uint32(message.emptyTimeout);
570
+ }
571
+ if (message.maxParticipants !== 0) {
572
+ writer.uint32(32).uint32(message.maxParticipants);
573
+ }
574
+ if (message.creationTime !== 0) {
575
+ writer.uint32(40).int64(message.creationTime);
576
+ }
577
+ if (message.turnPassword !== '') {
578
+ writer.uint32(50).string(message.turnPassword);
579
+ }
580
+ for (const v of message.enabledCodecs) {
581
+ Codec.encode(v!, writer.uint32(58).fork()).ldelim();
582
+ }
583
+ if (message.metadata !== '') {
584
+ writer.uint32(66).string(message.metadata);
585
+ }
586
+ if (message.numParticipants !== 0) {
587
+ writer.uint32(72).uint32(message.numParticipants);
588
+ }
589
+ if (message.activeRecording === true) {
590
+ writer.uint32(80).bool(message.activeRecording);
591
+ }
592
+ return writer;
593
+ },
594
+
595
+ decode(input: _m0.Reader | Uint8Array, length?: number): Room {
596
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
597
+ let end = length === undefined ? reader.len : reader.pos + length;
598
+ const message = createBaseRoom();
599
+ while (reader.pos < end) {
600
+ const tag = reader.uint32();
601
+ switch (tag >>> 3) {
602
+ case 1:
603
+ message.sid = reader.string();
604
+ break;
605
+ case 2:
606
+ message.name = reader.string();
607
+ break;
608
+ case 3:
609
+ message.emptyTimeout = reader.uint32();
610
+ break;
611
+ case 4:
612
+ message.maxParticipants = reader.uint32();
613
+ break;
614
+ case 5:
615
+ message.creationTime = longToNumber(reader.int64() as Long);
616
+ break;
617
+ case 6:
618
+ message.turnPassword = reader.string();
619
+ break;
620
+ case 7:
621
+ message.enabledCodecs.push(Codec.decode(reader, reader.uint32()));
622
+ break;
623
+ case 8:
624
+ message.metadata = reader.string();
625
+ break;
626
+ case 9:
627
+ message.numParticipants = reader.uint32();
628
+ break;
629
+ case 10:
630
+ message.activeRecording = reader.bool();
631
+ break;
632
+ default:
633
+ reader.skipType(tag & 7);
634
+ break;
635
+ }
636
+ }
637
+ return message;
638
+ },
639
+
640
+ fromJSON(object: any): Room {
641
+ return {
642
+ sid: isSet(object.sid) ? String(object.sid) : '',
643
+ name: isSet(object.name) ? String(object.name) : '',
644
+ emptyTimeout: isSet(object.emptyTimeout) ? Number(object.emptyTimeout) : 0,
645
+ maxParticipants: isSet(object.maxParticipants) ? Number(object.maxParticipants) : 0,
646
+ creationTime: isSet(object.creationTime) ? Number(object.creationTime) : 0,
647
+ turnPassword: isSet(object.turnPassword) ? String(object.turnPassword) : '',
648
+ enabledCodecs: Array.isArray(object?.enabledCodecs)
649
+ ? object.enabledCodecs.map((e: any) => Codec.fromJSON(e))
650
+ : [],
651
+ metadata: isSet(object.metadata) ? String(object.metadata) : '',
652
+ numParticipants: isSet(object.numParticipants) ? Number(object.numParticipants) : 0,
653
+ activeRecording: isSet(object.activeRecording) ? Boolean(object.activeRecording) : false,
654
+ };
655
+ },
656
+
657
+ toJSON(message: Room): unknown {
658
+ const obj: any = {};
659
+ message.sid !== undefined && (obj.sid = message.sid);
660
+ message.name !== undefined && (obj.name = message.name);
661
+ message.emptyTimeout !== undefined && (obj.emptyTimeout = Math.round(message.emptyTimeout));
662
+ message.maxParticipants !== undefined &&
663
+ (obj.maxParticipants = Math.round(message.maxParticipants));
664
+ message.creationTime !== undefined && (obj.creationTime = Math.round(message.creationTime));
665
+ message.turnPassword !== undefined && (obj.turnPassword = message.turnPassword);
666
+ if (message.enabledCodecs) {
667
+ obj.enabledCodecs = message.enabledCodecs.map((e) => (e ? Codec.toJSON(e) : undefined));
668
+ } else {
669
+ obj.enabledCodecs = [];
670
+ }
671
+ message.metadata !== undefined && (obj.metadata = message.metadata);
672
+ message.numParticipants !== undefined &&
673
+ (obj.numParticipants = Math.round(message.numParticipants));
674
+ message.activeRecording !== undefined && (obj.activeRecording = message.activeRecording);
675
+ return obj;
676
+ },
677
+
678
+ fromPartial<I extends Exact<DeepPartial<Room>, I>>(object: I): Room {
679
+ const message = createBaseRoom();
680
+ message.sid = object.sid ?? '';
681
+ message.name = object.name ?? '';
682
+ message.emptyTimeout = object.emptyTimeout ?? 0;
683
+ message.maxParticipants = object.maxParticipants ?? 0;
684
+ message.creationTime = object.creationTime ?? 0;
685
+ message.turnPassword = object.turnPassword ?? '';
686
+ message.enabledCodecs = object.enabledCodecs?.map((e) => Codec.fromPartial(e)) || [];
687
+ message.metadata = object.metadata ?? '';
688
+ message.numParticipants = object.numParticipants ?? 0;
689
+ message.activeRecording = object.activeRecording ?? false;
690
+ return message;
691
+ },
692
+ };
693
+
694
+ function createBaseCodec(): Codec {
695
+ return { mime: '', fmtpLine: '' };
696
+ }
697
+
698
+ export const Codec = {
699
+ encode(message: Codec, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
700
+ if (message.mime !== '') {
701
+ writer.uint32(10).string(message.mime);
702
+ }
703
+ if (message.fmtpLine !== '') {
704
+ writer.uint32(18).string(message.fmtpLine);
705
+ }
706
+ return writer;
707
+ },
708
+
709
+ decode(input: _m0.Reader | Uint8Array, length?: number): Codec {
710
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
711
+ let end = length === undefined ? reader.len : reader.pos + length;
712
+ const message = createBaseCodec();
713
+ while (reader.pos < end) {
714
+ const tag = reader.uint32();
715
+ switch (tag >>> 3) {
716
+ case 1:
717
+ message.mime = reader.string();
718
+ break;
719
+ case 2:
720
+ message.fmtpLine = reader.string();
721
+ break;
722
+ default:
723
+ reader.skipType(tag & 7);
724
+ break;
725
+ }
726
+ }
727
+ return message;
728
+ },
729
+
730
+ fromJSON(object: any): Codec {
731
+ return {
732
+ mime: isSet(object.mime) ? String(object.mime) : '',
733
+ fmtpLine: isSet(object.fmtpLine) ? String(object.fmtpLine) : '',
734
+ };
735
+ },
736
+
737
+ toJSON(message: Codec): unknown {
738
+ const obj: any = {};
739
+ message.mime !== undefined && (obj.mime = message.mime);
740
+ message.fmtpLine !== undefined && (obj.fmtpLine = message.fmtpLine);
741
+ return obj;
742
+ },
743
+
744
+ fromPartial<I extends Exact<DeepPartial<Codec>, I>>(object: I): Codec {
745
+ const message = createBaseCodec();
746
+ message.mime = object.mime ?? '';
747
+ message.fmtpLine = object.fmtpLine ?? '';
748
+ return message;
749
+ },
750
+ };
751
+
752
+ function createBaseParticipantPermission(): ParticipantPermission {
753
+ return {
754
+ canSubscribe: false,
755
+ canPublish: false,
756
+ canPublishData: false,
757
+ hidden: false,
758
+ recorder: false,
759
+ };
760
+ }
761
+
762
+ export const ParticipantPermission = {
763
+ encode(message: ParticipantPermission, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
764
+ if (message.canSubscribe === true) {
765
+ writer.uint32(8).bool(message.canSubscribe);
766
+ }
767
+ if (message.canPublish === true) {
768
+ writer.uint32(16).bool(message.canPublish);
769
+ }
770
+ if (message.canPublishData === true) {
771
+ writer.uint32(24).bool(message.canPublishData);
772
+ }
773
+ if (message.hidden === true) {
774
+ writer.uint32(56).bool(message.hidden);
775
+ }
776
+ if (message.recorder === true) {
777
+ writer.uint32(64).bool(message.recorder);
778
+ }
779
+ return writer;
780
+ },
781
+
782
+ decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantPermission {
783
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
784
+ let end = length === undefined ? reader.len : reader.pos + length;
785
+ const message = createBaseParticipantPermission();
786
+ while (reader.pos < end) {
787
+ const tag = reader.uint32();
788
+ switch (tag >>> 3) {
789
+ case 1:
790
+ message.canSubscribe = reader.bool();
791
+ break;
792
+ case 2:
793
+ message.canPublish = reader.bool();
794
+ break;
795
+ case 3:
796
+ message.canPublishData = reader.bool();
797
+ break;
798
+ case 7:
799
+ message.hidden = reader.bool();
800
+ break;
801
+ case 8:
802
+ message.recorder = reader.bool();
803
+ break;
804
+ default:
805
+ reader.skipType(tag & 7);
806
+ break;
807
+ }
808
+ }
809
+ return message;
810
+ },
811
+
812
+ fromJSON(object: any): ParticipantPermission {
813
+ return {
814
+ canSubscribe: isSet(object.canSubscribe) ? Boolean(object.canSubscribe) : false,
815
+ canPublish: isSet(object.canPublish) ? Boolean(object.canPublish) : false,
816
+ canPublishData: isSet(object.canPublishData) ? Boolean(object.canPublishData) : false,
817
+ hidden: isSet(object.hidden) ? Boolean(object.hidden) : false,
818
+ recorder: isSet(object.recorder) ? Boolean(object.recorder) : false,
819
+ };
820
+ },
821
+
822
+ toJSON(message: ParticipantPermission): unknown {
823
+ const obj: any = {};
824
+ message.canSubscribe !== undefined && (obj.canSubscribe = message.canSubscribe);
825
+ message.canPublish !== undefined && (obj.canPublish = message.canPublish);
826
+ message.canPublishData !== undefined && (obj.canPublishData = message.canPublishData);
827
+ message.hidden !== undefined && (obj.hidden = message.hidden);
828
+ message.recorder !== undefined && (obj.recorder = message.recorder);
829
+ return obj;
830
+ },
831
+
832
+ fromPartial<I extends Exact<DeepPartial<ParticipantPermission>, I>>(
833
+ object: I,
834
+ ): ParticipantPermission {
835
+ const message = createBaseParticipantPermission();
836
+ message.canSubscribe = object.canSubscribe ?? false;
837
+ message.canPublish = object.canPublish ?? false;
838
+ message.canPublishData = object.canPublishData ?? false;
839
+ message.hidden = object.hidden ?? false;
840
+ message.recorder = object.recorder ?? false;
841
+ return message;
842
+ },
843
+ };
844
+
845
+ function createBaseParticipantInfo(): ParticipantInfo {
846
+ return {
847
+ sid: '',
848
+ identity: '',
849
+ state: 0,
850
+ tracks: [],
851
+ metadata: '',
852
+ joinedAt: 0,
853
+ name: '',
854
+ version: 0,
855
+ permission: undefined,
856
+ region: '',
857
+ isPublisher: false,
858
+ };
859
+ }
860
+
861
+ export const ParticipantInfo = {
862
+ encode(message: ParticipantInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
863
+ if (message.sid !== '') {
864
+ writer.uint32(10).string(message.sid);
865
+ }
866
+ if (message.identity !== '') {
867
+ writer.uint32(18).string(message.identity);
868
+ }
869
+ if (message.state !== 0) {
870
+ writer.uint32(24).int32(message.state);
871
+ }
872
+ for (const v of message.tracks) {
873
+ TrackInfo.encode(v!, writer.uint32(34).fork()).ldelim();
874
+ }
875
+ if (message.metadata !== '') {
876
+ writer.uint32(42).string(message.metadata);
877
+ }
878
+ if (message.joinedAt !== 0) {
879
+ writer.uint32(48).int64(message.joinedAt);
880
+ }
881
+ if (message.name !== '') {
882
+ writer.uint32(74).string(message.name);
883
+ }
884
+ if (message.version !== 0) {
885
+ writer.uint32(80).uint32(message.version);
886
+ }
887
+ if (message.permission !== undefined) {
888
+ ParticipantPermission.encode(message.permission, writer.uint32(90).fork()).ldelim();
889
+ }
890
+ if (message.region !== '') {
891
+ writer.uint32(98).string(message.region);
892
+ }
893
+ if (message.isPublisher === true) {
894
+ writer.uint32(104).bool(message.isPublisher);
895
+ }
896
+ return writer;
897
+ },
898
+
899
+ decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantInfo {
900
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
901
+ let end = length === undefined ? reader.len : reader.pos + length;
902
+ const message = createBaseParticipantInfo();
903
+ while (reader.pos < end) {
904
+ const tag = reader.uint32();
905
+ switch (tag >>> 3) {
906
+ case 1:
907
+ message.sid = reader.string();
908
+ break;
909
+ case 2:
910
+ message.identity = reader.string();
911
+ break;
912
+ case 3:
913
+ message.state = reader.int32() as any;
914
+ break;
915
+ case 4:
916
+ message.tracks.push(TrackInfo.decode(reader, reader.uint32()));
917
+ break;
918
+ case 5:
919
+ message.metadata = reader.string();
920
+ break;
921
+ case 6:
922
+ message.joinedAt = longToNumber(reader.int64() as Long);
923
+ break;
924
+ case 9:
925
+ message.name = reader.string();
926
+ break;
927
+ case 10:
928
+ message.version = reader.uint32();
929
+ break;
930
+ case 11:
931
+ message.permission = ParticipantPermission.decode(reader, reader.uint32());
932
+ break;
933
+ case 12:
934
+ message.region = reader.string();
935
+ break;
936
+ case 13:
937
+ message.isPublisher = reader.bool();
938
+ break;
939
+ default:
940
+ reader.skipType(tag & 7);
941
+ break;
942
+ }
943
+ }
944
+ return message;
945
+ },
946
+
947
+ fromJSON(object: any): ParticipantInfo {
948
+ return {
949
+ sid: isSet(object.sid) ? String(object.sid) : '',
950
+ identity: isSet(object.identity) ? String(object.identity) : '',
951
+ state: isSet(object.state) ? participantInfo_StateFromJSON(object.state) : 0,
952
+ tracks: Array.isArray(object?.tracks)
953
+ ? object.tracks.map((e: any) => TrackInfo.fromJSON(e))
954
+ : [],
955
+ metadata: isSet(object.metadata) ? String(object.metadata) : '',
956
+ joinedAt: isSet(object.joinedAt) ? Number(object.joinedAt) : 0,
957
+ name: isSet(object.name) ? String(object.name) : '',
958
+ version: isSet(object.version) ? Number(object.version) : 0,
959
+ permission: isSet(object.permission)
960
+ ? ParticipantPermission.fromJSON(object.permission)
961
+ : undefined,
962
+ region: isSet(object.region) ? String(object.region) : '',
963
+ isPublisher: isSet(object.isPublisher) ? Boolean(object.isPublisher) : false,
964
+ };
965
+ },
966
+
967
+ toJSON(message: ParticipantInfo): unknown {
968
+ const obj: any = {};
969
+ message.sid !== undefined && (obj.sid = message.sid);
970
+ message.identity !== undefined && (obj.identity = message.identity);
971
+ message.state !== undefined && (obj.state = participantInfo_StateToJSON(message.state));
972
+ if (message.tracks) {
973
+ obj.tracks = message.tracks.map((e) => (e ? TrackInfo.toJSON(e) : undefined));
974
+ } else {
975
+ obj.tracks = [];
976
+ }
977
+ message.metadata !== undefined && (obj.metadata = message.metadata);
978
+ message.joinedAt !== undefined && (obj.joinedAt = Math.round(message.joinedAt));
979
+ message.name !== undefined && (obj.name = message.name);
980
+ message.version !== undefined && (obj.version = Math.round(message.version));
981
+ message.permission !== undefined &&
982
+ (obj.permission = message.permission
983
+ ? ParticipantPermission.toJSON(message.permission)
984
+ : undefined);
985
+ message.region !== undefined && (obj.region = message.region);
986
+ message.isPublisher !== undefined && (obj.isPublisher = message.isPublisher);
987
+ return obj;
988
+ },
989
+
990
+ fromPartial<I extends Exact<DeepPartial<ParticipantInfo>, I>>(object: I): ParticipantInfo {
991
+ const message = createBaseParticipantInfo();
992
+ message.sid = object.sid ?? '';
993
+ message.identity = object.identity ?? '';
994
+ message.state = object.state ?? 0;
995
+ message.tracks = object.tracks?.map((e) => TrackInfo.fromPartial(e)) || [];
996
+ message.metadata = object.metadata ?? '';
997
+ message.joinedAt = object.joinedAt ?? 0;
998
+ message.name = object.name ?? '';
999
+ message.version = object.version ?? 0;
1000
+ message.permission =
1001
+ object.permission !== undefined && object.permission !== null
1002
+ ? ParticipantPermission.fromPartial(object.permission)
1003
+ : undefined;
1004
+ message.region = object.region ?? '';
1005
+ message.isPublisher = object.isPublisher ?? false;
1006
+ return message;
1007
+ },
1008
+ };
1009
+
1010
+ function createBaseTrackInfo(): TrackInfo {
1011
+ return {
1012
+ sid: '',
1013
+ type: 0,
1014
+ name: '',
1015
+ muted: false,
1016
+ width: 0,
1017
+ height: 0,
1018
+ simulcast: false,
1019
+ disableDtx: false,
1020
+ source: 0,
1021
+ layers: [],
1022
+ mimeType: '',
1023
+ mid: '',
1024
+ };
1025
+ }
1026
+
1027
+ export const TrackInfo = {
1028
+ encode(message: TrackInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1029
+ if (message.sid !== '') {
1030
+ writer.uint32(10).string(message.sid);
1031
+ }
1032
+ if (message.type !== 0) {
1033
+ writer.uint32(16).int32(message.type);
1034
+ }
1035
+ if (message.name !== '') {
1036
+ writer.uint32(26).string(message.name);
1037
+ }
1038
+ if (message.muted === true) {
1039
+ writer.uint32(32).bool(message.muted);
1040
+ }
1041
+ if (message.width !== 0) {
1042
+ writer.uint32(40).uint32(message.width);
1043
+ }
1044
+ if (message.height !== 0) {
1045
+ writer.uint32(48).uint32(message.height);
1046
+ }
1047
+ if (message.simulcast === true) {
1048
+ writer.uint32(56).bool(message.simulcast);
1049
+ }
1050
+ if (message.disableDtx === true) {
1051
+ writer.uint32(64).bool(message.disableDtx);
1052
+ }
1053
+ if (message.source !== 0) {
1054
+ writer.uint32(72).int32(message.source);
1055
+ }
1056
+ for (const v of message.layers) {
1057
+ VideoLayer.encode(v!, writer.uint32(82).fork()).ldelim();
1058
+ }
1059
+ if (message.mimeType !== '') {
1060
+ writer.uint32(90).string(message.mimeType);
1061
+ }
1062
+ if (message.mid !== '') {
1063
+ writer.uint32(98).string(message.mid);
1064
+ }
1065
+ return writer;
1066
+ },
1067
+
1068
+ decode(input: _m0.Reader | Uint8Array, length?: number): TrackInfo {
1069
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1070
+ let end = length === undefined ? reader.len : reader.pos + length;
1071
+ const message = createBaseTrackInfo();
1072
+ while (reader.pos < end) {
1073
+ const tag = reader.uint32();
1074
+ switch (tag >>> 3) {
1075
+ case 1:
1076
+ message.sid = reader.string();
1077
+ break;
1078
+ case 2:
1079
+ message.type = reader.int32() as any;
1080
+ break;
1081
+ case 3:
1082
+ message.name = reader.string();
1083
+ break;
1084
+ case 4:
1085
+ message.muted = reader.bool();
1086
+ break;
1087
+ case 5:
1088
+ message.width = reader.uint32();
1089
+ break;
1090
+ case 6:
1091
+ message.height = reader.uint32();
1092
+ break;
1093
+ case 7:
1094
+ message.simulcast = reader.bool();
1095
+ break;
1096
+ case 8:
1097
+ message.disableDtx = reader.bool();
1098
+ break;
1099
+ case 9:
1100
+ message.source = reader.int32() as any;
1101
+ break;
1102
+ case 10:
1103
+ message.layers.push(VideoLayer.decode(reader, reader.uint32()));
1104
+ break;
1105
+ case 11:
1106
+ message.mimeType = reader.string();
1107
+ break;
1108
+ case 12:
1109
+ message.mid = reader.string();
1110
+ break;
1111
+ default:
1112
+ reader.skipType(tag & 7);
1113
+ break;
1114
+ }
1115
+ }
1116
+ return message;
1117
+ },
1118
+
1119
+ fromJSON(object: any): TrackInfo {
1120
+ return {
1121
+ sid: isSet(object.sid) ? String(object.sid) : '',
1122
+ type: isSet(object.type) ? trackTypeFromJSON(object.type) : 0,
1123
+ name: isSet(object.name) ? String(object.name) : '',
1124
+ muted: isSet(object.muted) ? Boolean(object.muted) : false,
1125
+ width: isSet(object.width) ? Number(object.width) : 0,
1126
+ height: isSet(object.height) ? Number(object.height) : 0,
1127
+ simulcast: isSet(object.simulcast) ? Boolean(object.simulcast) : false,
1128
+ disableDtx: isSet(object.disableDtx) ? Boolean(object.disableDtx) : false,
1129
+ source: isSet(object.source) ? trackSourceFromJSON(object.source) : 0,
1130
+ layers: Array.isArray(object?.layers)
1131
+ ? object.layers.map((e: any) => VideoLayer.fromJSON(e))
1132
+ : [],
1133
+ mimeType: isSet(object.mimeType) ? String(object.mimeType) : '',
1134
+ mid: isSet(object.mid) ? String(object.mid) : '',
1135
+ };
1136
+ },
1137
+
1138
+ toJSON(message: TrackInfo): unknown {
1139
+ const obj: any = {};
1140
+ message.sid !== undefined && (obj.sid = message.sid);
1141
+ message.type !== undefined && (obj.type = trackTypeToJSON(message.type));
1142
+ message.name !== undefined && (obj.name = message.name);
1143
+ message.muted !== undefined && (obj.muted = message.muted);
1144
+ message.width !== undefined && (obj.width = Math.round(message.width));
1145
+ message.height !== undefined && (obj.height = Math.round(message.height));
1146
+ message.simulcast !== undefined && (obj.simulcast = message.simulcast);
1147
+ message.disableDtx !== undefined && (obj.disableDtx = message.disableDtx);
1148
+ message.source !== undefined && (obj.source = trackSourceToJSON(message.source));
1149
+ if (message.layers) {
1150
+ obj.layers = message.layers.map((e) => (e ? VideoLayer.toJSON(e) : undefined));
1151
+ } else {
1152
+ obj.layers = [];
1153
+ }
1154
+ message.mimeType !== undefined && (obj.mimeType = message.mimeType);
1155
+ message.mid !== undefined && (obj.mid = message.mid);
1156
+ return obj;
1157
+ },
1158
+
1159
+ fromPartial<I extends Exact<DeepPartial<TrackInfo>, I>>(object: I): TrackInfo {
1160
+ const message = createBaseTrackInfo();
1161
+ message.sid = object.sid ?? '';
1162
+ message.type = object.type ?? 0;
1163
+ message.name = object.name ?? '';
1164
+ message.muted = object.muted ?? false;
1165
+ message.width = object.width ?? 0;
1166
+ message.height = object.height ?? 0;
1167
+ message.simulcast = object.simulcast ?? false;
1168
+ message.disableDtx = object.disableDtx ?? false;
1169
+ message.source = object.source ?? 0;
1170
+ message.layers = object.layers?.map((e) => VideoLayer.fromPartial(e)) || [];
1171
+ message.mimeType = object.mimeType ?? '';
1172
+ message.mid = object.mid ?? '';
1173
+ return message;
1174
+ },
1175
+ };
1176
+
1177
+ function createBaseVideoLayer(): VideoLayer {
1178
+ return { quality: 0, width: 0, height: 0, bitrate: 0, ssrc: 0 };
1179
+ }
1180
+
1181
+ export const VideoLayer = {
1182
+ encode(message: VideoLayer, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1183
+ if (message.quality !== 0) {
1184
+ writer.uint32(8).int32(message.quality);
1185
+ }
1186
+ if (message.width !== 0) {
1187
+ writer.uint32(16).uint32(message.width);
1188
+ }
1189
+ if (message.height !== 0) {
1190
+ writer.uint32(24).uint32(message.height);
1191
+ }
1192
+ if (message.bitrate !== 0) {
1193
+ writer.uint32(32).uint32(message.bitrate);
1194
+ }
1195
+ if (message.ssrc !== 0) {
1196
+ writer.uint32(40).uint32(message.ssrc);
1197
+ }
1198
+ return writer;
1199
+ },
1200
+
1201
+ decode(input: _m0.Reader | Uint8Array, length?: number): VideoLayer {
1202
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1203
+ let end = length === undefined ? reader.len : reader.pos + length;
1204
+ const message = createBaseVideoLayer();
1205
+ while (reader.pos < end) {
1206
+ const tag = reader.uint32();
1207
+ switch (tag >>> 3) {
1208
+ case 1:
1209
+ message.quality = reader.int32() as any;
1210
+ break;
1211
+ case 2:
1212
+ message.width = reader.uint32();
1213
+ break;
1214
+ case 3:
1215
+ message.height = reader.uint32();
1216
+ break;
1217
+ case 4:
1218
+ message.bitrate = reader.uint32();
1219
+ break;
1220
+ case 5:
1221
+ message.ssrc = reader.uint32();
1222
+ break;
1223
+ default:
1224
+ reader.skipType(tag & 7);
1225
+ break;
1226
+ }
1227
+ }
1228
+ return message;
1229
+ },
1230
+
1231
+ fromJSON(object: any): VideoLayer {
1232
+ return {
1233
+ quality: isSet(object.quality) ? videoQualityFromJSON(object.quality) : 0,
1234
+ width: isSet(object.width) ? Number(object.width) : 0,
1235
+ height: isSet(object.height) ? Number(object.height) : 0,
1236
+ bitrate: isSet(object.bitrate) ? Number(object.bitrate) : 0,
1237
+ ssrc: isSet(object.ssrc) ? Number(object.ssrc) : 0,
1238
+ };
1239
+ },
1240
+
1241
+ toJSON(message: VideoLayer): unknown {
1242
+ const obj: any = {};
1243
+ message.quality !== undefined && (obj.quality = videoQualityToJSON(message.quality));
1244
+ message.width !== undefined && (obj.width = Math.round(message.width));
1245
+ message.height !== undefined && (obj.height = Math.round(message.height));
1246
+ message.bitrate !== undefined && (obj.bitrate = Math.round(message.bitrate));
1247
+ message.ssrc !== undefined && (obj.ssrc = Math.round(message.ssrc));
1248
+ return obj;
1249
+ },
1250
+
1251
+ fromPartial<I extends Exact<DeepPartial<VideoLayer>, I>>(object: I): VideoLayer {
1252
+ const message = createBaseVideoLayer();
1253
+ message.quality = object.quality ?? 0;
1254
+ message.width = object.width ?? 0;
1255
+ message.height = object.height ?? 0;
1256
+ message.bitrate = object.bitrate ?? 0;
1257
+ message.ssrc = object.ssrc ?? 0;
1258
+ return message;
1259
+ },
1260
+ };
1261
+
1262
+ function createBaseDataPacket(): DataPacket {
1263
+ return { kind: 0, user: undefined, speaker: undefined };
1264
+ }
1265
+
1266
+ export const DataPacket = {
1267
+ encode(message: DataPacket, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1268
+ if (message.kind !== 0) {
1269
+ writer.uint32(8).int32(message.kind);
1270
+ }
1271
+ if (message.user !== undefined) {
1272
+ UserPacket.encode(message.user, writer.uint32(18).fork()).ldelim();
1273
+ }
1274
+ if (message.speaker !== undefined) {
1275
+ ActiveSpeakerUpdate.encode(message.speaker, writer.uint32(26).fork()).ldelim();
1276
+ }
1277
+ return writer;
1278
+ },
1279
+
1280
+ decode(input: _m0.Reader | Uint8Array, length?: number): DataPacket {
1281
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1282
+ let end = length === undefined ? reader.len : reader.pos + length;
1283
+ const message = createBaseDataPacket();
1284
+ while (reader.pos < end) {
1285
+ const tag = reader.uint32();
1286
+ switch (tag >>> 3) {
1287
+ case 1:
1288
+ message.kind = reader.int32() as any;
1289
+ break;
1290
+ case 2:
1291
+ message.user = UserPacket.decode(reader, reader.uint32());
1292
+ break;
1293
+ case 3:
1294
+ message.speaker = ActiveSpeakerUpdate.decode(reader, reader.uint32());
1295
+ break;
1296
+ default:
1297
+ reader.skipType(tag & 7);
1298
+ break;
1299
+ }
1300
+ }
1301
+ return message;
1302
+ },
1303
+
1304
+ fromJSON(object: any): DataPacket {
1305
+ return {
1306
+ kind: isSet(object.kind) ? dataPacket_KindFromJSON(object.kind) : 0,
1307
+ user: isSet(object.user) ? UserPacket.fromJSON(object.user) : undefined,
1308
+ speaker: isSet(object.speaker) ? ActiveSpeakerUpdate.fromJSON(object.speaker) : undefined,
1309
+ };
1310
+ },
1311
+
1312
+ toJSON(message: DataPacket): unknown {
1313
+ const obj: any = {};
1314
+ message.kind !== undefined && (obj.kind = dataPacket_KindToJSON(message.kind));
1315
+ message.user !== undefined &&
1316
+ (obj.user = message.user ? UserPacket.toJSON(message.user) : undefined);
1317
+ message.speaker !== undefined &&
1318
+ (obj.speaker = message.speaker ? ActiveSpeakerUpdate.toJSON(message.speaker) : undefined);
1319
+ return obj;
1320
+ },
1321
+
1322
+ fromPartial<I extends Exact<DeepPartial<DataPacket>, I>>(object: I): DataPacket {
1323
+ const message = createBaseDataPacket();
1324
+ message.kind = object.kind ?? 0;
1325
+ message.user =
1326
+ object.user !== undefined && object.user !== null
1327
+ ? UserPacket.fromPartial(object.user)
1328
+ : undefined;
1329
+ message.speaker =
1330
+ object.speaker !== undefined && object.speaker !== null
1331
+ ? ActiveSpeakerUpdate.fromPartial(object.speaker)
1332
+ : undefined;
1333
+ return message;
1334
+ },
1335
+ };
1336
+
1337
+ function createBaseActiveSpeakerUpdate(): ActiveSpeakerUpdate {
1338
+ return { speakers: [] };
1339
+ }
1340
+
1341
+ export const ActiveSpeakerUpdate = {
1342
+ encode(message: ActiveSpeakerUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1343
+ for (const v of message.speakers) {
1344
+ SpeakerInfo.encode(v!, writer.uint32(10).fork()).ldelim();
1345
+ }
1346
+ return writer;
1347
+ },
1348
+
1349
+ decode(input: _m0.Reader | Uint8Array, length?: number): ActiveSpeakerUpdate {
1350
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1351
+ let end = length === undefined ? reader.len : reader.pos + length;
1352
+ const message = createBaseActiveSpeakerUpdate();
1353
+ while (reader.pos < end) {
1354
+ const tag = reader.uint32();
1355
+ switch (tag >>> 3) {
1356
+ case 1:
1357
+ message.speakers.push(SpeakerInfo.decode(reader, reader.uint32()));
1358
+ break;
1359
+ default:
1360
+ reader.skipType(tag & 7);
1361
+ break;
1362
+ }
1363
+ }
1364
+ return message;
1365
+ },
1366
+
1367
+ fromJSON(object: any): ActiveSpeakerUpdate {
1368
+ return {
1369
+ speakers: Array.isArray(object?.speakers)
1370
+ ? object.speakers.map((e: any) => SpeakerInfo.fromJSON(e))
1371
+ : [],
1372
+ };
1373
+ },
1374
+
1375
+ toJSON(message: ActiveSpeakerUpdate): unknown {
1376
+ const obj: any = {};
1377
+ if (message.speakers) {
1378
+ obj.speakers = message.speakers.map((e) => (e ? SpeakerInfo.toJSON(e) : undefined));
1379
+ } else {
1380
+ obj.speakers = [];
1381
+ }
1382
+ return obj;
1383
+ },
1384
+
1385
+ fromPartial<I extends Exact<DeepPartial<ActiveSpeakerUpdate>, I>>(
1386
+ object: I,
1387
+ ): ActiveSpeakerUpdate {
1388
+ const message = createBaseActiveSpeakerUpdate();
1389
+ message.speakers = object.speakers?.map((e) => SpeakerInfo.fromPartial(e)) || [];
1390
+ return message;
1391
+ },
1392
+ };
1393
+
1394
+ function createBaseSpeakerInfo(): SpeakerInfo {
1395
+ return { sid: '', level: 0, active: false };
1396
+ }
1397
+
1398
+ export const SpeakerInfo = {
1399
+ encode(message: SpeakerInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1400
+ if (message.sid !== '') {
1401
+ writer.uint32(10).string(message.sid);
1402
+ }
1403
+ if (message.level !== 0) {
1404
+ writer.uint32(21).float(message.level);
1405
+ }
1406
+ if (message.active === true) {
1407
+ writer.uint32(24).bool(message.active);
1408
+ }
1409
+ return writer;
1410
+ },
1411
+
1412
+ decode(input: _m0.Reader | Uint8Array, length?: number): SpeakerInfo {
1413
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1414
+ let end = length === undefined ? reader.len : reader.pos + length;
1415
+ const message = createBaseSpeakerInfo();
1416
+ while (reader.pos < end) {
1417
+ const tag = reader.uint32();
1418
+ switch (tag >>> 3) {
1419
+ case 1:
1420
+ message.sid = reader.string();
1421
+ break;
1422
+ case 2:
1423
+ message.level = reader.float();
1424
+ break;
1425
+ case 3:
1426
+ message.active = reader.bool();
1427
+ break;
1428
+ default:
1429
+ reader.skipType(tag & 7);
1430
+ break;
1431
+ }
1432
+ }
1433
+ return message;
1434
+ },
1435
+
1436
+ fromJSON(object: any): SpeakerInfo {
1437
+ return {
1438
+ sid: isSet(object.sid) ? String(object.sid) : '',
1439
+ level: isSet(object.level) ? Number(object.level) : 0,
1440
+ active: isSet(object.active) ? Boolean(object.active) : false,
1441
+ };
1442
+ },
1443
+
1444
+ toJSON(message: SpeakerInfo): unknown {
1445
+ const obj: any = {};
1446
+ message.sid !== undefined && (obj.sid = message.sid);
1447
+ message.level !== undefined && (obj.level = message.level);
1448
+ message.active !== undefined && (obj.active = message.active);
1449
+ return obj;
1450
+ },
1451
+
1452
+ fromPartial<I extends Exact<DeepPartial<SpeakerInfo>, I>>(object: I): SpeakerInfo {
1453
+ const message = createBaseSpeakerInfo();
1454
+ message.sid = object.sid ?? '';
1455
+ message.level = object.level ?? 0;
1456
+ message.active = object.active ?? false;
1457
+ return message;
1458
+ },
1459
+ };
1460
+
1461
+ function createBaseUserPacket(): UserPacket {
1462
+ return { participantSid: '', payload: new Uint8Array(), destinationSids: [] };
1463
+ }
1464
+
1465
+ export const UserPacket = {
1466
+ encode(message: UserPacket, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1467
+ if (message.participantSid !== '') {
1468
+ writer.uint32(10).string(message.participantSid);
1469
+ }
1470
+ if (message.payload.length !== 0) {
1471
+ writer.uint32(18).bytes(message.payload);
1472
+ }
1473
+ for (const v of message.destinationSids) {
1474
+ writer.uint32(26).string(v!);
1475
+ }
1476
+ return writer;
1477
+ },
1478
+
1479
+ decode(input: _m0.Reader | Uint8Array, length?: number): UserPacket {
1480
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1481
+ let end = length === undefined ? reader.len : reader.pos + length;
1482
+ const message = createBaseUserPacket();
1483
+ while (reader.pos < end) {
1484
+ const tag = reader.uint32();
1485
+ switch (tag >>> 3) {
1486
+ case 1:
1487
+ message.participantSid = reader.string();
1488
+ break;
1489
+ case 2:
1490
+ message.payload = reader.bytes();
1491
+ break;
1492
+ case 3:
1493
+ message.destinationSids.push(reader.string());
1494
+ break;
1495
+ default:
1496
+ reader.skipType(tag & 7);
1497
+ break;
1498
+ }
1499
+ }
1500
+ return message;
1501
+ },
1502
+
1503
+ fromJSON(object: any): UserPacket {
1504
+ return {
1505
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',
1506
+ payload: isSet(object.payload) ? bytesFromBase64(object.payload) : new Uint8Array(),
1507
+ destinationSids: Array.isArray(object?.destinationSids)
1508
+ ? object.destinationSids.map((e: any) => String(e))
1509
+ : [],
1510
+ };
1511
+ },
1512
+
1513
+ toJSON(message: UserPacket): unknown {
1514
+ const obj: any = {};
1515
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
1516
+ message.payload !== undefined &&
1517
+ (obj.payload = base64FromBytes(
1518
+ message.payload !== undefined ? message.payload : new Uint8Array(),
1519
+ ));
1520
+ if (message.destinationSids) {
1521
+ obj.destinationSids = message.destinationSids.map((e) => e);
1522
+ } else {
1523
+ obj.destinationSids = [];
1524
+ }
1525
+ return obj;
1526
+ },
1527
+
1528
+ fromPartial<I extends Exact<DeepPartial<UserPacket>, I>>(object: I): UserPacket {
1529
+ const message = createBaseUserPacket();
1530
+ message.participantSid = object.participantSid ?? '';
1531
+ message.payload = object.payload ?? new Uint8Array();
1532
+ message.destinationSids = object.destinationSids?.map((e) => e) || [];
1533
+ return message;
1534
+ },
1535
+ };
1536
+
1537
+ function createBaseParticipantTracks(): ParticipantTracks {
1538
+ return { participantSid: '', trackSids: [] };
1539
+ }
1540
+
1541
+ export const ParticipantTracks = {
1542
+ encode(message: ParticipantTracks, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1543
+ if (message.participantSid !== '') {
1544
+ writer.uint32(10).string(message.participantSid);
1545
+ }
1546
+ for (const v of message.trackSids) {
1547
+ writer.uint32(18).string(v!);
1548
+ }
1549
+ return writer;
1550
+ },
1551
+
1552
+ decode(input: _m0.Reader | Uint8Array, length?: number): ParticipantTracks {
1553
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1554
+ let end = length === undefined ? reader.len : reader.pos + length;
1555
+ const message = createBaseParticipantTracks();
1556
+ while (reader.pos < end) {
1557
+ const tag = reader.uint32();
1558
+ switch (tag >>> 3) {
1559
+ case 1:
1560
+ message.participantSid = reader.string();
1561
+ break;
1562
+ case 2:
1563
+ message.trackSids.push(reader.string());
1564
+ break;
1565
+ default:
1566
+ reader.skipType(tag & 7);
1567
+ break;
1568
+ }
1569
+ }
1570
+ return message;
1571
+ },
1572
+
1573
+ fromJSON(object: any): ParticipantTracks {
1574
+ return {
1575
+ participantSid: isSet(object.participantSid) ? String(object.participantSid) : '',
1576
+ trackSids: Array.isArray(object?.trackSids)
1577
+ ? object.trackSids.map((e: any) => String(e))
1578
+ : [],
1579
+ };
1580
+ },
1581
+
1582
+ toJSON(message: ParticipantTracks): unknown {
1583
+ const obj: any = {};
1584
+ message.participantSid !== undefined && (obj.participantSid = message.participantSid);
1585
+ if (message.trackSids) {
1586
+ obj.trackSids = message.trackSids.map((e) => e);
1587
+ } else {
1588
+ obj.trackSids = [];
1589
+ }
1590
+ return obj;
1591
+ },
1592
+
1593
+ fromPartial<I extends Exact<DeepPartial<ParticipantTracks>, I>>(object: I): ParticipantTracks {
1594
+ const message = createBaseParticipantTracks();
1595
+ message.participantSid = object.participantSid ?? '';
1596
+ message.trackSids = object.trackSids?.map((e) => e) || [];
1597
+ return message;
1598
+ },
1599
+ };
1600
+
1601
+ function createBaseClientInfo(): ClientInfo {
1602
+ return {
1603
+ sdk: 0,
1604
+ version: '',
1605
+ protocol: 0,
1606
+ os: '',
1607
+ osVersion: '',
1608
+ deviceModel: '',
1609
+ browser: '',
1610
+ browserVersion: '',
1611
+ address: '',
1612
+ };
1613
+ }
1614
+
1615
+ export const ClientInfo = {
1616
+ encode(message: ClientInfo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1617
+ if (message.sdk !== 0) {
1618
+ writer.uint32(8).int32(message.sdk);
1619
+ }
1620
+ if (message.version !== '') {
1621
+ writer.uint32(18).string(message.version);
1622
+ }
1623
+ if (message.protocol !== 0) {
1624
+ writer.uint32(24).int32(message.protocol);
1625
+ }
1626
+ if (message.os !== '') {
1627
+ writer.uint32(34).string(message.os);
1628
+ }
1629
+ if (message.osVersion !== '') {
1630
+ writer.uint32(42).string(message.osVersion);
1631
+ }
1632
+ if (message.deviceModel !== '') {
1633
+ writer.uint32(50).string(message.deviceModel);
1634
+ }
1635
+ if (message.browser !== '') {
1636
+ writer.uint32(58).string(message.browser);
1637
+ }
1638
+ if (message.browserVersion !== '') {
1639
+ writer.uint32(66).string(message.browserVersion);
1640
+ }
1641
+ if (message.address !== '') {
1642
+ writer.uint32(74).string(message.address);
1643
+ }
1644
+ return writer;
1645
+ },
1646
+
1647
+ decode(input: _m0.Reader | Uint8Array, length?: number): ClientInfo {
1648
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1649
+ let end = length === undefined ? reader.len : reader.pos + length;
1650
+ const message = createBaseClientInfo();
1651
+ while (reader.pos < end) {
1652
+ const tag = reader.uint32();
1653
+ switch (tag >>> 3) {
1654
+ case 1:
1655
+ message.sdk = reader.int32() as any;
1656
+ break;
1657
+ case 2:
1658
+ message.version = reader.string();
1659
+ break;
1660
+ case 3:
1661
+ message.protocol = reader.int32();
1662
+ break;
1663
+ case 4:
1664
+ message.os = reader.string();
1665
+ break;
1666
+ case 5:
1667
+ message.osVersion = reader.string();
1668
+ break;
1669
+ case 6:
1670
+ message.deviceModel = reader.string();
1671
+ break;
1672
+ case 7:
1673
+ message.browser = reader.string();
1674
+ break;
1675
+ case 8:
1676
+ message.browserVersion = reader.string();
1677
+ break;
1678
+ case 9:
1679
+ message.address = reader.string();
1680
+ break;
1681
+ default:
1682
+ reader.skipType(tag & 7);
1683
+ break;
1684
+ }
1685
+ }
1686
+ return message;
1687
+ },
1688
+
1689
+ fromJSON(object: any): ClientInfo {
1690
+ return {
1691
+ sdk: isSet(object.sdk) ? clientInfo_SDKFromJSON(object.sdk) : 0,
1692
+ version: isSet(object.version) ? String(object.version) : '',
1693
+ protocol: isSet(object.protocol) ? Number(object.protocol) : 0,
1694
+ os: isSet(object.os) ? String(object.os) : '',
1695
+ osVersion: isSet(object.osVersion) ? String(object.osVersion) : '',
1696
+ deviceModel: isSet(object.deviceModel) ? String(object.deviceModel) : '',
1697
+ browser: isSet(object.browser) ? String(object.browser) : '',
1698
+ browserVersion: isSet(object.browserVersion) ? String(object.browserVersion) : '',
1699
+ address: isSet(object.address) ? String(object.address) : '',
1700
+ };
1701
+ },
1702
+
1703
+ toJSON(message: ClientInfo): unknown {
1704
+ const obj: any = {};
1705
+ message.sdk !== undefined && (obj.sdk = clientInfo_SDKToJSON(message.sdk));
1706
+ message.version !== undefined && (obj.version = message.version);
1707
+ message.protocol !== undefined && (obj.protocol = Math.round(message.protocol));
1708
+ message.os !== undefined && (obj.os = message.os);
1709
+ message.osVersion !== undefined && (obj.osVersion = message.osVersion);
1710
+ message.deviceModel !== undefined && (obj.deviceModel = message.deviceModel);
1711
+ message.browser !== undefined && (obj.browser = message.browser);
1712
+ message.browserVersion !== undefined && (obj.browserVersion = message.browserVersion);
1713
+ message.address !== undefined && (obj.address = message.address);
1714
+ return obj;
1715
+ },
1716
+
1717
+ fromPartial<I extends Exact<DeepPartial<ClientInfo>, I>>(object: I): ClientInfo {
1718
+ const message = createBaseClientInfo();
1719
+ message.sdk = object.sdk ?? 0;
1720
+ message.version = object.version ?? '';
1721
+ message.protocol = object.protocol ?? 0;
1722
+ message.os = object.os ?? '';
1723
+ message.osVersion = object.osVersion ?? '';
1724
+ message.deviceModel = object.deviceModel ?? '';
1725
+ message.browser = object.browser ?? '';
1726
+ message.browserVersion = object.browserVersion ?? '';
1727
+ message.address = object.address ?? '';
1728
+ return message;
1729
+ },
1730
+ };
1731
+
1732
+ function createBaseClientConfiguration(): ClientConfiguration {
1733
+ return { video: undefined, screen: undefined, resumeConnection: 0 };
1734
+ }
1735
+
1736
+ export const ClientConfiguration = {
1737
+ encode(message: ClientConfiguration, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1738
+ if (message.video !== undefined) {
1739
+ VideoConfiguration.encode(message.video, writer.uint32(10).fork()).ldelim();
1740
+ }
1741
+ if (message.screen !== undefined) {
1742
+ VideoConfiguration.encode(message.screen, writer.uint32(18).fork()).ldelim();
1743
+ }
1744
+ if (message.resumeConnection !== 0) {
1745
+ writer.uint32(24).int32(message.resumeConnection);
1746
+ }
1747
+ return writer;
1748
+ },
1749
+
1750
+ decode(input: _m0.Reader | Uint8Array, length?: number): ClientConfiguration {
1751
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1752
+ let end = length === undefined ? reader.len : reader.pos + length;
1753
+ const message = createBaseClientConfiguration();
1754
+ while (reader.pos < end) {
1755
+ const tag = reader.uint32();
1756
+ switch (tag >>> 3) {
1757
+ case 1:
1758
+ message.video = VideoConfiguration.decode(reader, reader.uint32());
1759
+ break;
1760
+ case 2:
1761
+ message.screen = VideoConfiguration.decode(reader, reader.uint32());
1762
+ break;
1763
+ case 3:
1764
+ message.resumeConnection = reader.int32() as any;
1765
+ break;
1766
+ default:
1767
+ reader.skipType(tag & 7);
1768
+ break;
1769
+ }
1770
+ }
1771
+ return message;
1772
+ },
1773
+
1774
+ fromJSON(object: any): ClientConfiguration {
1775
+ return {
1776
+ video: isSet(object.video) ? VideoConfiguration.fromJSON(object.video) : undefined,
1777
+ screen: isSet(object.screen) ? VideoConfiguration.fromJSON(object.screen) : undefined,
1778
+ resumeConnection: isSet(object.resumeConnection)
1779
+ ? clientConfigSettingFromJSON(object.resumeConnection)
1780
+ : 0,
1781
+ };
1782
+ },
1783
+
1784
+ toJSON(message: ClientConfiguration): unknown {
1785
+ const obj: any = {};
1786
+ message.video !== undefined &&
1787
+ (obj.video = message.video ? VideoConfiguration.toJSON(message.video) : undefined);
1788
+ message.screen !== undefined &&
1789
+ (obj.screen = message.screen ? VideoConfiguration.toJSON(message.screen) : undefined);
1790
+ message.resumeConnection !== undefined &&
1791
+ (obj.resumeConnection = clientConfigSettingToJSON(message.resumeConnection));
1792
+ return obj;
1793
+ },
1794
+
1795
+ fromPartial<I extends Exact<DeepPartial<ClientConfiguration>, I>>(
1796
+ object: I,
1797
+ ): ClientConfiguration {
1798
+ const message = createBaseClientConfiguration();
1799
+ message.video =
1800
+ object.video !== undefined && object.video !== null
1801
+ ? VideoConfiguration.fromPartial(object.video)
1802
+ : undefined;
1803
+ message.screen =
1804
+ object.screen !== undefined && object.screen !== null
1805
+ ? VideoConfiguration.fromPartial(object.screen)
1806
+ : undefined;
1807
+ message.resumeConnection = object.resumeConnection ?? 0;
1808
+ return message;
1809
+ },
1810
+ };
1811
+
1812
+ function createBaseVideoConfiguration(): VideoConfiguration {
1813
+ return { hardwareEncoder: 0 };
1814
+ }
1815
+
1816
+ export const VideoConfiguration = {
1817
+ encode(message: VideoConfiguration, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1818
+ if (message.hardwareEncoder !== 0) {
1819
+ writer.uint32(8).int32(message.hardwareEncoder);
1820
+ }
1821
+ return writer;
1822
+ },
1823
+
1824
+ decode(input: _m0.Reader | Uint8Array, length?: number): VideoConfiguration {
1825
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
1826
+ let end = length === undefined ? reader.len : reader.pos + length;
1827
+ const message = createBaseVideoConfiguration();
1828
+ while (reader.pos < end) {
1829
+ const tag = reader.uint32();
1830
+ switch (tag >>> 3) {
1831
+ case 1:
1832
+ message.hardwareEncoder = reader.int32() as any;
1833
+ break;
1834
+ default:
1835
+ reader.skipType(tag & 7);
1836
+ break;
1837
+ }
1838
+ }
1839
+ return message;
1840
+ },
1841
+
1842
+ fromJSON(object: any): VideoConfiguration {
1843
+ return {
1844
+ hardwareEncoder: isSet(object.hardwareEncoder)
1845
+ ? clientConfigSettingFromJSON(object.hardwareEncoder)
1846
+ : 0,
1847
+ };
1848
+ },
1849
+
1850
+ toJSON(message: VideoConfiguration): unknown {
1851
+ const obj: any = {};
1852
+ message.hardwareEncoder !== undefined &&
1853
+ (obj.hardwareEncoder = clientConfigSettingToJSON(message.hardwareEncoder));
1854
+ return obj;
1855
+ },
1856
+
1857
+ fromPartial<I extends Exact<DeepPartial<VideoConfiguration>, I>>(object: I): VideoConfiguration {
1858
+ const message = createBaseVideoConfiguration();
1859
+ message.hardwareEncoder = object.hardwareEncoder ?? 0;
1860
+ return message;
1861
+ },
1862
+ };
1863
+
1864
+ function createBaseRTPStats(): RTPStats {
1865
+ return {
1866
+ startTime: undefined,
1867
+ endTime: undefined,
1868
+ duration: 0,
1869
+ packets: 0,
1870
+ packetRate: 0,
1871
+ bytes: 0,
1872
+ bitrate: 0,
1873
+ packetsLost: 0,
1874
+ packetLossRate: 0,
1875
+ packetLossPercentage: 0,
1876
+ packetsDuplicate: 0,
1877
+ packetDuplicateRate: 0,
1878
+ bytesDuplicate: 0,
1879
+ bitrateDuplicate: 0,
1880
+ packetsPadding: 0,
1881
+ packetPaddingRate: 0,
1882
+ bytesPadding: 0,
1883
+ bitratePadding: 0,
1884
+ packetsOutOfOrder: 0,
1885
+ frames: 0,
1886
+ frameRate: 0,
1887
+ jitterCurrent: 0,
1888
+ jitterMax: 0,
1889
+ gapHistogram: {},
1890
+ nacks: 0,
1891
+ nackMisses: 0,
1892
+ plis: 0,
1893
+ lastPli: undefined,
1894
+ firs: 0,
1895
+ lastFir: undefined,
1896
+ rttCurrent: 0,
1897
+ rttMax: 0,
1898
+ keyFrames: 0,
1899
+ lastKeyFrame: undefined,
1900
+ layerLockPlis: 0,
1901
+ lastLayerLockPli: undefined,
1902
+ };
1903
+ }
1904
+
1905
+ export const RTPStats = {
1906
+ encode(message: RTPStats, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {
1907
+ if (message.startTime !== undefined) {
1908
+ Timestamp.encode(toTimestamp(message.startTime), writer.uint32(10).fork()).ldelim();
1909
+ }
1910
+ if (message.endTime !== undefined) {
1911
+ Timestamp.encode(toTimestamp(message.endTime), writer.uint32(18).fork()).ldelim();
1912
+ }
1913
+ if (message.duration !== 0) {
1914
+ writer.uint32(25).double(message.duration);
1915
+ }
1916
+ if (message.packets !== 0) {
1917
+ writer.uint32(32).uint32(message.packets);
1918
+ }
1919
+ if (message.packetRate !== 0) {
1920
+ writer.uint32(41).double(message.packetRate);
1921
+ }
1922
+ if (message.bytes !== 0) {
1923
+ writer.uint32(48).uint64(message.bytes);
1924
+ }
1925
+ if (message.bitrate !== 0) {
1926
+ writer.uint32(57).double(message.bitrate);
1927
+ }
1928
+ if (message.packetsLost !== 0) {
1929
+ writer.uint32(64).uint32(message.packetsLost);
1930
+ }
1931
+ if (message.packetLossRate !== 0) {
1932
+ writer.uint32(73).double(message.packetLossRate);
1933
+ }
1934
+ if (message.packetLossPercentage !== 0) {
1935
+ writer.uint32(85).float(message.packetLossPercentage);
1936
+ }
1937
+ if (message.packetsDuplicate !== 0) {
1938
+ writer.uint32(88).uint32(message.packetsDuplicate);
1939
+ }
1940
+ if (message.packetDuplicateRate !== 0) {
1941
+ writer.uint32(97).double(message.packetDuplicateRate);
1942
+ }
1943
+ if (message.bytesDuplicate !== 0) {
1944
+ writer.uint32(104).uint64(message.bytesDuplicate);
1945
+ }
1946
+ if (message.bitrateDuplicate !== 0) {
1947
+ writer.uint32(113).double(message.bitrateDuplicate);
1948
+ }
1949
+ if (message.packetsPadding !== 0) {
1950
+ writer.uint32(120).uint32(message.packetsPadding);
1951
+ }
1952
+ if (message.packetPaddingRate !== 0) {
1953
+ writer.uint32(129).double(message.packetPaddingRate);
1954
+ }
1955
+ if (message.bytesPadding !== 0) {
1956
+ writer.uint32(136).uint64(message.bytesPadding);
1957
+ }
1958
+ if (message.bitratePadding !== 0) {
1959
+ writer.uint32(145).double(message.bitratePadding);
1960
+ }
1961
+ if (message.packetsOutOfOrder !== 0) {
1962
+ writer.uint32(152).uint32(message.packetsOutOfOrder);
1963
+ }
1964
+ if (message.frames !== 0) {
1965
+ writer.uint32(160).uint32(message.frames);
1966
+ }
1967
+ if (message.frameRate !== 0) {
1968
+ writer.uint32(169).double(message.frameRate);
1969
+ }
1970
+ if (message.jitterCurrent !== 0) {
1971
+ writer.uint32(177).double(message.jitterCurrent);
1972
+ }
1973
+ if (message.jitterMax !== 0) {
1974
+ writer.uint32(185).double(message.jitterMax);
1975
+ }
1976
+ Object.entries(message.gapHistogram).forEach(([key, value]) => {
1977
+ RTPStats_GapHistogramEntry.encode(
1978
+ { key: key as any, value },
1979
+ writer.uint32(194).fork(),
1980
+ ).ldelim();
1981
+ });
1982
+ if (message.nacks !== 0) {
1983
+ writer.uint32(200).uint32(message.nacks);
1984
+ }
1985
+ if (message.nackMisses !== 0) {
1986
+ writer.uint32(208).uint32(message.nackMisses);
1987
+ }
1988
+ if (message.plis !== 0) {
1989
+ writer.uint32(216).uint32(message.plis);
1990
+ }
1991
+ if (message.lastPli !== undefined) {
1992
+ Timestamp.encode(toTimestamp(message.lastPli), writer.uint32(226).fork()).ldelim();
1993
+ }
1994
+ if (message.firs !== 0) {
1995
+ writer.uint32(232).uint32(message.firs);
1996
+ }
1997
+ if (message.lastFir !== undefined) {
1998
+ Timestamp.encode(toTimestamp(message.lastFir), writer.uint32(242).fork()).ldelim();
1999
+ }
2000
+ if (message.rttCurrent !== 0) {
2001
+ writer.uint32(248).uint32(message.rttCurrent);
2002
+ }
2003
+ if (message.rttMax !== 0) {
2004
+ writer.uint32(256).uint32(message.rttMax);
2005
+ }
2006
+ if (message.keyFrames !== 0) {
2007
+ writer.uint32(264).uint32(message.keyFrames);
2008
+ }
2009
+ if (message.lastKeyFrame !== undefined) {
2010
+ Timestamp.encode(toTimestamp(message.lastKeyFrame), writer.uint32(274).fork()).ldelim();
2011
+ }
2012
+ if (message.layerLockPlis !== 0) {
2013
+ writer.uint32(280).uint32(message.layerLockPlis);
2014
+ }
2015
+ if (message.lastLayerLockPli !== undefined) {
2016
+ Timestamp.encode(toTimestamp(message.lastLayerLockPli), writer.uint32(290).fork()).ldelim();
2017
+ }
2018
+ return writer;
2019
+ },
2020
+
2021
+ decode(input: _m0.Reader | Uint8Array, length?: number): RTPStats {
2022
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
2023
+ let end = length === undefined ? reader.len : reader.pos + length;
2024
+ const message = createBaseRTPStats();
2025
+ while (reader.pos < end) {
2026
+ const tag = reader.uint32();
2027
+ switch (tag >>> 3) {
2028
+ case 1:
2029
+ message.startTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2030
+ break;
2031
+ case 2:
2032
+ message.endTime = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2033
+ break;
2034
+ case 3:
2035
+ message.duration = reader.double();
2036
+ break;
2037
+ case 4:
2038
+ message.packets = reader.uint32();
2039
+ break;
2040
+ case 5:
2041
+ message.packetRate = reader.double();
2042
+ break;
2043
+ case 6:
2044
+ message.bytes = longToNumber(reader.uint64() as Long);
2045
+ break;
2046
+ case 7:
2047
+ message.bitrate = reader.double();
2048
+ break;
2049
+ case 8:
2050
+ message.packetsLost = reader.uint32();
2051
+ break;
2052
+ case 9:
2053
+ message.packetLossRate = reader.double();
2054
+ break;
2055
+ case 10:
2056
+ message.packetLossPercentage = reader.float();
2057
+ break;
2058
+ case 11:
2059
+ message.packetsDuplicate = reader.uint32();
2060
+ break;
2061
+ case 12:
2062
+ message.packetDuplicateRate = reader.double();
2063
+ break;
2064
+ case 13:
2065
+ message.bytesDuplicate = longToNumber(reader.uint64() as Long);
2066
+ break;
2067
+ case 14:
2068
+ message.bitrateDuplicate = reader.double();
2069
+ break;
2070
+ case 15:
2071
+ message.packetsPadding = reader.uint32();
2072
+ break;
2073
+ case 16:
2074
+ message.packetPaddingRate = reader.double();
2075
+ break;
2076
+ case 17:
2077
+ message.bytesPadding = longToNumber(reader.uint64() as Long);
2078
+ break;
2079
+ case 18:
2080
+ message.bitratePadding = reader.double();
2081
+ break;
2082
+ case 19:
2083
+ message.packetsOutOfOrder = reader.uint32();
2084
+ break;
2085
+ case 20:
2086
+ message.frames = reader.uint32();
2087
+ break;
2088
+ case 21:
2089
+ message.frameRate = reader.double();
2090
+ break;
2091
+ case 22:
2092
+ message.jitterCurrent = reader.double();
2093
+ break;
2094
+ case 23:
2095
+ message.jitterMax = reader.double();
2096
+ break;
2097
+ case 24:
2098
+ const entry24 = RTPStats_GapHistogramEntry.decode(reader, reader.uint32());
2099
+ if (entry24.value !== undefined) {
2100
+ message.gapHistogram[entry24.key] = entry24.value;
2101
+ }
2102
+ break;
2103
+ case 25:
2104
+ message.nacks = reader.uint32();
2105
+ break;
2106
+ case 26:
2107
+ message.nackMisses = reader.uint32();
2108
+ break;
2109
+ case 27:
2110
+ message.plis = reader.uint32();
2111
+ break;
2112
+ case 28:
2113
+ message.lastPli = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2114
+ break;
2115
+ case 29:
2116
+ message.firs = reader.uint32();
2117
+ break;
2118
+ case 30:
2119
+ message.lastFir = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2120
+ break;
2121
+ case 31:
2122
+ message.rttCurrent = reader.uint32();
2123
+ break;
2124
+ case 32:
2125
+ message.rttMax = reader.uint32();
2126
+ break;
2127
+ case 33:
2128
+ message.keyFrames = reader.uint32();
2129
+ break;
2130
+ case 34:
2131
+ message.lastKeyFrame = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2132
+ break;
2133
+ case 35:
2134
+ message.layerLockPlis = reader.uint32();
2135
+ break;
2136
+ case 36:
2137
+ message.lastLayerLockPli = fromTimestamp(Timestamp.decode(reader, reader.uint32()));
2138
+ break;
2139
+ default:
2140
+ reader.skipType(tag & 7);
2141
+ break;
2142
+ }
2143
+ }
2144
+ return message;
2145
+ },
2146
+
2147
+ fromJSON(object: any): RTPStats {
2148
+ return {
2149
+ startTime: isSet(object.startTime) ? fromJsonTimestamp(object.startTime) : undefined,
2150
+ endTime: isSet(object.endTime) ? fromJsonTimestamp(object.endTime) : undefined,
2151
+ duration: isSet(object.duration) ? Number(object.duration) : 0,
2152
+ packets: isSet(object.packets) ? Number(object.packets) : 0,
2153
+ packetRate: isSet(object.packetRate) ? Number(object.packetRate) : 0,
2154
+ bytes: isSet(object.bytes) ? Number(object.bytes) : 0,
2155
+ bitrate: isSet(object.bitrate) ? Number(object.bitrate) : 0,
2156
+ packetsLost: isSet(object.packetsLost) ? Number(object.packetsLost) : 0,
2157
+ packetLossRate: isSet(object.packetLossRate) ? Number(object.packetLossRate) : 0,
2158
+ packetLossPercentage: isSet(object.packetLossPercentage)
2159
+ ? Number(object.packetLossPercentage)
2160
+ : 0,
2161
+ packetsDuplicate: isSet(object.packetsDuplicate) ? Number(object.packetsDuplicate) : 0,
2162
+ packetDuplicateRate: isSet(object.packetDuplicateRate)
2163
+ ? Number(object.packetDuplicateRate)
2164
+ : 0,
2165
+ bytesDuplicate: isSet(object.bytesDuplicate) ? Number(object.bytesDuplicate) : 0,
2166
+ bitrateDuplicate: isSet(object.bitrateDuplicate) ? Number(object.bitrateDuplicate) : 0,
2167
+ packetsPadding: isSet(object.packetsPadding) ? Number(object.packetsPadding) : 0,
2168
+ packetPaddingRate: isSet(object.packetPaddingRate) ? Number(object.packetPaddingRate) : 0,
2169
+ bytesPadding: isSet(object.bytesPadding) ? Number(object.bytesPadding) : 0,
2170
+ bitratePadding: isSet(object.bitratePadding) ? Number(object.bitratePadding) : 0,
2171
+ packetsOutOfOrder: isSet(object.packetsOutOfOrder) ? Number(object.packetsOutOfOrder) : 0,
2172
+ frames: isSet(object.frames) ? Number(object.frames) : 0,
2173
+ frameRate: isSet(object.frameRate) ? Number(object.frameRate) : 0,
2174
+ jitterCurrent: isSet(object.jitterCurrent) ? Number(object.jitterCurrent) : 0,
2175
+ jitterMax: isSet(object.jitterMax) ? Number(object.jitterMax) : 0,
2176
+ gapHistogram: isObject(object.gapHistogram)
2177
+ ? Object.entries(object.gapHistogram).reduce<{ [key: number]: number }>(
2178
+ (acc, [key, value]) => {
2179
+ acc[Number(key)] = Number(value);
2180
+ return acc;
2181
+ },
2182
+ {},
2183
+ )
2184
+ : {},
2185
+ nacks: isSet(object.nacks) ? Number(object.nacks) : 0,
2186
+ nackMisses: isSet(object.nackMisses) ? Number(object.nackMisses) : 0,
2187
+ plis: isSet(object.plis) ? Number(object.plis) : 0,
2188
+ lastPli: isSet(object.lastPli) ? fromJsonTimestamp(object.lastPli) : undefined,
2189
+ firs: isSet(object.firs) ? Number(object.firs) : 0,
2190
+ lastFir: isSet(object.lastFir) ? fromJsonTimestamp(object.lastFir) : undefined,
2191
+ rttCurrent: isSet(object.rttCurrent) ? Number(object.rttCurrent) : 0,
2192
+ rttMax: isSet(object.rttMax) ? Number(object.rttMax) : 0,
2193
+ keyFrames: isSet(object.keyFrames) ? Number(object.keyFrames) : 0,
2194
+ lastKeyFrame: isSet(object.lastKeyFrame) ? fromJsonTimestamp(object.lastKeyFrame) : undefined,
2195
+ layerLockPlis: isSet(object.layerLockPlis) ? Number(object.layerLockPlis) : 0,
2196
+ lastLayerLockPli: isSet(object.lastLayerLockPli)
2197
+ ? fromJsonTimestamp(object.lastLayerLockPli)
2198
+ : undefined,
2199
+ };
2200
+ },
2201
+
2202
+ toJSON(message: RTPStats): unknown {
2203
+ const obj: any = {};
2204
+ message.startTime !== undefined && (obj.startTime = message.startTime.toISOString());
2205
+ message.endTime !== undefined && (obj.endTime = message.endTime.toISOString());
2206
+ message.duration !== undefined && (obj.duration = message.duration);
2207
+ message.packets !== undefined && (obj.packets = Math.round(message.packets));
2208
+ message.packetRate !== undefined && (obj.packetRate = message.packetRate);
2209
+ message.bytes !== undefined && (obj.bytes = Math.round(message.bytes));
2210
+ message.bitrate !== undefined && (obj.bitrate = message.bitrate);
2211
+ message.packetsLost !== undefined && (obj.packetsLost = Math.round(message.packetsLost));
2212
+ message.packetLossRate !== undefined && (obj.packetLossRate = message.packetLossRate);
2213
+ message.packetLossPercentage !== undefined &&
2214
+ (obj.packetLossPercentage = message.packetLossPercentage);
2215
+ message.packetsDuplicate !== undefined &&
2216
+ (obj.packetsDuplicate = Math.round(message.packetsDuplicate));
2217
+ message.packetDuplicateRate !== undefined &&
2218
+ (obj.packetDuplicateRate = message.packetDuplicateRate);
2219
+ message.bytesDuplicate !== undefined &&
2220
+ (obj.bytesDuplicate = Math.round(message.bytesDuplicate));
2221
+ message.bitrateDuplicate !== undefined && (obj.bitrateDuplicate = message.bitrateDuplicate);
2222
+ message.packetsPadding !== undefined &&
2223
+ (obj.packetsPadding = Math.round(message.packetsPadding));
2224
+ message.packetPaddingRate !== undefined && (obj.packetPaddingRate = message.packetPaddingRate);
2225
+ message.bytesPadding !== undefined && (obj.bytesPadding = Math.round(message.bytesPadding));
2226
+ message.bitratePadding !== undefined && (obj.bitratePadding = message.bitratePadding);
2227
+ message.packetsOutOfOrder !== undefined &&
2228
+ (obj.packetsOutOfOrder = Math.round(message.packetsOutOfOrder));
2229
+ message.frames !== undefined && (obj.frames = Math.round(message.frames));
2230
+ message.frameRate !== undefined && (obj.frameRate = message.frameRate);
2231
+ message.jitterCurrent !== undefined && (obj.jitterCurrent = message.jitterCurrent);
2232
+ message.jitterMax !== undefined && (obj.jitterMax = message.jitterMax);
2233
+ obj.gapHistogram = {};
2234
+ if (message.gapHistogram) {
2235
+ Object.entries(message.gapHistogram).forEach(([k, v]) => {
2236
+ obj.gapHistogram[k] = Math.round(v);
2237
+ });
2238
+ }
2239
+ message.nacks !== undefined && (obj.nacks = Math.round(message.nacks));
2240
+ message.nackMisses !== undefined && (obj.nackMisses = Math.round(message.nackMisses));
2241
+ message.plis !== undefined && (obj.plis = Math.round(message.plis));
2242
+ message.lastPli !== undefined && (obj.lastPli = message.lastPli.toISOString());
2243
+ message.firs !== undefined && (obj.firs = Math.round(message.firs));
2244
+ message.lastFir !== undefined && (obj.lastFir = message.lastFir.toISOString());
2245
+ message.rttCurrent !== undefined && (obj.rttCurrent = Math.round(message.rttCurrent));
2246
+ message.rttMax !== undefined && (obj.rttMax = Math.round(message.rttMax));
2247
+ message.keyFrames !== undefined && (obj.keyFrames = Math.round(message.keyFrames));
2248
+ message.lastKeyFrame !== undefined && (obj.lastKeyFrame = message.lastKeyFrame.toISOString());
2249
+ message.layerLockPlis !== undefined && (obj.layerLockPlis = Math.round(message.layerLockPlis));
2250
+ message.lastLayerLockPli !== undefined &&
2251
+ (obj.lastLayerLockPli = message.lastLayerLockPli.toISOString());
2252
+ return obj;
2253
+ },
2254
+
2255
+ fromPartial<I extends Exact<DeepPartial<RTPStats>, I>>(object: I): RTPStats {
2256
+ const message = createBaseRTPStats();
2257
+ message.startTime = object.startTime ?? undefined;
2258
+ message.endTime = object.endTime ?? undefined;
2259
+ message.duration = object.duration ?? 0;
2260
+ message.packets = object.packets ?? 0;
2261
+ message.packetRate = object.packetRate ?? 0;
2262
+ message.bytes = object.bytes ?? 0;
2263
+ message.bitrate = object.bitrate ?? 0;
2264
+ message.packetsLost = object.packetsLost ?? 0;
2265
+ message.packetLossRate = object.packetLossRate ?? 0;
2266
+ message.packetLossPercentage = object.packetLossPercentage ?? 0;
2267
+ message.packetsDuplicate = object.packetsDuplicate ?? 0;
2268
+ message.packetDuplicateRate = object.packetDuplicateRate ?? 0;
2269
+ message.bytesDuplicate = object.bytesDuplicate ?? 0;
2270
+ message.bitrateDuplicate = object.bitrateDuplicate ?? 0;
2271
+ message.packetsPadding = object.packetsPadding ?? 0;
2272
+ message.packetPaddingRate = object.packetPaddingRate ?? 0;
2273
+ message.bytesPadding = object.bytesPadding ?? 0;
2274
+ message.bitratePadding = object.bitratePadding ?? 0;
2275
+ message.packetsOutOfOrder = object.packetsOutOfOrder ?? 0;
2276
+ message.frames = object.frames ?? 0;
2277
+ message.frameRate = object.frameRate ?? 0;
2278
+ message.jitterCurrent = object.jitterCurrent ?? 0;
2279
+ message.jitterMax = object.jitterMax ?? 0;
2280
+ message.gapHistogram = Object.entries(object.gapHistogram ?? {}).reduce<{
2281
+ [key: number]: number;
2282
+ }>((acc, [key, value]) => {
2283
+ if (value !== undefined) {
2284
+ acc[Number(key)] = Number(value);
2285
+ }
2286
+ return acc;
2287
+ }, {});
2288
+ message.nacks = object.nacks ?? 0;
2289
+ message.nackMisses = object.nackMisses ?? 0;
2290
+ message.plis = object.plis ?? 0;
2291
+ message.lastPli = object.lastPli ?? undefined;
2292
+ message.firs = object.firs ?? 0;
2293
+ message.lastFir = object.lastFir ?? undefined;
2294
+ message.rttCurrent = object.rttCurrent ?? 0;
2295
+ message.rttMax = object.rttMax ?? 0;
2296
+ message.keyFrames = object.keyFrames ?? 0;
2297
+ message.lastKeyFrame = object.lastKeyFrame ?? undefined;
2298
+ message.layerLockPlis = object.layerLockPlis ?? 0;
2299
+ message.lastLayerLockPli = object.lastLayerLockPli ?? undefined;
2300
+ return message;
2301
+ },
2302
+ };
2303
+
2304
+ function createBaseRTPStats_GapHistogramEntry(): RTPStats_GapHistogramEntry {
2305
+ return { key: 0, value: 0 };
2306
+ }
2307
+
2308
+ export const RTPStats_GapHistogramEntry = {
2309
+ encode(
2310
+ message: RTPStats_GapHistogramEntry,
2311
+ writer: _m0.Writer = _m0.Writer.create(),
2312
+ ): _m0.Writer {
2313
+ if (message.key !== 0) {
2314
+ writer.uint32(8).int32(message.key);
2315
+ }
2316
+ if (message.value !== 0) {
2317
+ writer.uint32(16).uint32(message.value);
2318
+ }
2319
+ return writer;
2320
+ },
2321
+
2322
+ decode(input: _m0.Reader | Uint8Array, length?: number): RTPStats_GapHistogramEntry {
2323
+ const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);
2324
+ let end = length === undefined ? reader.len : reader.pos + length;
2325
+ const message = createBaseRTPStats_GapHistogramEntry();
2326
+ while (reader.pos < end) {
2327
+ const tag = reader.uint32();
2328
+ switch (tag >>> 3) {
2329
+ case 1:
2330
+ message.key = reader.int32();
2331
+ break;
2332
+ case 2:
2333
+ message.value = reader.uint32();
2334
+ break;
2335
+ default:
2336
+ reader.skipType(tag & 7);
2337
+ break;
2338
+ }
2339
+ }
2340
+ return message;
2341
+ },
2342
+
2343
+ fromJSON(object: any): RTPStats_GapHistogramEntry {
2344
+ return {
2345
+ key: isSet(object.key) ? Number(object.key) : 0,
2346
+ value: isSet(object.value) ? Number(object.value) : 0,
2347
+ };
2348
+ },
2349
+
2350
+ toJSON(message: RTPStats_GapHistogramEntry): unknown {
2351
+ const obj: any = {};
2352
+ message.key !== undefined && (obj.key = Math.round(message.key));
2353
+ message.value !== undefined && (obj.value = Math.round(message.value));
2354
+ return obj;
2355
+ },
2356
+
2357
+ fromPartial<I extends Exact<DeepPartial<RTPStats_GapHistogramEntry>, I>>(
2358
+ object: I,
2359
+ ): RTPStats_GapHistogramEntry {
2360
+ const message = createBaseRTPStats_GapHistogramEntry();
2361
+ message.key = object.key ?? 0;
2362
+ message.value = object.value ?? 0;
2363
+ return message;
2364
+ },
2365
+ };
2366
+
2367
+ declare var self: any | undefined;
2368
+ declare var window: any | undefined;
2369
+ declare var global: any | undefined;
2370
+ var globalThis: any = (() => {
2371
+ if (typeof globalThis !== 'undefined') return globalThis;
2372
+ if (typeof self !== 'undefined') return self;
2373
+ if (typeof window !== 'undefined') return window;
2374
+ if (typeof global !== 'undefined') return global;
2375
+ throw 'Unable to locate global object';
2376
+ })();
2377
+
2378
+ const atob: (b64: string) => string =
2379
+ globalThis.atob || ((b64) => globalThis.Buffer.from(b64, 'base64').toString('binary'));
2380
+ function bytesFromBase64(b64: string): Uint8Array {
2381
+ const bin = atob(b64);
2382
+ const arr = new Uint8Array(bin.length);
2383
+ for (let i = 0; i < bin.length; ++i) {
2384
+ arr[i] = bin.charCodeAt(i);
2385
+ }
2386
+ return arr;
2387
+ }
2388
+
2389
+ const btoa: (bin: string) => string =
2390
+ globalThis.btoa || ((bin) => globalThis.Buffer.from(bin, 'binary').toString('base64'));
2391
+ function base64FromBytes(arr: Uint8Array): string {
2392
+ const bin: string[] = [];
2393
+ arr.forEach((byte) => {
2394
+ bin.push(String.fromCharCode(byte));
2395
+ });
2396
+ return btoa(bin.join(''));
2397
+ }
2398
+
2399
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
2400
+
2401
+ export type DeepPartial<T> = T extends Builtin
2402
+ ? T
2403
+ : T extends Array<infer U>
2404
+ ? Array<DeepPartial<U>>
2405
+ : T extends ReadonlyArray<infer U>
2406
+ ? ReadonlyArray<DeepPartial<U>>
2407
+ : T extends {}
2408
+ ? { [K in keyof T]?: DeepPartial<T[K]> }
2409
+ : Partial<T>;
2410
+
2411
+ type KeysOfUnion<T> = T extends T ? keyof T : never;
2412
+ export type Exact<P, I extends P> = P extends Builtin
2413
+ ? P
2414
+ : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<Exclude<keyof I, KeysOfUnion<P>>, never>;
2415
+
2416
+ function toTimestamp(date: Date): Timestamp {
2417
+ const seconds = date.getTime() / 1_000;
2418
+ const nanos = (date.getTime() % 1_000) * 1_000_000;
2419
+ return { seconds, nanos };
2420
+ }
2421
+
2422
+ function fromTimestamp(t: Timestamp): Date {
2423
+ let millis = t.seconds * 1_000;
2424
+ millis += t.nanos / 1_000_000;
2425
+ return new Date(millis);
2426
+ }
2427
+
2428
+ function fromJsonTimestamp(o: any): Date {
2429
+ if (o instanceof Date) {
2430
+ return o;
2431
+ } else if (typeof o === 'string') {
2432
+ return new Date(o);
2433
+ } else {
2434
+ return fromTimestamp(Timestamp.fromJSON(o));
2435
+ }
2436
+ }
2437
+
2438
+ function longToNumber(long: Long): number {
2439
+ if (long.gt(Number.MAX_SAFE_INTEGER)) {
2440
+ throw new globalThis.Error('Value is larger than Number.MAX_SAFE_INTEGER');
2441
+ }
2442
+ return long.toNumber();
2443
+ }
2444
+
2445
+ if (_m0.util.Long !== Long) {
2446
+ _m0.util.Long = Long as any;
2447
+ _m0.configure();
2448
+ }
2449
+
2450
+ function isObject(value: any): boolean {
2451
+ return typeof value === 'object' && value !== null;
2452
+ }
2453
+
2454
+ function isSet(value: any): boolean {
2455
+ return value !== null && value !== undefined;
2456
+ }