@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.
- package/README.md +20 -4
- package/build/core/reconnect.d.ts +8 -2
- package/build/core/reconnect.d.ts.map +1 -1
- package/build/core/reconnect.js +8 -2
- package/build/core/reconnect.js.map +1 -1
- package/build/core/signal.d.ts +10 -1
- package/build/core/signal.d.ts.map +1 -1
- package/build/core/signal.js +39 -10
- package/build/core/signal.js.map +1 -1
- package/build/core/state.d.ts +3 -0
- package/build/core/state.d.ts.map +1 -1
- package/build/core/state.js +21 -4
- package/build/core/state.js.map +1 -1
- package/build/react/index.d.ts +38 -7
- package/build/react/index.d.ts.map +1 -1
- package/build/react/index.js +86 -7
- package/build/react/index.js.map +1 -1
- package/build/room/browserDevice.d.ts.map +1 -1
- package/build/room/browserDevice.js +13 -4
- package/build/room/browserDevice.js.map +1 -1
- package/build/room/device.d.ts +13 -0
- package/build/room/device.d.ts.map +1 -1
- package/build/room/room.d.ts +129 -5
- package/build/room/room.d.ts.map +1 -1
- package/build/room/room.js +330 -58
- package/build/room/room.js.map +1 -1
- package/package.json +3 -1
- package/src/core/_tests/signal.spec.ts +115 -22
- package/src/core/_tests/state.spec.ts +68 -2
- package/src/core/reconnect.ts +8 -2
- package/src/core/signal.ts +48 -12
- package/src/core/state.ts +31 -5
- package/src/react/_tests/hooks.spec.tsx +91 -3
- package/src/react/index.tsx +117 -20
- package/src/room/_tests/room.spec.ts +747 -12
- package/src/room/browserDevice.ts +14 -4
- package/src/room/device.ts +13 -0
- package/src/room/room.ts +416 -61
package/build/room/room.js
CHANGED
|
@@ -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
|
-
|
|
11
|
-
|
|
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
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
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 `
|
|
172
|
-
// place that decides
|
|
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({
|
|
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
|
-
/**
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
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
|
|
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.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
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
|
package/build/room/room.js.map
CHANGED
|
@@ -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
|
|
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",
|