@tribe-nest/media-client 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +20 -4
  2. package/build/core/reconnect.d.ts +8 -2
  3. package/build/core/reconnect.d.ts.map +1 -1
  4. package/build/core/reconnect.js +8 -2
  5. package/build/core/reconnect.js.map +1 -1
  6. package/build/core/signal.d.ts +10 -1
  7. package/build/core/signal.d.ts.map +1 -1
  8. package/build/core/signal.js +39 -10
  9. package/build/core/signal.js.map +1 -1
  10. package/build/core/state.d.ts +3 -0
  11. package/build/core/state.d.ts.map +1 -1
  12. package/build/core/state.js +21 -4
  13. package/build/core/state.js.map +1 -1
  14. package/build/react/index.d.ts +38 -7
  15. package/build/react/index.d.ts.map +1 -1
  16. package/build/react/index.js +86 -7
  17. package/build/react/index.js.map +1 -1
  18. package/build/room/browserDevice.d.ts.map +1 -1
  19. package/build/room/browserDevice.js +13 -4
  20. package/build/room/browserDevice.js.map +1 -1
  21. package/build/room/device.d.ts +13 -0
  22. package/build/room/device.d.ts.map +1 -1
  23. package/build/room/room.d.ts +129 -5
  24. package/build/room/room.d.ts.map +1 -1
  25. package/build/room/room.js +330 -58
  26. package/build/room/room.js.map +1 -1
  27. package/package.json +3 -1
  28. package/src/core/_tests/signal.spec.ts +115 -22
  29. package/src/core/_tests/state.spec.ts +68 -2
  30. package/src/core/reconnect.ts +8 -2
  31. package/src/core/signal.ts +48 -12
  32. package/src/core/state.ts +31 -5
  33. package/src/react/_tests/hooks.spec.tsx +91 -3
  34. package/src/react/index.tsx +117 -20
  35. package/src/room/_tests/room.spec.ts +747 -12
  36. package/src/room/browserDevice.ts +14 -4
  37. package/src/room/device.ts +13 -0
  38. package/src/room/room.ts +416 -61
@@ -3,17 +3,52 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MediaRoom = void 0;
4
4
  exports.connectToRoom = connectToRoom;
5
5
  const core_1 = require("../core");
6
+ /**
7
+ * The three layers, quarter / half / full.
8
+ *
9
+ * `scaleResolutionDownBy` rather than three bitrates, so the shape holds
10
+ * whatever resolution the caller is publishing. The rids are the conventional
11
+ * one-letter names every SFU and every browser log uses, which is worth more
12
+ * than a more descriptive name nobody would recognise in a WebRTC dump.
13
+ */
14
+ const SIMULCAST_LAYERS = [
15
+ { rid: "q", scaleResolutionDownBy: 4, scalabilityMode: "L1T1" },
16
+ { rid: "h", scaleResolutionDownBy: 2, scalabilityMode: "L1T1" },
17
+ { rid: "f", scaleResolutionDownBy: 1, scalabilityMode: "L1T1" },
18
+ ];
19
+ /**
20
+ * What each layer may spend, given the caller's cap for the top one.
21
+ *
22
+ * Quarter resolution is a sixteenth of the pixels, but not a sixteenth of the
23
+ * bits: an encoder needs proportionally more per pixel at small sizes, and a
24
+ * layer starved below what its resolution costs is a layer that looks worse
25
+ * than it should while still being sent. A quarter and a tenth are the
26
+ * conventional split and are what mediasoup's own examples use.
27
+ */
28
+ function simulcastEncodings(maxBitrateKbps) {
29
+ const top = (maxBitrateKbps ?? 0) * 1000;
30
+ const share = [0.1, 0.25, 1];
31
+ return SIMULCAST_LAYERS.map((layer, index) => ({
32
+ ...layer,
33
+ ...(top ? { maxBitrate: Math.round(top * share[index]) } : {}),
34
+ }));
35
+ }
6
36
  class MediaRoom {
7
37
  options;
8
38
  signal;
9
39
  device;
10
- sendTransport;
11
- recvTransport;
40
+ /** One slot per direction: the finished transport, or the creation in flight. */
41
+ transports = {
42
+ send: { ready: undefined, creating: undefined },
43
+ recv: { ready: undefined, creating: undefined },
44
+ };
12
45
  iceServers = [];
13
46
  grantsValue;
14
47
  consumers = new Map();
15
48
  tracksByProducer = new Map();
16
49
  publications = new Map();
50
+ /** Per publication: stop listening for the track ending on its own. */
51
+ trackEndWatchers = new Map();
17
52
  listeners = new Set();
18
53
  /** One in-flight subscribe per producer, so a burst of activeSpeakers frames
19
54
  * does not race itself into two consumers for one producer. */
@@ -36,21 +71,46 @@ class MediaRoom {
36
71
  ...(options.onLog ? { onLog: options.onLog } : {}),
37
72
  });
