vani-meeting-server 2.8.4 → 2.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ServerHandler.d.ts +0 -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 +99 -68
- package/package.json +1 -1
package/lib/ServerHandler.d.ts
CHANGED
|
@@ -10,10 +10,6 @@ export interface PlainTransportPayload {
|
|
|
10
10
|
remoteIpAddress: string;
|
|
11
11
|
isAudioRequired: boolean;
|
|
12
12
|
isVideoRequired: boolean;
|
|
13
|
-
audioPort?: number;
|
|
14
|
-
audioRtcpPort?: number;
|
|
15
|
-
videoPort?: number;
|
|
16
|
-
videoRtcpPort?: number;
|
|
17
13
|
extraData?: any;
|
|
18
14
|
}
|
|
19
15
|
export interface PlainTransportCreatedCallback {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PlainTransportPayload } from "../ServerHandler";
|
|
2
|
+
export interface BroadcastDataSource {
|
|
3
|
+
getPortForBroadcasting(plainTransportPayload: PlainTransportPayload): Promise<BroadcastPortResponse>;
|
|
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,90 @@ 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
|
-
await this.plainTransportForAudio.connect({
|
|
393
|
-
ip: connectToIp,
|
|
394
|
-
port: port,
|
|
395
|
-
rtcpPort: rtcpPort,
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
for (const eachRoomProducer of this.getAllProducerForRoom()) {
|
|
399
|
-
if (this.plainTransportForAudio && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'audio') {
|
|
400
|
-
try {
|
|
401
|
-
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("consumeProducerForPlainTransport", eachRoomProducer.producer);
|
|
402
|
-
await this.consumeProducerForPlainTransport(this.plainTransportForAudio, eachRoomProducer.producer);
|
|
403
|
-
}
|
|
404
|
-
catch (err) {
|
|
405
|
-
console.log("Error- 485 line no", err);
|
|
406
|
-
}
|
|
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) {
|
|
407
395
|
}
|
|
408
396
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
const rtcpPort = plainTransportPayload.videoRtcpPort;
|
|
415
|
-
await this.plainTransportForVideo.connect({
|
|
416
|
-
ip: connectToIp,
|
|
417
|
-
port: port,
|
|
418
|
-
rtcpPort: rtcpPort,
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
for (const eachRoomProducer of this.getAllProducerForRoom()) {
|
|
422
|
-
if (this.plainTransportForVideo && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'video') {
|
|
423
|
-
try {
|
|
424
|
-
await this.consumeProducerForPlainTransport(this.plainTransportForVideo, eachRoomProducer.producer);
|
|
425
|
-
}
|
|
426
|
-
catch (err) {
|
|
427
|
-
}
|
|
397
|
+
else if (isVideoRequired && eachRoomProducer && eachRoomProducer.producer && eachRoomProducer.producer.kind === 'video') {
|
|
398
|
+
try {
|
|
399
|
+
await this.createPlainTransportAndConsumeProducer(plainTransportPayload, eachRoomProducer.producer);
|
|
400
|
+
}
|
|
401
|
+
catch (err) {
|
|
428
402
|
}
|
|
429
403
|
}
|
|
430
404
|
}
|
|
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
|
+
// }
|
|
431
450
|
const response = { plainTransportPayload: plainTransportPayload, roomId: this.roomId, rtpCapabilities: this.sendRouter?.rtpCapabilities };
|
|
432
451
|
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnPlainTransportCreated, response);
|
|
433
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) {
|
|
460
|
+
await plainTransport.connect({
|
|
461
|
+
ip: plainTransportPayload.remoteIpAddress,
|
|
462
|
+
port: portForBroadcasting.port,
|
|
463
|
+
rtcpPort: portForBroadcasting.rtcpPort,
|
|
464
|
+
});
|
|
465
|
+
await this.consumeProducerForPlainTransport(plainTransport, producer);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
};
|
|
434
469
|
async consumeProducerForPlainTransport(plainTransport, producer) {
|
|
435
470
|
if (producer && producer.closed === false && this.sendRouter && this.sendRouter.rtpCapabilities) {
|
|
436
471
|
try {
|
|
@@ -446,19 +481,6 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
446
481
|
catch (err) {
|
|
447
482
|
console.log("consumeProducerForPlainTransport ", err);
|
|
448
483
|
}
|
|
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
484
|
}
|
|
463
485
|
}
|
|
464
486
|
async redisSubscribeToTopic(topic) {
|
|
@@ -513,15 +535,24 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
513
535
|
catch (err) {
|
|
514
536
|
}
|
|
515
537
|
});
|
|
538
|
+
this.plainTransportsForBroadCasting.forEach((eachPlainTransportsForBroadCasting) => {
|
|
539
|
+
try {
|
|
540
|
+
eachPlainTransportsForBroadCasting.close();
|
|
541
|
+
}
|
|
542
|
+
catch (err) {
|
|
543
|
+
}
|
|
544
|
+
});
|
|
516
545
|
this.plainTransportConsumers = [];
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
546
|
+
this.plainTransportsForBroadCasting = [];
|
|
547
|
+
this.plainTransportPayload = undefined;
|
|
548
|
+
// if (this.plainTransportForAudio) {
|
|
549
|
+
// this.plainTransportForAudio.close()
|
|
550
|
+
// this.plainTransportForAudio = undefined
|
|
551
|
+
// }
|
|
552
|
+
// if (this.plainTransportForVideo) {
|
|
553
|
+
// this.plainTransportForVideo.close()
|
|
554
|
+
// this.plainTransportForVideo = undefined
|
|
555
|
+
// }
|
|
525
556
|
this.recvRouter.forEach((eachRouter) => {
|
|
526
557
|
eachRouter.close();
|
|
527
558
|
});
|