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.
@@ -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
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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
  }
@@ -31,5 +31,6 @@ class WebSocketServerStartRequest {
31
31
  wssServerHostForCert;
32
32
  shouldShareDetailStats = false;
33
33
  shouldShareStreamScoreChange = false;
34
+ broadcastDataSource;
34
35
  }
35
36
  exports.WebSocketServerStartRequest = WebSocketServerStartRequest;
@@ -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 plainTransportForAudio?;
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
- plainTransportForAudio;
46
- plainTransportForVideo;
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.plainTransportForAudio && producer.kind === "audio") {
340
- await this.consumeProducerForPlainTransport(this.plainTransportForAudio, producer);
341
+ if (this.plainTransportPayload && this.plainTransportPayload.isAudioRequired && producer.kind === "audio") {
342
+ await this.createPlainTransportAndConsumeProducer(this.plainTransportPayload, producer);
341
343
  }
342
- else if (this.plainTransportForVideo && producer.kind === "video") {
343
- await this.consumeProducerForPlainTransport(this.plainTransportForVideo, producer);
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
- if (isAudioRequired && this.plainTransportForAudio === undefined) {
387
- ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("isAudioRequired", isAudioRequired, "plainTransportForAudio is undefined");
388
- this.plainTransportForAudio = await this.sendRouter?.createPlainTransport(await Constant_1.default.plainTransportConfiguration());
389
- if (this.plainTransportForAudio) {
390
- const port = plainTransportPayload.audioPort;
391
- const rtcpPort = (await Constant_1.default.plainTransportConfiguration()).rtcpMux ? undefined : plainTransportPayload.audioRtcpPort;
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
- if (isVideoRequired && this.plainTransportForVideo === undefined) {
411
- this.plainTransportForVideo = await this.sendRouter?.createPlainTransport(await Constant_1.default.plainTransportConfiguration());
412
- if (this.plainTransportForVideo) {
413
- const port = plainTransportPayload.videoPort;
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
- if (this.plainTransportForAudio) {
518
- this.plainTransportForAudio.close();
519
- this.plainTransportForAudio = undefined;
520
- }
521
- if (this.plainTransportForVideo) {
522
- this.plainTransportForVideo.close();
523
- this.plainTransportForVideo = undefined;
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
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vani-meeting-server",
3
- "version": "2.8.4",
3
+ "version": "2.8.5",
4
4
  "description": "Vani Meeting Server SDK",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",