38
73
  this.signal.onAny((frame) => this.onFrame(frame));
39
- this.signal.onClose((cause) => {
40
- this.lastError = cause;
41
- // Before the decision, and unconditionally. The transports are dead
42
- // whatever happens next, and so is every capture that was feeding them.
43
- this.teardownMedia();
44
- if (cause.type === "closed_by_client") {
45
- this.connection = "closed";
46
- this.recovering = false;
47
- this.emit();
48
- return;
49
- }
50
- this.connection = "reconnecting";
51
- this.recovering = this.scheduleReconnect(cause);
74
+ this.signal.onClose((cause) => this.onDisconnect(cause));
75
+ }
76
+ /**
77
+ * The one place that decides what happens after a connection ends, whether
78
+ * it ended after an hour or before a socket was ever opened.
79
+ */
80
+ onDisconnect(cause) {
81
+ this.lastError = cause;
82
+ // What the person was sending, before it is torn down. Recorded so the
83
+ // screen can say so once the room is back (see `lostPublicationSources`).
84
+ // A program feed is excluded: it is a studio's output, not something a
85
+ // person switched on, so nobody should be asked to switch it back on.
86
+ const wasPublishing = [
87
+ ...new Set([...this.publications.values()]
88
+ .map((p) => p.source)
89
+ .filter((s) => s !== "program")),
90
+ ];
91
+ // Before the decision, and unconditionally. The transports are dead
92
+ // whatever happens next, and so is every capture that was feeding them.
93
+ this.teardownMedia();
94
+ // The active set was an instruction about consumers on THIS connection,
95
+ // and those are gone. Left standing, it would be mistaken by the next
96
+ // `joined` for a set the new node had sent ahead of the snapshot.
97
+ if (this.stateValue.activeSpeakers.length > 0) {
98
+ this.stateValue = { ...this.stateValue, activeSpeakers: [] };
99
+ }
100
+ // `disposed` as well as the cause: `close()` is a client close whatever the
101
+ // socket's own account of it, and a room that has been closed must never
102
+ // report itself as coming back.
103
+ if (cause.type === "closed_by_client" || this.disposed) {
104
+ this.connection = "closed";
105
+ this.recovering = false;
52
106
  this.emit();
53
- });
107
+ return;
108
+ }
109
+ if (wasPublishing.length > 0)
110
+ this.lostSources = wasPublishing;
111
+ this.connection = "reconnecting";
112
+ this.recovering = this.scheduleReconnect(cause);
113
+ this.emit();
54
114
  }
