@tribe-nest/media-client 0.1.1 → 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/build/core/state.d.ts +3 -0
- package/build/core/state.d.ts.map +1 -1
- package/build/core/state.js +7 -1
- package/build/core/state.js.map +1 -1
- package/build/react/index.d.ts +15 -5
- package/build/react/index.d.ts.map +1 -1
- package/build/react/index.js +60 -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 +63 -2
- package/build/room/room.d.ts.map +1 -1
- package/build/room/room.js +119 -4
- package/build/room/room.js.map +1 -1
- package/package.json +1 -1
- package/src/core/_tests/state.spec.ts +46 -0
- package/src/core/state.ts +10 -1
- package/src/react/index.tsx +62 -12
- package/src/room/_tests/room.spec.ts +237 -4
- package/src/room/browserDevice.ts +14 -4
- package/src/room/device.ts +13 -0
- package/src/room/room.ts +184 -5
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
|
@@ -130,6 +130,52 @@ describe("peers and producers", () => {
|
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
+
/**
|
|
134
|
+
* The publisher's label, kept for rendering.
|
|
135
|
+
*
|
|
136
|
+
* Before this the reducer rebuilt each `producerAppeared` entry by hand and
|
|
137
|
+
* dropped everything it did not name, so a `source` the node relayed never
|
|
138
|
+
* reached a tile. A screen share and a camera were two identical `video`
|
|
139
|
+
* producers, and nothing else told them apart.
|
|
140
|
+
*/
|
|
141
|
+
describe("a producer's source", () => {
|
|
142
|
+
it("is kept from producerAppeared", () => {
|
|
143
|
+
const state = reduceRoomState(afterJoin(), {
|
|
144
|
+
event: "producerAppeared",
|
|
145
|
+
producerId: "pc",
|
|
146
|
+
identity: "c",
|
|
147
|
+
kind: "video",
|
|
148
|
+
source: "screen",
|
|
149
|
+
});
|
|
150
|
+
expect(producerById(state, "pc")).toEqual({
|
|
151
|
+
producerId: "pc",
|
|
152
|
+
identity: "c",
|
|
153
|
+
kind: "video",
|
|
154
|
+
paused: false,
|
|
155
|
+
source: "screen",
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it("is left undefined when the node relayed none", () => {
|
|
160
|
+
const state = reduceRoomState(afterJoin(), { event: "producerAppeared", producerId: "pc", identity: "c", kind: "video" });
|
|
161
|
+
expect(producerById(state, "pc")?.source).toBeUndefined();
|
|
162
|
+
expect(producerById(state, "pc")).not.toHaveProperty("source");
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it("is kept per producer from the join snapshot", () => {
|
|
166
|
+
const state = afterJoin({
|
|
167
|
+
producers: [
|
|
168
|
+
{ producerId: "pa", identity: "a", kind: "audio", source: "microphone" },
|
|
169
|
+
{ producerId: "pb", identity: "b", kind: "video" },
|
|
170
|
+
{ producerId: "pc", identity: "b", kind: "video", source: "program" },
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
expect(producerById(state, "pa")?.source).toBe("microphone");
|
|
174
|
+
expect(producerById(state, "pb")?.source).toBeUndefined();
|
|
175
|
+
expect(producerById(state, "pc")?.source).toBe("program");
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
|
|
133
179
|
describe("the information barrier", () => {
|
|
134
180
|
it("drops what a narrowed rule no longer permits, mid-call", () => {
|
|
135
181
|
// The rule is pushed because a rule that only applied at join would not
|
package/src/core/state.ts
CHANGED
|
@@ -24,6 +24,9 @@ export type ProducerEntry = {
|
|
|
24
24
|
identity: string;
|
|
25
25
|
kind: "audio" | "video";
|
|
26
26
|
paused: boolean;
|
|
27
|
+
/** The publisher's declared label ("camera", "screen", "rtmp", "program"),
|
|
28
|
+
* when the node relayed one. For rendering only. */
|
|
29
|
+
source?: string;
|
|
27
30
|
};
|
|
28
31
|
|
|
29
32
|
export type RoomState = {
|
|
@@ -129,7 +132,13 @@ export function reduceRoomState(state: RoomState, frame: EventFrame): RoomState
|
|
|
129
132
|
...state,
|
|
130
133
|
producers: [
|
|
131
134
|
...state.producers,
|
|
132
|
-
{
|
|
135
|
+
{
|
|
136
|
+
producerId: frame.producerId,
|
|
137
|
+
identity: frame.identity,
|
|
138
|
+
kind: frame.kind,
|
|
139
|
+
paused: false,
|
|
140
|
+
...(frame.source ? { source: frame.source } : {}),
|
|
141
|
+
},
|
|
133
142
|
],
|
|
134
143
|
};
|
|
135
144
|
}
|
package/src/react/index.tsx
CHANGED
|
@@ -248,11 +248,21 @@ export function useRecording(): boolean {
|
|
|
248
248
|
* renders one only after the track arrives, and every remote `<video>` is
|
|
249
249
|
* `muted`, so a call had picture and no sound in either direction.
|
|
250
250
|
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
*
|
|
251
|
+
* ## Why the callback is STABLE, and an effect does the re-attaching
|
|
252
|
+
*
|
|
253
|
+
* The callback used to be memoised on `[track]`, so a new track identity made
|
|
254
|
+
* React run the OLD callback with `null` (which pauses the element and clears
|
|
255
|
+
* `srcObject`) and then the new one with the element. That is a black frame and
|
|
256
|
+
* a stall on the viewer's screen, and it fires for reasons that have nothing to
|
|
257
|
+
* do with the picture: the room's snapshot is rebuilt on every change, and a
|
|
258
|
+
* consumer that is closed and re-created (`syncSubscriptions` following the
|
|
259
|
+
* active set) produces a fresh `MediaTrack` for the SAME underlying
|
|
260
|
+
* `MediaStreamTrack`.
|
|
261
|
+
*
|
|
262
|
+
* So the ref callback is now stable - it mounts and unmounts, nothing else -
|
|
263
|
+
* and an effect assigns `srcObject` whenever the underlying track actually
|
|
264
|
+
* changes. `applied` is what makes that idempotent: assigning the same track
|
|
265
|
+
* again is not free, it restarts the element's load and shows as a flicker.
|
|
256
266
|
*/
|
|
257
267
|
export function useRemoteTrack(producerId: string): {
|
|
258
268
|
track: MediaTrack | undefined;
|
|
@@ -260,14 +270,54 @@ export function useRemoteTrack(producerId: string): {
|
|
|
260
270
|
} {
|
|
261
271
|
const tracks = useRoomSnapshot(selectTracks, EMPTY_TRACKS);
|
|
262
272
|
const track = tracks.find((t) => t.producerId === producerId);
|
|
273
|
+
const mediaTrack = track?.track ?? null;
|
|
274
|
+
|
|
275
|
+
// The element this callback last attached to, so DETACHING can undo it.
|
|
276
|
+
const attached = useRef<HTMLMediaElement | null>(null);
|
|
277
|
+
// The `MediaStreamTrack` currently on that element. Compared by identity, so
|
|
278
|
+
// the same track arriving inside a new `MediaTrack` record is a no-op.
|
|
279
|
+
const applied = useRef<MediaStreamTrack | null>(null);
|
|
280
|
+
// Read by the ref callback, which must not depend on the track (see above).
|
|
281
|
+
const latest = useRef<MediaStreamTrack | null>(mediaTrack);
|
|
282
|
+
latest.current = mediaTrack;
|
|
283
|
+
|
|
284
|
+
const attach = useCallback((element: HTMLMediaElement | null) => {
|
|
285
|
+
// React calls a ref callback with null when the element goes away, and
|
|
286
|
+
// ignoring that leaves a detached element holding the stream and still
|
|
287
|
+
// PLAYING it. Nothing on screen shows the orphan; you only hear it,
|
|
288
|
+
// as the same audio a second time, slightly out of step with itself.
|
|
289
|
+
// A remount is enough to cause it, and StrictMode remounts everything
|
|
290
|
+
// once in development, so this reproduced on every dev page load.
|
|
291
|
+
if (!element) {
|
|
292
|
+
const previous = attached.current;
|
|
293
|
+
attached.current = null;
|
|
294
|
+
applied.current = null;
|
|
295
|
+
if (previous) {
|
|
296
|
+
previous.pause();
|
|
297
|
+
previous.srcObject = null;
|
|
298
|
+
}
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
// A newly mounted element is always written to, even with no track yet: an
|
|
302
|
+
// explicit `null` is what says "this element holds nothing", and skipping
|
|
303
|
+
// it would leave whatever a reused element was carrying.
|
|
304
|
+
const previousElement = attached.current;
|
|
305
|
+
attached.current = element;
|
|
306
|
+
if (previousElement === element && applied.current === latest.current) return;
|
|
307
|
+
applied.current = latest.current;
|
|
308
|
+
element.srcObject = latest.current ? new MediaStream([latest.current]) : null;
|
|
309
|
+
}, []);
|
|
263
310
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
311
|
+
// The track almost never exists when the element mounts: the consume round
|
|
312
|
+
// trip lands milliseconds later. This is what puts it on the element then,
|
|
313
|
+
// and what swaps it if the consumer is ever rebuilt.
|
|
314
|
+
useEffect(() => {
|
|
315
|
+
const element = attached.current;
|
|
316
|
+
if (!element) return;
|
|
317
|
+
if (applied.current === mediaTrack) return;
|
|
318
|
+
applied.current = mediaTrack;
|
|
319
|
+
element.srcObject = mediaTrack ? new MediaStream([mediaTrack]) : null;
|
|
320
|
+
}, [mediaTrack]);
|
|
271
321
|
|
|
272
322
|
return { track, attach };
|
|
273
323
|
}
|
|
@@ -26,7 +26,15 @@ import type {
|
|
|
26
26
|
type Recorded = { calls: string[]; transports: FakeTransport[] };
|
|
27
27
|
|
|
28
28
|
class FakeTransport implements MediaTransport {
|
|
29
|
-
readonly produced: { appData?: Record<string, unknown
|
|
29
|
+
readonly produced: { appData?: Record<string, unknown>; codec?: "h264" | "vp8"; encodings?: unknown[] }[] = [];
|
|
30
|
+
/** Records what the room asked the sender for. */
|
|
31
|
+
readonly senderParams: Record<string, unknown> = {};
|
|
32
|
+
readonly sender = {
|
|
33
|
+
getParameters: () => ({ encodings: [] }) as unknown as RTCRtpSendParameters,
|
|
34
|
+
setParameters: async (params: RTCRtpSendParameters) => {
|
|
35
|
+
Object.assign(this.senderParams, params);
|
|
36
|
+
},
|
|
37
|
+
} as unknown as RTCRtpSender;
|
|
30
38
|
readonly consumed: string[] = [];
|
|
31
39
|
closed = false;
|
|
32
40
|
handlers: Partial<TransportHandlers> = {};
|
|
@@ -37,8 +45,19 @@ class FakeTransport implements MediaTransport {
|
|
|
37
45
|
private readonly recorded: Recorded,
|
|
38
46
|
) {}
|
|
39
47
|
|
|
40
|
-
async produce(input: {
|
|
41
|
-
|
|
48
|
+
async produce(input: {
|
|
49
|
+
track: MediaStreamTrack;
|
|
50
|
+
appData?: Record<string, unknown>;
|
|
51
|
+
encodings?: unknown[];
|
|
52
|
+
codec?: "h264" | "vp8";
|
|
53
|
+
}): Promise<MediaProducerHandle> {
|
|
54
|
+
// Recorded EXACTLY as given: a key that is absent and a key set to
|
|
55
|
+
// undefined are different things to mediasoup-client.
|
|
56
|
+
this.produced.push({
|
|
57
|
+
...(input.appData ? { appData: input.appData } : {}),
|
|
58
|
+
...("codec" in input ? { codec: input.codec } : {}),
|
|
59
|
+
...("encodings" in input ? { encodings: input.encodings } : {}),
|
|
60
|
+
});
|
|
42
61
|
// The real transport asks the application to tell the node, and the node's
|
|
43
62
|
// answer is the producer id. Modelled, because the round trip is the thing
|
|
44
63
|
// that can be got wrong.
|
|
@@ -55,6 +74,10 @@ class FakeTransport implements MediaTransport {
|
|
|
55
74
|
pause: vi.fn(),
|
|
56
75
|
resume: vi.fn(),
|
|
57
76
|
close: vi.fn(),
|
|
77
|
+
replaceTrack: vi.fn(async () => undefined),
|
|
78
|
+
// A real browser producer carries one, and the program feed's
|
|
79
|
+
// degradation preference is set through it.
|
|
80
|
+
rtpSender: this.sender,
|
|
58
81
|
};
|
|
59
82
|
}
|
|
60
83
|
|
|
@@ -127,7 +150,7 @@ function fakeDevice(recorded: Recorded) {
|
|
|
127
150
|
* the room is exercised against the same wire the signal client is.
|
|
128
151
|
*/
|
|
129
152
|
function nodeWith(input: {
|
|
130
|
-
producers?: { producerId: string; identity: string; kind: "audio" | "video" }[];
|
|
153
|
+
producers?: { producerId: string; identity: string; kind: "audio" | "video"; source?: string }[];
|
|
131
154
|
iceServers?: IceServer[];
|
|
132
155
|
/**
|
|
133
156
|
* Events delivered on EVERY connection after the join reply and BEFORE the
|
|
@@ -283,6 +306,39 @@ describe("rule 2: one transport per direction, created lazily", () => {
|
|
|
283
306
|
await room.close();
|
|
284
307
|
});
|
|
285
308
|
|
|
309
|
+
it("keeps the PROGRAM feed's resolution, giving up frame rate instead", async () => {
|
|
310
|
+
/**
|
|
311
|
+
* Chrome's default scales the encode down under a low bandwidth estimate
|
|
312
|
+
* or CPU pressure. For the program feed that is wrong twice: it is the
|
|
313
|
+
* broadcast itself, so 1080p arriving as 270p is the product; and the RTMP
|
|
314
|
+
* leg muxes it with `-c:v copy`, where an FLV header carries the dimensions
|
|
315
|
+
* once. A mid-stream resolution change leaves the SPS describing one size
|
|
316
|
+
* and the header another, and the player refuses it with "error #3000"
|
|
317
|
+
* while ffmpeg reports a healthy bitrate and zero dropped frames.
|
|
318
|
+
*/
|
|
319
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
320
|
+
const room = roomFor(nodeWith({}), recorded, false);
|
|
321
|
+
await room.connect();
|
|
322
|
+
|
|
323
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "program");
|
|
324
|
+
|
|
325
|
+
const transport = recorded.transports[0] as unknown as { senderParams: Record<string, unknown> };
|
|
326
|
+
expect(transport.senderParams.degradationPreference).toBe("maintain-resolution");
|
|
327
|
+
await room.close();
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
it("leaves a CAMERA alone, which is better off shrinking than freezing", async () => {
|
|
331
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
332
|
+
const room = roomFor(nodeWith({}), recorded, false);
|
|
333
|
+
await room.connect();
|
|
334
|
+
|
|
335
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "camera");
|
|
336
|
+
|
|
337
|
+
const transport = recorded.transports[0] as unknown as { senderParams: Record<string, unknown> };
|
|
338
|
+
expect(transport.senderParams.degradationPreference).toBeUndefined();
|
|
339
|
+
await room.close();
|
|
340
|
+
});
|
|
341
|
+
|
|
286
342
|
it("reuses the recv transport across subscriptions", async () => {
|
|
287
343
|
const recorded: Recorded = { calls: [], transports: [] };
|
|
288
344
|
const server = nodeWith({
|
|
@@ -421,6 +477,48 @@ describe("rule 3: a consumer resumes only after its track exists", () => {
|
|
|
421
477
|
});
|
|
422
478
|
});
|
|
423
479
|
|
|
480
|
+
/**
|
|
481
|
+
* The publisher's label reaches the tile.
|
|
482
|
+
*
|
|
483
|
+
* The node relays `appData.source` as `source` on the snapshot and on every
|
|
484
|
+
* `producerAppeared`, and the room keeps it on the entry. A consumed track
|
|
485
|
+
* carries it so a screen share, a camera and a program feed can be laid out
|
|
486
|
+
* differently; a producer the node relayed no label for carries none.
|
|
487
|
+
*/
|
|
488
|
+
describe("a consumed track carries the publisher's source", () => {
|
|
489
|
+
it("from the join snapshot", async () => {
|
|
490
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
491
|
+
const server = nodeWith({
|
|
492
|
+
producers: [
|
|
493
|
+
{ producerId: "p-a", identity: "anwalt", kind: "video", source: "screen" },
|
|
494
|
+
{ producerId: "p-b", identity: "anwalt", kind: "audio" },
|
|
495
|
+
],
|
|
496
|
+
});
|
|
497
|
+
const room = roomFor(server, recorded, false);
|
|
498
|
+
await room.connect();
|
|
499
|
+
await room.subscribe("p-a");
|
|
500
|
+
await room.subscribe("p-b");
|
|
501
|
+
|
|
502
|
+
expect(room.tracks.find((t) => t.producerId === "p-a")).toMatchObject({ identity: "anwalt", source: "screen" });
|
|
503
|
+
expect(room.tracks.find((t) => t.producerId === "p-b")).not.toHaveProperty("source");
|
|
504
|
+
await room.close();
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
it("from a producerAppeared announced after the join", async () => {
|
|
508
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
509
|
+
const server = nodeWith({});
|
|
510
|
+
const room = roomFor(server, recorded, false);
|
|
511
|
+
await room.connect();
|
|
512
|
+
|
|
513
|
+
server.event({ event: "producerAppeared", producerId: "p-c", identity: "studio", kind: "video", source: "program" });
|
|
514
|
+
await flush();
|
|
515
|
+
await room.subscribe("p-c");
|
|
516
|
+
|
|
517
|
+
expect(room.tracks[0]).toMatchObject({ producerId: "p-c", identity: "studio", source: "program" });
|
|
518
|
+
await room.close();
|
|
519
|
+
});
|
|
520
|
+
});
|
|
521
|
+
|
|
424
522
|
describe("rule 4: autoSubscribe follows the ACTIVE SET", () => {
|
|
425
523
|
it("subscribes only to what the node put in the set", async () => {
|
|
426
524
|
const recorded: Recorded = { calls: [], transports: [] };
|
|
@@ -521,6 +619,53 @@ describe("publishing", () => {
|
|
|
521
619
|
});
|
|
522
620
|
});
|
|
523
621
|
|
|
622
|
+
/**
|
|
623
|
+
* A publication can say how it wants to be encoded.
|
|
624
|
+
*
|
|
625
|
+
* A camera takes the browser's defaults and that is right. A composed program
|
|
626
|
+
* feed does not: an RTMP restream needs H.264, because RTMP carries nothing
|
|
627
|
+
* else and the egress copies rather than transcodes, and a 1080p canvas at the
|
|
628
|
+
* default bitrate is a smear. Both are facts about ONE publication, so they
|
|
629
|
+
* travel with the `publish` call rather than with the room.
|
|
630
|
+
*/
|
|
631
|
+
describe("publishing with options", () => {
|
|
632
|
+
it("passes the codec and a bitrate cap to the transport", async () => {
|
|
633
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
634
|
+
const server = nodeWith({});
|
|
635
|
+
const room = roomFor(server, recorded, false);
|
|
636
|
+
await room.connect();
|
|
637
|
+
|
|
638
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "program", { codec: "h264", maxBitrateKbps: 3500 });
|
|
639
|
+
|
|
640
|
+
const [produced] = recorded.transports.find((t) => t.direction === "send")!.produced;
|
|
641
|
+
expect(produced).toEqual({
|
|
642
|
+
appData: { source: "program" },
|
|
643
|
+
codec: "h264",
|
|
644
|
+
// kbit/s at the API, bit/s at the encoder. The unit is the whole bug.
|
|
645
|
+
encodings: [{ maxBitrate: 3_500_000 }],
|
|
646
|
+
});
|
|
647
|
+
// And the node still hears the label it checks grants against.
|
|
648
|
+
const produce = requestsOf(server, "produce")[0] as { appData?: { source?: string } };
|
|
649
|
+
expect(produce.appData?.source).toBe("program");
|
|
650
|
+
await room.close();
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
it("passes neither when no options are given, so the defaults stay the browser's", async () => {
|
|
654
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
655
|
+
const server = nodeWith({});
|
|
656
|
+
const room = roomFor(server, recorded, false);
|
|
657
|
+
await room.connect();
|
|
658
|
+
|
|
659
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "camera");
|
|
660
|
+
|
|
661
|
+
const [produced] = recorded.transports.find((t) => t.direction === "send")!.produced;
|
|
662
|
+
expect(produced).toEqual({ appData: { source: "camera" } });
|
|
663
|
+
expect(produced).not.toHaveProperty("codec");
|
|
664
|
+
expect(produced).not.toHaveProperty("encodings");
|
|
665
|
+
await room.close();
|
|
666
|
+
});
|
|
667
|
+
});
|
|
668
|
+
|
|
524
669
|
/**
|
|
525
670
|
* A state called "reconnecting" has to mean something is reconnecting.
|
|
526
671
|
*
|
|
@@ -974,6 +1119,31 @@ describe("publications lost to a drop", () => {
|
|
|
974
1119
|
await room.close();
|
|
975
1120
|
});
|
|
976
1121
|
|
|
1122
|
+
it("never names a program feed, which is a studio's output and not a person's capture", async () => {
|
|
1123
|
+
// Nobody should be asked to "turn the program back on": it is not a
|
|
1124
|
+
// device, and `useLocalMedia`'s controls never touch it. Only the camera
|
|
1125
|
+
// is a lost source here, and republishing the program clears nothing.
|
|
1126
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
1127
|
+
const server = nodeWith({});
|
|
1128
|
+
const { room } = recoveringRoom(server, recorded);
|
|
1129
|
+
await room.connect();
|
|
1130
|
+
|
|
1131
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "camera");
|
|
1132
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "program", { codec: "h264" });
|
|
1133
|
+
server.socket.dropFromServer();
|
|
1134
|
+
await flush();
|
|
1135
|
+
|
|
1136
|
+
await vi.waitFor(() => expect(server.sockets.length).toBe(2));
|
|
1137
|
+
await vi.waitFor(() => expect(room.connectionState).toBe("connected"));
|
|
1138
|
+
expect(room.lostPublicationSources).toEqual(["camera"]);
|
|
1139
|
+
|
|
1140
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "program", { codec: "h264" });
|
|
1141
|
+
expect(room.lostPublicationSources).toEqual(["camera"]);
|
|
1142
|
+
await room.publish({ kind: "video", stop: vi.fn() } as never, "camera");
|
|
1143
|
+
expect(room.lostPublicationSources).toEqual([]);
|
|
1144
|
+
await room.close();
|
|
1145
|
+
});
|
|
1146
|
+
|
|
977
1147
|
it("says nothing after a leave, which lost nothing", async () => {
|
|
978
1148
|
const recorded: Recorded = { calls: [], transports: [] };
|
|
979
1149
|
const server = nodeWith({});
|
|
@@ -1095,3 +1265,66 @@ describe("pausing a publication", () => {
|
|
|
1095
1265
|
await room.close();
|
|
1096
1266
|
});
|
|
1097
1267
|
});
|
|
1268
|
+
|
|
1269
|
+
describe("replaceTrack: a device switch keeps its producer", () => {
|
|
1270
|
+
it("swaps the capture on the handle, stops the old track, keeps the producer id", async () => {
|
|
1271
|
+
const server = nodeWith({ producers: [] });
|
|
1272
|
+
const room = roomFor(server, { calls: [], transports: [] });
|
|
1273
|
+
await room.connect();
|
|
1274
|
+
const first = { kind: "video", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1275
|
+
const second = { kind: "video", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1276
|
+
const published = await room.publish(first, "camera");
|
|
1277
|
+
|
|
1278
|
+
await room.replaceTrack(published.producerId, second);
|
|
1279
|
+
|
|
1280
|
+
expect(published.handle.replaceTrack).toHaveBeenCalledWith(second);
|
|
1281
|
+
expect(first.stop).toHaveBeenCalled();
|
|
1282
|
+
expect(second.stop).not.toHaveBeenCalled();
|
|
1283
|
+
expect(room.localPublications).toHaveLength(1);
|
|
1284
|
+
expect(room.localPublications[0]).toMatchObject({ producerId: published.producerId, track: second, source: "camera" });
|
|
1285
|
+
});
|
|
1286
|
+
|
|
1287
|
+
it("publishes three layers when simulcast is asked for, splitting the caller's cap", async () => {
|
|
1288
|
+
const server = nodeWith({ producers: [] });
|
|
1289
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
1290
|
+
const room = roomFor(server, recorded);
|
|
1291
|
+
await room.connect();
|
|
1292
|
+
const track = { kind: "video", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1293
|
+
|
|
1294
|
+
await room.publish(track, "program", { codec: "vp8", simulcast: true, maxBitrateKbps: 3500 });
|
|
1295
|
+
|
|
1296
|
+
const produced = recorded.transports.find((t) => t.direction === "send")!.produced[0]!;
|
|
1297
|
+
expect(produced.codec).toBe("vp8");
|
|
1298
|
+
expect(produced.encodings).toEqual([
|
|
1299
|
+
{ rid: "q", scaleResolutionDownBy: 4, scalabilityMode: "L1T1", maxBitrate: 350_000 },
|
|
1300
|
+
{ rid: "h", scaleResolutionDownBy: 2, scalabilityMode: "L1T1", maxBitrate: 875_000 },
|
|
1301
|
+
{ rid: "f", scaleResolutionDownBy: 1, scalabilityMode: "L1T1", maxBitrate: 3_500_000 },
|
|
1302
|
+
]);
|
|
1303
|
+
});
|
|
1304
|
+
|
|
1305
|
+
it("still publishes ONE encoding when simulcast is not asked for", async () => {
|
|
1306
|
+
// The small-call case: everybody can carry the one encoding, and layers
|
|
1307
|
+
// nobody consumes are encoder time spent on nobody.
|
|
1308
|
+
const server = nodeWith({ producers: [] });
|
|
1309
|
+
const recorded: Recorded = { calls: [], transports: [] };
|
|
1310
|
+
const room = roomFor(server, recorded);
|
|
1311
|
+
await room.connect();
|
|
1312
|
+
const track = { kind: "video", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1313
|
+
|
|
1314
|
+
await room.publish(track, "camera", { maxBitrateKbps: 1200 });
|
|
1315
|
+
|
|
1316
|
+
const produced = recorded.transports.find((t) => t.direction === "send")!.produced[0]!;
|
|
1317
|
+
expect(produced.encodings).toEqual([{ maxBitrate: 1_200_000 }]);
|
|
1318
|
+
});
|
|
1319
|
+
|
|
1320
|
+
it("refuses a track of the other kind and an unknown publication", async () => {
|
|
1321
|
+
const server = nodeWith({ producers: [] });
|
|
1322
|
+
const room = roomFor(server, { calls: [], transports: [] });
|
|
1323
|
+
await room.connect();
|
|
1324
|
+
const video = { kind: "video", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1325
|
+
const audio = { kind: "audio", stop: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn() } as unknown as MediaStreamTrack;
|
|
1326
|
+
const published = await room.publish(video, "camera");
|
|
1327
|
+
await expect(room.replaceTrack(published.producerId, audio)).rejects.toThrow(/cannot carry/);
|
|
1328
|
+
await expect(room.replaceTrack("nope", video)).rejects.toThrow(/no such publication/);
|
|
1329
|
+
});
|
|
1330
|
+
});
|
|
@@ -27,14 +27,24 @@ import type {
|
|
|
27
27
|
* place.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
const
|
|
30
|
+
const CODEC_MIME: Record<"h264" | "vp8", string> = { h264: "video/h264", vp8: "video/vp8" };
|
|
31
|
+
|
|
32
|
+
const adapt = (transport: Transport, device: Device): MediaTransport => ({
|
|
31
33
|
id: transport.id,
|
|
32
34
|
|
|
33
|
-
async produce({ track, appData, encodings }) {
|
|
35
|
+
async produce({ track, appData, encodings, codec }) {
|
|
36
|
+
// The router's own entry for the codec, which is what mediasoup-client
|
|
37
|
+
// wants rather than a name. Missing means the router does not offer it
|
|
38
|
+
// and the default applies, which the caller can see from the producer.
|
|
39
|
+
const wanted = codec ? CODEC_MIME[codec] : undefined;
|
|
40
|
+
const capability = wanted
|
|
41
|
+
? device.rtpCapabilities.codecs?.find((c) => c.mimeType.toLowerCase() === wanted)
|
|
42
|
+
: undefined;
|
|
34
43
|
const producer = await transport.produce({
|
|
35
44
|
track,
|
|
36
45
|
...(encodings ? { encodings: encodings as never } : {}),
|
|
37
46
|
...(appData ? { appData } : {}),
|
|
47
|
+
...(capability ? { codec: capability } : {}),
|
|
38
48
|
});
|
|
39
49
|
return producer as unknown as MediaProducerHandle;
|
|
40
50
|
},
|
|
@@ -103,12 +113,12 @@ export function createBrowserDevice(): MediaDevice {
|
|
|
103
113
|
createSendTransport({ description, iceServers, handlers }) {
|
|
104
114
|
const transport = device.createSendTransport(common(description, iceServers));
|
|
105
115
|
wire(transport, handlers);
|
|
106
|
-
return adapt(transport);
|
|
116
|
+
return adapt(transport, device);
|
|
107
117
|
},
|
|
108
118
|
createRecvTransport({ description, iceServers, handlers }) {
|
|
109
119
|
const transport = device.createRecvTransport(common(description, iceServers));
|
|
110
120
|
wire(transport, handlers);
|
|
111
|
-
return adapt(transport);
|
|
121
|
+
return adapt(transport, device);
|
|
112
122
|
},
|
|
113
123
|
};
|
|
114
124
|
}
|
package/src/room/device.ts
CHANGED
|
@@ -62,6 +62,8 @@ export interface MediaTransport {
|
|
|
62
62
|
track: MediaStreamTrack;
|
|
63
63
|
appData?: Record<string, unknown>;
|
|
64
64
|
encodings?: unknown[];
|
|
65
|
+
/** Prefer this codec from the loaded capabilities; ignored when absent. */
|
|
66
|
+
codec?: "h264" | "vp8";
|
|
65
67
|
}): Promise<MediaProducerHandle>;
|
|
66
68
|
consume(input: {
|
|
67
69
|
id: string;
|
|
@@ -78,7 +80,18 @@ export type MediaProducerHandle = {
|
|
|
78
80
|
pause(): void;
|
|
79
81
|
resume(): void;
|
|
80
82
|
close(): void;
|
|
83
|
+
/** Swap the capture feeding this producer. The node sees nothing. */
|
|
84
|
+
replaceTrack(track: MediaStreamTrack): Promise<void>;
|
|
81
85
|
readonly closed: boolean;
|
|
86
|
+
/**
|
|
87
|
+
* The underlying sender, when the implementation has one.
|
|
88
|
+
*
|
|
89
|
+
* Exposed for `degradationPreference`, which is a SENDER-level setting with
|
|
90
|
+
* no per-encoding equivalent, so there is no way to ask for it through
|
|
91
|
+
* `produce()`. Optional because a non-browser implementation has no such
|
|
92
|
+
* object, and every caller has to cope with its absence anyway.
|
|
93
|
+
*/
|
|
94
|
+
readonly rtpSender?: RTCRtpSender | null;
|
|
82
95
|
};
|
|
83
96
|
|
|
84
97
|
export type MediaConsumerHandle = {
|