vani-meeting-server 2.8.4 → 2.8.6
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/lib/ServerHandler.d.ts +2 -4
- package/lib/interface/BroadcastDataSource.d.ts +9 -0
- package/lib/interface/BroadcastDataSource.js +2 -0
- package/lib/models/WebSocketServerStartRequest.d.ts +2 -0
- package/lib/models/WebSocketServerStartRequest.js +1 -0
- package/lib/sfu/SFUEachRoomHandler.d.ts +3 -2
- package/lib/sfu/SFUEachRoomHandler.js +102 -69
- package/lib/sfu/SFUHandler.js +1 -1
- package/package.json +1 -1
package/lib/ServerHandler.d.ts
CHANGED
|
@@ -6,19 +6,17 @@ import { WebSocketServerStartRequest } from "./models/WebSocketServerStartReques
|
|
|
6
6
|
import { SFUHandler } from "./sfu/SFUHandler";
|
|
7
7
|
import { WebSocketHandler } from "./websocket/WebSocketHandler";
|
|
8
8
|
import { RtpCapabilities } from "mediasoup/node/lib/rtpParametersTypes";
|
|
9
|
+
import { BroadcastPortResponse } from "./interface/BroadcastDataSource";
|
|
9
10
|
export interface PlainTransportPayload {
|
|
10
11
|
remoteIpAddress: string;
|
|
11
12
|
isAudioRequired: boolean;
|
|
12
13
|
isVideoRequired: boolean;
|
|
13
|
-
audioPort?: number;
|
|
14
|
-
audioRtcpPort?: number;
|
|
15
|
-
videoPort?: number;
|
|
16
|
-
videoRtcpPort?: number;
|
|
17
14
|
extraData?: any;
|
|
18
15
|
}
|
|
19
16
|
export interface PlainTransportCreatedCallback {
|
|
20
17
|
roomId: string;
|
|
21
18
|
plainTransportPayload: PlainTransportPayload;
|
|
19
|
+
broadcastPortResponse?: BroadcastPortResponse;
|
|
22
20
|
rtpCapabilities?: RtpCapabilities;
|
|
23
21
|
}
|
|
24
22
|
export declare class ServerHandler {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PlainTransportPayload } from "../ServerHandler";
|
|
2
|
+
export interface BroadcastDataSource {
|
|
3
|
+
getPortForBroadcasting(plainTransportPayload: PlainTransportPayload): Promise<BroadcastPortResponse | undefined>;
|
|
4
|
+
}
|
|
5
|
+
export interface BroadcastPortResponse {
|
|
6
|
+
port?: number;
|
|
7
|
+
rtcpPort?: number;
|
|
8
|
+
plainTransportPayload: PlainTransportPayload;
|
|
9
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { BroadcastDataSource } from "../interface/BroadcastDataSource";
|
|
1
2
|
export declare enum ConnectionProtocol {
|
|
2
3
|
TCP = "TCP",
|
|
3
4
|
UDP = "UDP"
|
|
@@ -26,4 +27,5 @@ export declare class WebSocketServerStartRequest {
|
|
|
26
27
|
wssServerHostForCert?: string;
|
|
27
28
|
shouldShareDetailStats: boolean;
|
|
28
29
|
shouldShareStreamScoreChange: boolean;
|
|
30
|
+
broadcastDataSource?: BroadcastDataSource;
|
|
29
31
|
}
|
|
@@ -36,9 +36,9 @@ export declare class SFUEachRoomHandler extends BaseSFUWebsocket implements SFUE
|
|
|
36
36
|
private sendRouter?;
|
|
37
37
|
private roomId;
|
|
38
38
|
roomPaticipants: Map<string, SFUEachRoomUserHandler>;
|
|
39
|
-
private
|
|
40
|
-
private plainTransportForVideo?;
|
|
39
|
+
private plainTransportsForBroadCasting;
|
|
41
40
|
private plainTransportConsumers;
|
|
41
|
+
private plainTransportPayload?;
|
|
42
42
|
private workers?;
|
|
43
43
|
private sendWorkerIndex;
|
|
44
44
|
private audioObserver?;
|
|
@@ -72,6 +72,7 @@ export declare class SFUEachRoomHandler extends BaseSFUWebsocket implements SFUE
|
|
|
72
72
|
onUserLeft(participant: Participant): void;
|
|
73
73
|
resumeAllBroadcastingConsumers(): Promise<void>;
|
|
74
74
|
startBroadcasting(plainTransportPayload: PlainTransportPayload): Promise<void>;
|
|
75
|
+
createPlainTransportAndConsumeProducer: (plainTransportPayload: PlainTransportPayload, producer: Producer) => Promise<void>;
|
|
75
76
|
private consumeProducerForPlainTransport;
|
|
76
77
|
private redisSubscribeToTopic;
|
|
77
78
|
private onRedisMessage;
|
|
@@ -42,9 +42,11 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
42
42
|
sendRouter;
|
|
43
43
|
roomId;
|
|
44
44
|
roomPaticipants = new Map();
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
plainTransportsForBroadCasting = [];
|
|
46
|
+
// private plainTransportForAudio?: PlainTransport
|
|
47
|
+
// private plainTransportForVideo?: PlainTransport
|
|
47
48
|
plainTransportConsumers = [];
|
|
49
|
+
plainTransportPayload;
|
|
48
50
|
workers;
|
|
49
51
|
sendWorkerIndex = -1;
|
|
50
52
|
audioObserver;
|
|
@@ -336,11 +338,11 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
336
338
|
}
|
|
337
339
|
catch (err) {
|
|
338
340
|
}
|
|
339
|
-
if (this.
|
|
340
|
-
await this.
|
|
341
|
+
if (this.plainTransportPayload && this.plainTransportPayload.isAudioRequired && producer.kind === "audio") {
|
|
342
|
+
await this.createPlainTransportAndConsumeProducer(this.plainTransportPayload, producer);
|
|
341
343
|
}
|
|
342
|
-
|
|
343
|
-
await this.
|
|
344
|
+
if (this.plainTransportPayload && this.plainTransportPayload.isVideoRequired && producer.kind === "video") {
|
|
345
|
+
await this.createPlainTransportAndConsumeProducer(this.plainTransportPayload, producer);
|
|
344
346
|
}
|
|
345
347
|
}
|
|
346
348
|
if (this.eachRoomMutliserverHandler) {
|
|
@@ -380,57 +382,92 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
380
382
|
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("=====startBroadcasting=======");
|
|
381
383
|
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log(plainTransportPayload);
|
|
382
384
|
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("=====startBroadcasting=======");
|
|
385
|
+
this.plainTransportPayload = plainTransportPayload;
|
|
383
386
|
const isAudioRequired = plainTransportPayload.isAudioRequired;
|
|
384
387
|
const isVideoRequired = plainTransportPayload.isVideoRequired;
|
|
385
|
-
const connectToIp = plainTransportPayload.remoteIpAddress
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
ip: connectToIp,
|
|
394
|
-
port: port,
|
|
395
|
-
rtcpPort: rtcpPort,
|
|
396
|
-
});
|
|
388
|
+
// const connectToIp = plainTransportPayload.remoteIpAddress
|
|
389
|
+
for (const eachRoomProducer of this.getAllProducerForRoom()) {
|
|
390
|
+
if (isAudioRequired && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'audio') {
|
|
391
|
+
try {
|
|
392
|
+
await this.createPlainTransportAndConsumeProducer(plainTransportPayload, eachRoomProducer.producer);
|
|
393
|
+
}
|
|
394
|
+
catch (err) {
|
|
395
|
+
}
|
|
397
396
|
}
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
catch (err) {
|
|
405
|
-
console.log("Error- 485 line no", err);
|
|
406
|
-
}
|
|
397
|
+
else if (isVideoRequired && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'video') {
|
|
398
|
+
try {
|
|
399
|
+
await this.createPlainTransportAndConsumeProducer(plainTransportPayload, eachRoomProducer.producer);
|
|
400
|
+
}
|
|
401
|
+
catch (err) {
|
|
407
402
|
}
|
|
408
403
|
}
|
|
409
404
|
}
|
|
410
|
-
if (
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
405
|
+
// if (isAudioRequired && this.plainTransportForAudio === undefined) {
|
|
406
|
+
// ServerHandler.getInstance().serverStartRequest && ServerHandler.getInstance().serverStartRequest.logLevel !== LogLevel.None && console.log("isAudioRequired",isAudioRequired , "plainTransportForAudio is undefined")
|
|
407
|
+
// this.plainTransportForAudio = await this.sendRouter?.createPlainTransport(await Constant.plainTransportConfiguration())
|
|
408
|
+
// if (this.plainTransportForAudio) {
|
|
409
|
+
// const port = plainTransportPayload.audioPort
|
|
410
|
+
// const rtcpPort = (await Constant.plainTransportConfiguration()).rtcpMux ? undefined : plainTransportPayload.audioRtcpPort
|
|
411
|
+
// await this.plainTransportForAudio.connect({
|
|
412
|
+
// ip: connectToIp,
|
|
413
|
+
// port: port,
|
|
414
|
+
// rtcpPort: rtcpPort,
|
|
415
|
+
// })
|
|
416
|
+
// }
|
|
417
|
+
// for(const eachRoomProducer of this.getAllProducerForRoom()){
|
|
418
|
+
// if (this.plainTransportForAudio && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'audio') {
|
|
419
|
+
// try {
|
|
420
|
+
// ServerHandler.getInstance().serverStartRequest && ServerHandler.getInstance().serverStartRequest.logLevel !== LogLevel.None && console.log("consumeProducerForPlainTransport",eachRoomProducer.producer)
|
|
421
|
+
// await this.consumeProducerForPlainTransport(this.plainTransportForAudio, eachRoomProducer.producer)
|
|
422
|
+
// }
|
|
423
|
+
// catch (err) {
|
|
424
|
+
// console.log("Error- 485 line no",err )
|
|
425
|
+
// }
|
|
426
|
+
// }
|
|
427
|
+
// }
|
|
428
|
+
// }
|
|
429
|
+
// if (isVideoRequired && this.plainTransportForVideo === undefined) {
|
|
430
|
+
// this.plainTransportForVideo = await this.sendRouter?.createPlainTransport(await Constant.plainTransportConfiguration())
|
|
431
|
+
// if (this.plainTransportForVideo) {
|
|
432
|
+
// const port = plainTransportPayload.videoPort
|
|
433
|
+
// const rtcpPort = plainTransportPayload.videoRtcpPort
|
|
434
|
+
// await this.plainTransportForVideo.connect({
|
|
435
|
+
// ip: connectToIp,
|
|
436
|
+
// port: port,
|
|
437
|
+
// rtcpPort: rtcpPort,
|
|
438
|
+
// })
|
|
439
|
+
// }
|
|
440
|
+
// for(const eachRoomProducer of this.getAllProducerForRoom()){
|
|
441
|
+
// if (this.plainTransportForVideo && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'video') {
|
|
442
|
+
// try {
|
|
443
|
+
// await this.consumeProducerForPlainTransport(this.plainTransportForVideo, eachRoomProducer.producer)
|
|
444
|
+
// }
|
|
445
|
+
// catch (err) {
|
|
446
|
+
// }
|
|
447
|
+
// }
|
|
448
|
+
// }
|
|
449
|
+
// }
|
|
450
|
+
// const response: PlainTransportCreatedCallback = { plainTransportPayload: plainTransportPayload, roomId: this.roomId ,rtpCapabilities : this.sendRouter?.rtpCapabilities}
|
|
451
|
+
// EventEmitterHandler.getInstance().vaniEventEmitter.emit(VaniEvent.OnPlainTransportCreated, response)
|
|
452
|
+
}
|
|
453
|
+
createPlainTransportAndConsumeProducer = async (plainTransportPayload, producer) => {
|
|
454
|
+
if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.broadcastDataSource) {
|
|
455
|
+
const [portForBroadcasting, plainTransport] = await Promise.all([
|
|
456
|
+
ServerHandler_1.ServerHandler.getInstance().serverStartRequest.broadcastDataSource?.getPortForBroadcasting(plainTransportPayload),
|
|
457
|
+
this.sendRouter?.createPlainTransport(await Constant_1.default.plainTransportConfiguration())
|
|
458
|
+
]);
|
|
459
|
+
if (plainTransport && portForBroadcasting) {
|
|
460
|
+
await plainTransport.connect({
|
|
461
|
+
ip: plainTransportPayload.remoteIpAddress,
|
|
462
|
+
port: portForBroadcasting.port,
|
|
463
|
+
rtcpPort: portForBroadcasting.rtcpPort,
|
|
419
464
|
});
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
try {
|
|
424
|
-
await this.consumeProducerForPlainTransport(this.plainTransportForVideo, eachRoomProducer.producer);
|
|
425
|
-
}
|
|
426
|
-
catch (err) {
|
|
427
|
-
}
|
|
428
|
-
}
|
|
465
|
+
await this.consumeProducerForPlainTransport(plainTransport, producer);
|
|
466
|
+
const response = { plainTransportPayload: plainTransportPayload, roomId: this.roomId, rtpCapabilities: this.sendRouter?.rtpCapabilities, broadcastPortResponse: portForBroadcasting };
|
|
467
|
+
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnPlainTransportCreated, response);
|
|
429
468
|
}
|
|
430
469
|
}
|
|
431
|
-
|
|
432
|
-
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnPlainTransportCreated, response);
|
|
433
|
-
}
|
|
470
|
+
};
|
|
434
471
|
async consumeProducerForPlainTransport(plainTransport, producer) {
|
|
435
472
|
if (producer && producer.closed === false && this.sendRouter && this.sendRouter.rtpCapabilities) {
|
|
436
473
|
try {
|
|
@@ -446,19 +483,6 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
446
483
|
catch (err) {
|
|
447
484
|
console.log("consumeProducerForPlainTransport ", err);
|
|
448
485
|
}
|
|
449
|
-
// try{
|
|
450
|
-
// setTimeout(async () => {
|
|
451
|
-
// try{
|
|
452
|
-
// this.resumeAllBroadcastingConsumers()
|
|
453
|
-
// }
|
|
454
|
-
// catch(err){
|
|
455
|
-
// console.log("consumeProducerForPlainTransport 542",err )
|
|
456
|
-
// }
|
|
457
|
-
// }, 500);
|
|
458
|
-
// }
|
|
459
|
-
// catch(err){
|
|
460
|
-
// console.log("consumeProducerForPlainTransport 546",err )
|
|
461
|
-
// }
|
|
462
486
|
}
|
|
463
487
|
}
|
|
464
488
|
async redisSubscribeToTopic(topic) {
|
|
@@ -513,15 +537,24 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
513
537
|
catch (err) {
|
|
514
538
|
}
|
|
515
539
|
});
|
|
540
|
+
this.plainTransportsForBroadCasting.forEach((eachPlainTransportsForBroadCasting) => {
|
|
541
|
+
try {
|
|
542
|
+
eachPlainTransportsForBroadCasting.close();
|
|
543
|
+
}
|
|
544
|
+
catch (err) {
|
|
545
|
+
}
|
|
546
|
+
});
|
|
516
547
|
this.plainTransportConsumers = [];
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
548
|
+
this.plainTransportsForBroadCasting = [];
|
|
549
|
+
this.plainTransportPayload = undefined;
|
|
550
|
+
// if (this.plainTransportForAudio) {
|
|
551
|
+
// this.plainTransportForAudio.close()
|
|
552
|
+
// this.plainTransportForAudio = undefined
|
|
553
|
+
// }
|
|
554
|
+
// if (this.plainTransportForVideo) {
|
|
555
|
+
// this.plainTransportForVideo.close()
|
|
556
|
+
// this.plainTransportForVideo = undefined
|
|
557
|
+
// }
|
|
525
558
|
this.recvRouter.forEach((eachRouter) => {
|
|
526
559
|
eachRouter.close();
|
|
527
560
|
});
|
package/lib/sfu/SFUHandler.js
CHANGED
|
@@ -97,7 +97,7 @@ class SFUHandler {
|
|
|
97
97
|
sfuEachRoomHandler.startBroadcasting(plainTransportPayload);
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
|
-
const response = { plainTransportPayload: plainTransportPayload, roomId: forRoomid };
|
|
100
|
+
const response = { plainTransportPayload: plainTransportPayload, roomId: forRoomid, broadcastPortResponse: undefined };
|
|
101
101
|
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnPlainTransportCreateError, response);
|
|
102
102
|
}
|
|
103
103
|
}
|