55
115
  get state() {
56
116
  return this.stateValue;
@@ -89,25 +149,73 @@ class MediaRoom {
89
149
  */
90
150
  trackSnapshot = [];
91
151
  publicationSnapshot = [];
152
+ lostSources = NO_SOURCES;
92
153
  get tracks() {
93
154
  return this.trackSnapshot;
94
155
  }
95
156
  get localPublications() {
96
157
  return this.publicationSnapshot;
97
158
  }
159
+ /**
160
+ * What the person was sending when the connection dropped, and is not now.
161
+ *
162
+ * A drop tears down every local publication and STOPS its capture (see
163
+ * `teardownMedia`): the camera light goes out, which is the right thing for a
164
+ * capture whose session has ended and the wrong thing to do silently to a
165
+ * capture whose session is about to resume. The room does not republish on
166
+ * its own. Capture is a browser permission with a UI consequence, and turning
167
+ * a person's camera back on without a press, possibly minutes later, is not a
168
+ * decision this layer gets to make. So instead it says what was lost, and the
169
+ * screen tells the person, who presses the button.
170
+ *
171
+ * Cleared per source when that source is published again, and wholesale by
172
+ * `close()`. A stable reference while unchanged, like every other snapshot
173
+ * here, because `useSyncExternalStore` reads it.
174
+ */
175
+ get lostPublicationSources() {
176
+ return this.lostSources;
177
+ }
98
178
  /** Subscribe to changes. Returns an unsubscribe. */
99
179
  onChange(listener) {
100
180
  this.listeners.add(listener);
101
181
  return () => this.listeners.delete(listener);
102
182
  }
103
183
  async connect() {
184
+ // Refused BEFORE touching any state. The signal refuses this too, but by
185
+ // then `connection` would already read "connecting" over a socket that is
186
+ // joined, and nothing would ever put it back.
187
+ const phase = this.signal.phase;
188
+ if (phase === "connecting" || phase === "joining" || phase === "joined") {
189
+ throw new Error("connect() called on a room that is already connecting or connected");
190
+ }
104
191
  this.cancelReconnect();
105
192
  // A retry is not a first connection, and saying "Connecting to the call"
106
193
  // over a call somebody is already in reads as though they had been thrown
107
194
  // out of it.
108
195
  this.connection = this.reconnectAttempt > 0 ? "reconnecting" : "connecting";
109
196
  this.emit();
110
- const joined = await this.signal.connect();
197
+ // A failed attempt normally reports itself through `signal.onClose`, which
198
+ // routes to `onDisconnect`. This watches for that report so a rejection
199
+ // that arrives WITHOUT one (nothing in the signal does that today; this is
200
+ // the belt to its braces) is still counted as a failed attempt rather than
201
+ // leaving `connection` on "connecting" with no retry booked and no error
202
+ // to show.
203
+ let disconnectReported = false;
204
+ const stopWatching = this.signal.onClose(() => {
205
+ disconnectReported = true;
206
+ });
207
+ let joined;
208
+ try {
209
+ joined = await this.signal.connect();
210
+ }
211
+ catch (error) {
212
+ if (!disconnectReported)
213
+ this.onDisconnect((0, core_1.causeFromError)(error));
214
+ throw error;
215
+ }
216
+ finally {
217
+ stopWatching();
218
+ }
111
219
  // RULE 1: the device loads first. Everything below needs its capabilities.
112
220
  if (!this.device.loaded) {
113
221
  await this.device.load(joined.routerRtpCapabilities);
@@ -130,6 +238,7 @@ class MediaRoom {
130
238
  this.cancelReconnect();
131
239
  this.recovering = false;
132
240
  this.connection = "closed";
241
+ this.lostSources = NO_SOURCES;
133
242
  await this.signal.leave().catch(() => undefined);
134
243
  this.teardownMedia();
135
244
  this.emit();
@@ -168,8 +277,10 @@ class MediaRoom {
168
277
  if (this.disposed)
169
278
  return;
170
279
  this.reconnectAttempt += 1;
171
- // A failed attempt comes back through `signal.onClose`, which is the only
172
- // place that decides. Swallowed here so a retry does not surface as an
280
+ // A failed attempt comes back through `onDisconnect`, which is the only
281
+ // place that decides, and that holds for an attempt that fails BEFORE it
282
+ // has a socket (the ticket endpoint refusing) as much as for one that
283
+ // drops after an hour. Swallowed here so a retry does not surface as an
173
284
  // unhandled rejection in the host application's console.
174
285
  void this.connect().catch(() => undefined);
175
286
  }, decision.delayMs);
@@ -191,28 +302,81 @@ class MediaRoom {
191
302
  * `publishKinds`: a token granting audio only must not be able to publish a
192
303
  * screen share by relabelling it, and the node is where that is decided.
193
304
  */
194
- async publish(track, source) {
305
+ async publish(track, source, options = {}) {
195
306
  const kind = track.kind === "audio" ? "audio" : "video";
196
307
  if (!this.device.canProduce(kind)) {
197
308
  throw new Error(`this browser cannot produce ${kind}`);
198
309
  }
199
310
  const transport = await this.ensureSendTransport();
200
- const handle = await transport.produce({ track, appData: { source } });
311
+ const handle = await transport.produce({
312
+ track,
313
+ appData: { source },
314
+ ...(options.codec ? { codec: options.codec } : {}),
315
+ ...(options.simulcast
316
+ ? { encodings: simulcastEncodings(options.maxBitrateKbps) }
317
+ : options.maxBitrateKbps
318
+ ? { encodings: [{ maxBitrate: options.maxBitrateKbps * 1000 }] }
319
+ : {}),
320
+ });
321
+ if (source === "program")
322
+ await keepProgramResolution(handle, this.options.onLog);
201
323
  const publication = {
202
324
  producerId: handle.id,
203
325
  kind,
204
326
  source,
205
327
  track,
206
328
  handle,
329
+ paused: false,
207
330
  };
208
331
  this.publications.set(handle.id, publication);
332
+ // A track can end WITHOUT us: the browser's own "Stop sharing" bar, a
333
+ // camera unplugged, a device revoked from the OS. Nothing about that reaches
334
+ // `unpublish`, so the node kept a producer nobody was feeding and the
335
+ // control above still read "Stop sharing" about a share that had ended.
336
+ this.trackEndWatchers.set(handle.id, whenTrackEnds(track, () => {
337
+ void this.unpublish(handle.id);
338
+ }));
339
+ if (source !== "program" && this.lostSources.includes(source)) {
340
+ this.lostSources = this.lostSources.filter((s) => s !== source);
341
+ if (this.lostSources.length === 0)
342
+ this.lostSources = NO_SOURCES;
343
+ }
209
344
  this.emit();
210
345
  return publication;
211
346
  }
347
+ /**
348
+ * Swap the capture behind a publication, keeping the producer.
349
+ *
350
+ * A device change (another camera, another microphone) is this, and it is
351
+ * deliberately NOT unpublish plus publish: that changes the producer id,
352
+ * which is the key every consumer's tile and every studio's scene holds, so
353
+ * a switched camera vanished from the stage until somebody re-added it.
354
+ * The old capture is stopped here; the new one is watched for ending the
355
+ * same way the first was.
356
+ */
357
+ async replaceTrack(producerId, track) {
358
+ const publication = this.publications.get(producerId);
359
+ if (!publication)
360
+ throw new Error("no such publication");
361
+ if (track.kind !== publication.kind)
362
+ throw new Error(`a ${publication.kind} publication cannot carry ${track.kind}`);
363
+ if (track === publication.track)
364
+ return;
365
+ await publication.handle.replaceTrack(track);
366
+ this.trackEndWatchers.get(producerId)?.();
367
+ publication.track.stop();
368
+ this.trackEndWatchers.set(producerId, whenTrackEnds(track, () => {
369
+ void this.unpublish(producerId);
370
+ }));
371
+ this.publications.set(producerId, { ...publication, track });
372
+ this.emit();
373
+ }
212
374
  async unpublish(producerId) {
213
375
  const publication = this.publications.get(producerId);
214
376
  if (!publication)
215
377
  return;
378
+ this.trackEndWatchers.get(producerId)?.();
379
+ this.trackEndWatchers.delete(producerId);
216
380
  publication.handle.close();
217
381
  publication.track.stop();
218
382
  this.publications.delete(producerId);
@@ -221,18 +385,32 @@ class MediaRoom {
221
385
  await this.signal.request({ method: "closeProducer", producerId }).catch(() => undefined);
222
386
  this.emit();
223
387
  }
388
+ /**
389
+ * Mute or unmute at the source, keeping the capture and the producer.
390
+ *
391
+ * This is what a Mute button does, and it is deliberately NOT unpublish plus
392
+ * publish. Every publish begins with `getUserMedia`, and Safari asks
393
+ * permission on every call to it, so a toggle built on republishing put a
394
+ * permission prompt in front of the person on every unmute. The producer is
395
+ * paused (mediasoup disables the track, so nothing is sent), the node is told
396
+ * so the other side sees `producerPaused`, and resuming is instant and asks
397
+ * nobody anything.
398
+ */
224
399
  async setPaused(producerId, paused) {
225
400
  const publication = this.publications.get(producerId);
226
- if (!publication)
401
+ if (!publication || publication.paused === paused)
227
402
  return;
228
403
  if (paused)
229
404
  publication.handle.pause();
230
405
  else
231
406
  publication.handle.resume();
407
+ // A new object, so the snapshot moves and a screen reading `paused` follows.
408
+ // Emitted before the round trip: the local effect is already true.
409
+ this.publications.set(producerId, { ...publication, paused });
410
+ this.emit();
232
411
  await this.signal
233
412
  .request({ method: paused ? "pauseProducer" : "resumeProducer", producerId })
234
413
  .catch(() => undefined);
235
- this.emit();
236
414
  }
237
415
  // -------------------------------------------------------------------------
238
416
  // subscribing
@@ -299,6 +477,7 @@ class MediaRoom {
299
477
  kind: response.kind,
300
478
  track: consumer.track,
301
479
  paused: entry.paused,
480
+ ...(entry.source ? { source: entry.source } : {}),
302
481
  });
303
482
  // RULE 3: resume LAST. The node creates every consumer paused, so media
304
483
  // arriving before the application has the track is dropped - and for video
@@ -310,21 +489,68 @@ class MediaRoom {
310
489
  // -------------------------------------------------------------------------
311
490
  // transports
312
491
  // -------------------------------------------------------------------------
313
- /** RULE 2: lazily, and once. */
314
- async ensureSendTransport() {
315
- if (this.sendTransport)
316
- return this.sendTransport;
317
- const description = (await this.signal.request({
318
- method: "createTransport",
319
- direction: "send",
320
- }));
321
- this.sendTransport = this.device.createSendTransport({
492
+ /**
493
+ * RULE 2: lazily, and once.
494
+ *
495
+ * "Once" has to hold under CONCURRENCY, not just in sequence. `createTransport`
496
+ * is a round trip to the node, and `syncSubscriptions` fans out with
497
+ * `Promise.all`, so one `activeSpeakers` frame naming four producers puts
498
+ * four callers through here in the same tick. A check of the finished
499
+ * transport followed by an await let all four pass the check and send four
500
+ * `createTransport(recv)`: the node caps transports per session, so the
501
+ * fourth was the last one this session would ever get and the person's own
502
+ * Unmute was refused with `capacity` for the rest of the call. So the thing
503
+ * memoised is the in-flight PROMISE, and it is memoised before anything is
504
+ * awaited.
505
+ *
506
+ * A creation that fails is forgotten, so the next caller tries again rather
507
+ * than inheriting a rejection for ever; and `teardownMedia` forgets both,
508
+ * because a transport created against a connection that has since died
509
+ * belongs to that connection, not to the one that replaces it.
510
+ */
511
+ ensureSendTransport() {
512
+ return this.ensureTransport("send");
513
+ }
514
+ ensureRecvTransport() {
515
+ return this.ensureTransport("recv");
516
+ }
517
+ ensureTransport(direction) {
518
+ const slot = this.transports[direction];
519
+ if (slot.ready)
520
+ return Promise.resolve(slot.ready);
521
+ if (slot.creating)
522
+ return slot.creating;
523
+ const creating = this.createTransport(direction);
524
+ slot.creating = creating;
525
+ creating.then((transport) => {
526
+ if (slot.creating !== creating) {
527
+ // Torn down while the round trip was in flight. The connection this
528
+ // transport was created for is gone, so it is closed rather than kept
529
+ // for the next one.
530
+ transport.close();
531
+ return;
532
+ }
533
+ slot.ready = transport;
534
+ slot.creating = undefined;
535
+ }, () => {
536
+ if (slot.creating === creating)
537
+ slot.creating = undefined;
538
+ });
539
+ return creating;
540
+ }
541
+ async createTransport(direction) {
542
+ const description = (await this.signal.request({ method: "createTransport", direction }));
543
+ const onConnect = async (dtlsParameters) => {
544
+ await this.signal.request({ method: "connectTransport", transportId: description.transportId, dtlsParameters });
545
+ };
546
+ if (direction === "recv") {
547
+ return this.device.createRecvTransport({ description, iceServers: this.iceServers, handlers: { onConnect } });
548
+ }
549
+ return this.device.createSendTransport({
322
550
  description,
323
551
  iceServers: this.iceServers,
324
552
  handlers: {
325
- onConnect: async (dtlsParameters) => {
326
- await this.signal.request({ method: "connectTransport", transportId: description.transportId, dtlsParameters });
327
- },
553
+ onConnect,
328
554
  onProduce: async ({ kind, rtpParameters, appData }) => {
329
555
  const produced = (await this.signal.request({
330
556
  method: "produce",
@@ -337,25 +563,6 @@ class MediaRoom {
337
563
  },
338
564
  },
339
565
  });
340
- return this.sendTransport;
341
- }
342
- async ensureRecvTransport() {
343
- if (this.recvTransport)
344
- return this.recvTransport;
345
- const description = (await this.signal.request({
346
- method: "createTransport",
347
- direction: "recv",
348
- }));
349
- this.recvTransport = this.device.createRecvTransport({
350
- description,
351
- iceServers: this.iceServers,
352
- handlers: {
353
- onConnect: async (dtlsParameters) => {
354
- await this.signal.request({ method: "connectTransport", transportId: description.transportId, dtlsParameters });
355
- },
356
- },
357
- });
358
- return this.recvTransport;
359
566
  }
360
567
  // -------------------------------------------------------------------------
361
568
  // events
@@ -403,15 +610,22 @@ class MediaRoom {
403
610
  consumer.close();
404
611
  this.consumers.clear();
405
612
  this.tracksByProducer.clear();
613
+ for (const detach of this.trackEndWatchers.values())
614
+ detach();
615
+ this.trackEndWatchers.clear();
406
616
  for (const publication of this.publications.values()) {
407
617
  publication.handle.close();
408
618
  publication.track.stop();
409
619
  }
410
620
  this.publications.clear();
411
- this.sendTransport?.close();
412
- this.recvTransport?.close();
413
- this.sendTransport = undefined;
414
- this.recvTransport = undefined;
621
+ for (const slot of Object.values(this.transports)) {
622
+ slot.ready?.close();
623
+ slot.ready = undefined;
624
+ // A creation still in flight belongs to the connection that just died.
625
+ // Forgetting it here is what makes `ensureTransport` close the result
626
+ // when it lands, and what lets the next connection create its own.
627
+ slot.creating = undefined;
628
+ }
415
629
  }
416
630
  emit() {
417
631
  // Rebuilt HERE, once per change, rather than per read. Every mutation
@@ -430,9 +644,67 @@ class MediaRoom {
430
644
  }
431
645
  }
432
646
  exports.MediaRoom = MediaRoom;
647
+ const NO_SOURCES = [];
648
+ /**
649
+ * Call `onEnded` when a track ends on its own, and return the detach.
650
+ *
651
+ * `ended` fires when the SOURCE goes away (the browser's share bar, a device
652
+ * unplugged), and not for our own `track.stop()`, which is what lets
653
+ * `unpublish` stop the track without re-entering itself. Guarded because a
654
+ * track outside a browser (this package's specs hand the room bare objects) is
655
+ * not an `EventTarget`; in every browser it is.
656
+ */
657
+ function whenTrackEnds(track, onEnded) {
658
+ const target = track;
659
+ if (typeof target.addEventListener !== "function" || typeof target.removeEventListener !== "function") {
660
+ return () => undefined;
661
+ }
662
+ target.addEventListener("ended", onEnded);
663
+ return () => target.removeEventListener?.("ended", onEnded);
664
+ }
433
665
  async function connectToRoom(options) {
434
666
  const room = new MediaRoom(options);
435
667
  await room.connect();
436
668
  return room;
437
669
  }
670
+ /**
671
+ * The program feed keeps its RESOLUTION and gives up frame rate instead.
672
+ *
673
+ * Chrome's default for a video sender is `balanced`, which under a low
674
+ * bandwidth estimate or CPU pressure scales the encode down. For a camera tile
675
+ * that is the right trade. For the program feed it is wrong twice over.
676
+ *
677
+ * First, this feed is the broadcast: a 1080p composite arriving at Twitch as
678
+ * 270p is the product, not a degraded preview. Twitch reported exactly that.
679
+ *
680
+ * Second, and worse, the RTMP leg cannot survive the CHANGE. The egress muxes
681
+ * the feed with `-c:v copy`, and an FLV header carries the dimensions once, at
682
+ * the start. When Chrome adapts resolution mid-stream the SPS changes under a
683
+ * header that still describes the old size, and the player refuses the stream:
684
+ *
685
+ * Your browser encountered an error while decoding the video. (Error #3000)
686
+ *
687
+ * while ffmpeg reports `drop_frames=0`, a healthy bitrate, and an established
688
+ * socket. Nothing on the server can see it.
689
+ *
690
+ * `maintain-resolution` makes the encoder drop frames rather than pixels, so
691
+ * the SPS stays put for the life of the broadcast.
692
+ *
693
+ * Best-effort: the setting is not universally implemented, and a browser that
694
+ * ignores it is no worse off than before. Only the program source, because a
695
+ * camera is better off shrinking than freezing.
696
+ */
697
+ async function keepProgramResolution(handle, onLog) {
698
+ const sender = handle.rtpSender;
699
+ if (!sender || handle.kind !== "video")
700
+ return;
701
+ try {
702
+ const params = sender.getParameters();
703
+ params.degradationPreference = "maintain-resolution";
704
+ await sender.setParameters(params);
705
+ }
706
+ catch (err) {
707
+ onLog?.("warn", "could not pin the program feed's resolution", err);
708
+ }
709
+ }
438
710
  //# sourceMappingURL=room.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/room/room.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"room.js","sourceRoot":"","sources":["../../src/room/room.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,11 +1,13 @@
1
1
  {
2
2
  "name": "@tribe-nest/media-client",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "description": "Client SDK for the media network. `./core` is the HEADLESS half: a WebSocket client speaking media-protocol frames, backoff-with-jitter reconnection and a pure room-state reducer. Zero DOM, zero mediasoup-client, zero React, because the load harness, the egress client and the SIP gateway all need a protocol client and none of them is a browser.",
8
8
  "sideEffects": false,
9
+ "main": "./build/index.js",
10
+ "types": "./build/index.d.ts",
9
11
  "exports": {
10
12
  ".": {
11
13
  "types": "./build/index.d.ts",