sip-connector 15.0.0 → 15.2.0

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.
Files changed (89) hide show
  1. package/README.md +160 -11
  2. package/dist/{@SipConnector-DbvV1Leg.js → @SipConnector-BEZk1hmx.js} +511 -229
  3. package/dist/@SipConnector-hpySQIBa.cjs +1 -0
  4. package/dist/ApiManager/__tests-utils__/helpers.d.ts +9 -0
  5. package/dist/ApiManager/constants.d.ts +2 -1
  6. package/dist/ApiManager/eventNames.d.ts +2 -1
  7. package/dist/CallManager/MCUCallStrategy.d.ts +1 -1
  8. package/dist/ConnectionManager/@ConnectionManager.d.ts +3 -3
  9. package/dist/ConnectionManager/getExtraHeadersRemoteAddress.d.ts +2 -2
  10. package/dist/IncomingCallManager/@IncomingCallManager.d.ts +2 -2
  11. package/dist/SipConnector/@SipConnector.d.ts +4 -2
  12. package/dist/SipConnector/eventNames.d.ts +1 -1
  13. package/dist/SipConnectorFacade/SipConnectorFacade.d.ts +15 -1
  14. package/dist/StatsManager/@StatsManager.d.ts +19 -0
  15. package/dist/StatsManager/eventNames.d.ts +2 -0
  16. package/dist/StatsManager/index.d.ts +2 -0
  17. package/dist/StatsPeerConnection/StatsPeerConnection.d.ts +20 -0
  18. package/dist/StatsPeerConnection/__fixtures__/callStaticsState.d.ts +3923 -0
  19. package/dist/StatsPeerConnection/constants.d.ts +14 -0
  20. package/dist/StatsPeerConnection/eventNames.d.ts +10 -0
  21. package/dist/StatsPeerConnection/index.d.ts +4 -0
  22. package/dist/StatsPeerConnection/parseStatsReports.d.ts +14 -0
  23. package/dist/StatsPeerConnection/requestAllStatistics.d.ts +11 -0
  24. package/dist/StatsPeerConnection/typings.d.ts +194 -0
  25. package/dist/StatsPeerConnection/utils/hasAvailableStats.d.ts +2 -0
  26. package/dist/StatsPeerConnection/utils/index.d.ts +3 -0
  27. package/dist/StatsPeerConnection/utils/now.d.ts +2 -0
  28. package/dist/StatsPeerConnection/utils/statsReportToObject.d.ts +4 -0
  29. package/dist/VideoSendingBalancer/CodecProvider.d.ts +7 -0
  30. package/dist/VideoSendingBalancer/ParametersSetterWithQueue.d.ts +12 -0
  31. package/dist/VideoSendingBalancer/SenderBalancer.d.ts +52 -0
  32. package/dist/VideoSendingBalancer/SenderFinder.d.ts +7 -0
  33. package/dist/VideoSendingBalancer/TaskQueue.d.ts +20 -0
  34. package/dist/VideoSendingBalancer/VideoSendingBalancer.d.ts +44 -0
  35. package/dist/VideoSendingBalancer/VideoSendingEventHandler.d.ts +25 -0
  36. package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidth.d.ts +4 -0
  37. package/dist/VideoSendingBalancer/calcBitrate/calcMaxBitrateByWidthAndCodec.d.ts +4 -0
  38. package/dist/VideoSendingBalancer/calcBitrate/index.d.ts +1 -0
  39. package/dist/VideoSendingBalancer/calcResolution/calcScaleResolutionDownBy.d.ts +6 -0
  40. package/dist/VideoSendingBalancer/calcResolution/index.d.ts +1 -0
  41. package/dist/VideoSendingBalancer/index.d.ts +3 -0
  42. package/dist/VideoSendingBalancer/types.d.ts +36 -0
  43. package/dist/__fixtures__/BaseSession.mock.d.ts +1 -1
  44. package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -2
  45. package/dist/__fixtures__/RTCRtpSenderMock.d.ts +1 -0
  46. package/dist/__fixtures__/RTCSessionMock.d.ts +2 -2
  47. package/dist/__fixtures__/UA.mock.d.ts +2 -2
  48. package/dist/__fixtures__/eventNames.d.ts +1 -1
  49. package/dist/__fixtures__/jssip.mock.d.ts +1 -1
  50. package/dist/doMock.cjs +1 -1
  51. package/dist/doMock.js +21 -22
  52. package/dist/index.cjs +1 -1
  53. package/dist/index.d.ts +2 -2
  54. package/dist/index.js +697 -562
  55. package/dist/tools/createUaParser/createUaParser.d.ts +4 -0
  56. package/dist/tools/createUaParser/index.d.ts +1 -0
  57. package/dist/tools/createUaParser/isElectronEnvironment.d.ts +2 -0
  58. package/dist/tools/error/index.d.ts +1 -1
  59. package/dist/tools/index.d.ts +5 -1
  60. package/dist/{setParametersToSender → tools/setParametersToSender}/configureDegradationPreference.d.ts +1 -1
  61. package/dist/{setParametersToSender → tools/setParametersToSender}/configureEncodings.d.ts +1 -1
  62. package/dist/tools/setParametersToSender/index.d.ts +3 -0
  63. package/dist/tools/setParametersToSender/setEncodingsToSender.d.ts +6 -0
  64. package/dist/tools/setParametersToSender/setMaxBitrateToSender.d.ts +2 -0
  65. package/dist/tools/setParametersToSender/setParametersToSender.d.ts +4 -0
  66. package/dist/tools/setParametersToSender/types.d.ts +5 -0
  67. package/dist/tools/syncMediaState/createSyncMediaState.d.ts +18 -0
  68. package/dist/tools/syncMediaState/index.d.ts +1 -18
  69. package/dist/utils/utils.d.ts +4 -0
  70. package/package.json +12 -18
  71. package/dist/@SipConnector-CZo7A8_q.cjs +0 -1
  72. package/dist/setParametersToSender/index.d.ts +0 -1
  73. package/dist/setParametersToSender/setParametersToSender.d.ts +0 -7
  74. package/dist/videoSendingBalancer/balance.d.ts +0 -10
  75. package/dist/videoSendingBalancer/getMaxBitrateByWidth.d.ts +0 -4
  76. package/dist/videoSendingBalancer/getMaxBitrateByWidthAndCodec.d.ts +0 -4
  77. package/dist/videoSendingBalancer/index.d.ts +0 -13
  78. package/dist/videoSendingBalancer/processSender.d.ts +0 -10
  79. package/dist/videoSendingBalancer/scaleBitrate.d.ts +0 -2
  80. package/dist/videoSendingBalancer/setEncodingsToSender.d.ts +0 -10
  81. /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/hasAv1Codec.d.ts +0 -0
  82. /package/dist/{videoSendingBalancer → VideoSendingBalancer/calcBitrate}/scaleBitrateByCodec.d.ts +0 -0
  83. /package/dist/{videoSendingBalancer → tools}/scaleResolutionAndBitrate.d.ts +0 -0
  84. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureEmptyEncodings.d.ts +0 -0
  85. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureMaxBitrate.d.ts +0 -0
  86. /package/dist/{setParametersToSender → tools/setParametersToSender}/configureScaleResolutionDownBy.d.ts +0 -0
  87. /package/dist/{setParametersToSender → tools/setParametersToSender}/hasChangedRTCRtpSendParameters.d.ts +0 -0
  88. /package/dist/{setParametersToSender → tools/setParametersToSender}/resolveHasNeedToUpdateItemEncoding.d.ts +0 -0
  89. /package/dist/{videoSendingBalancer → utils}/hasIncludesString.d.ts +0 -0
@@ -0,0 +1,14 @@
1
+ export declare const INTERVAL_COLLECT_STATISTICS = 1000;
2
+ export declare enum EStatsTypes {
3
+ INBOUND_RTP = "inbound-rtp",
4
+ REMOTE_OUTBOUND_RTP = "remote-outbound-rtp",
5
+ MEDIA_SOURCE = "media-source",
6
+ OUTBOUND_RTP = "outbound-rtp",
7
+ REMOTE_INBOUND_RTP = "remote-inbound-rtp",
8
+ CODEC = "codec",
9
+ CANDIDATE_PAIR = "candidate-pair",
10
+ CERTIFICATE = "certificate",
11
+ TRANSPORT = "transport",
12
+ LOCAL_CANDIDATE = "local-candidate",
13
+ REMOTE_CANDIDATE = "remote-candidate"
14
+ }
@@ -0,0 +1,10 @@
1
+ import { TypedEvents } from 'events-constructor';
2
+ import { TInbound, TOutbound } from './typings';
3
+ export type TEventMap = {
4
+ collected: {
5
+ outbound: TOutbound;
6
+ inbound: TInbound;
7
+ };
8
+ };
9
+ export declare const EVENT_NAMES: readonly ["collected"];
10
+ export type TEvents = TypedEvents<TEventMap>;
@@ -0,0 +1,4 @@
1
+ export { EStatsTypes } from './constants';
2
+ export type { TEventMap } from './eventNames';
3
+ export { default as StatsPeerConnection } from './StatsPeerConnection';
4
+ export { default as hasAvailableStats } from './utils/hasAvailableStats';
@@ -0,0 +1,14 @@
1
+ import { TInbound, TOutbound, TSynchronizationSources } from './typings';
2
+ declare const parseStatsReports: ({ audioSenderStats, videoSenderFirstStats, videoSenderSecondStats, audioReceiverStats, videoReceiverFirstStats, videoReceiverSecondStats, synchronizationSources, }: {
3
+ audioSenderStats?: RTCStatsReport;
4
+ videoSenderFirstStats?: RTCStatsReport;
5
+ videoSenderSecondStats?: RTCStatsReport;
6
+ audioReceiverStats?: RTCStatsReport;
7
+ videoReceiverFirstStats?: RTCStatsReport;
8
+ videoReceiverSecondStats?: RTCStatsReport;
9
+ synchronizationSources: TSynchronizationSources;
10
+ }) => {
11
+ inbound: TInbound;
12
+ outbound: TOutbound;
13
+ };
14
+ export default parseStatsReports;
@@ -0,0 +1,11 @@
1
+ import { TSynchronizationSources } from './typings';
2
+ declare const requestAllStatistics: (peerConnection: RTCPeerConnection) => Promise<{
3
+ synchronizationSources: TSynchronizationSources;
4
+ audioSenderStats: RTCStatsReport | undefined;
5
+ videoSenderFirstStats: RTCStatsReport | undefined;
6
+ videoSenderSecondStats: RTCStatsReport | undefined;
7
+ audioReceiverStats: RTCStatsReport | undefined;
8
+ videoReceiverFirstStats: RTCStatsReport | undefined;
9
+ videoReceiverSecondStats: RTCStatsReport | undefined;
10
+ }>;
11
+ export default requestAllStatistics;
@@ -0,0 +1,194 @@
1
+ import { EStatsTypes } from './constants';
2
+ export type TMedia = {
3
+ trackIdentifier?: string;
4
+ item?: RTCRtpSynchronizationSource;
5
+ };
6
+ export type TSynchronizationSources = {
7
+ audio: TMedia;
8
+ video: TMedia;
9
+ };
10
+ export type TCandidatePair = RTCIceCandidatePairStats & {
11
+ consentRequestsSent?: number;
12
+ nominated?: boolean;
13
+ packetsDiscardedOnSend?: number;
14
+ packetsSent?: number;
15
+ priority?: number;
16
+ writable?: boolean;
17
+ };
18
+ export type TCandidate = {
19
+ candidateType?: string;
20
+ ip?: string;
21
+ networkType?: string;
22
+ isRemote?: boolean;
23
+ address?: string;
24
+ component?: RTCIceComponent;
25
+ foundation?: string;
26
+ port?: number;
27
+ priority?: number;
28
+ protocol?: RTCIceProtocol;
29
+ relatedAddress?: string;
30
+ relatedPort?: number;
31
+ sdpMLineIndex?: number;
32
+ sdpMid?: string;
33
+ tcpType?: string;
34
+ usernameFragment?: string;
35
+ };
36
+ export type TOutboundRtp = RTCOutboundRtpStreamStats & {
37
+ active?: boolean;
38
+ encoderImplementation?: string;
39
+ frameHeight?: number;
40
+ contentType?: string;
41
+ frameWidth?: number;
42
+ framesPerSecond?: number;
43
+ framesSent?: number;
44
+ hugeFramesSent?: number;
45
+ keyFramesEncoded?: number;
46
+ headerBytesSent?: number;
47
+ qualityLimitationDurations?: {
48
+ bandwidth?: number;
49
+ cpu?: number;
50
+ none?: number;
51
+ other?: number;
52
+ };
53
+ qualityLimitationReason?: string;
54
+ qualityLimitationResolutionChanges?: number;
55
+ mediaSourceId?: string;
56
+ mediaType?: string;
57
+ mid?: string;
58
+ retransmittedBytesSent?: number;
59
+ retransmittedPacketsSent?: number;
60
+ totalEncodeTime?: number;
61
+ totalEncodedBytesTarget?: number;
62
+ totalPacketSendDelay?: number;
63
+ targetBitrate?: number;
64
+ trackId?: string;
65
+ };
66
+ export type TTransport = RTCTransportStats & {
67
+ dtlsRole?: string;
68
+ iceLocalUsernameFragment?: string;
69
+ iceRole?: string;
70
+ iceState?: string;
71
+ packetsSent?: number;
72
+ remoteCertificateId?: string;
73
+ selectedCandidatePairChanges?: number;
74
+ };
75
+ export type TInboundRtp = RTCInboundRtpStreamStats & {
76
+ audioLevel?: number;
77
+ bytesReceived?: number;
78
+ decoderImplementation?: string;
79
+ framesDropped?: number;
80
+ framesReceived?: number;
81
+ headerBytesReceived?: number;
82
+ jitterBufferDelay?: number;
83
+ jitterBufferEmittedCount?: number;
84
+ keyFramesDecoded?: number;
85
+ fecPacketsDiscarded?: number;
86
+ fecPacketsReceived?: number;
87
+ jitterBufferMinimumDelay?: number;
88
+ jitterBufferTargetDelay?: number;
89
+ lastPacketReceivedTimestamp?: number;
90
+ totalSamplesReceived?: number;
91
+ };
92
+ export type TMediaSource = {
93
+ audioLevel?: number;
94
+ frames?: number;
95
+ framesPerSecond?: number;
96
+ height?: number;
97
+ width?: number;
98
+ totalAudioEnergy?: number;
99
+ totalSamplesDuration?: number;
100
+ trackIdentifier?: string;
101
+ };
102
+ export type TCertificate = {
103
+ base64Certificate?: string;
104
+ fingerprint?: string;
105
+ fingerprintAlgorithm?: string;
106
+ };
107
+ export type TRemoteInboundRtp = {
108
+ codecId?: string;
109
+ fractionLost?: number;
110
+ jitter?: number;
111
+ localId?: string;
112
+ packetsLost?: number;
113
+ roundTripTime?: number;
114
+ roundTripTimeMeasurements?: number;
115
+ ssrc?: number;
116
+ totalRoundTripTime?: number;
117
+ transportId?: string;
118
+ };
119
+ export type TRemoteOutboundRtp = {
120
+ bytesSent?: number;
121
+ codecId?: string;
122
+ localId?: string;
123
+ packetsSent?: number;
124
+ remoteTimestamp?: number;
125
+ reportsSent?: number;
126
+ roundTripTimeMeasurements?: number;
127
+ ssrc?: number;
128
+ totalRoundTripTime?: number;
129
+ transportId?: string;
130
+ };
131
+ export type TOutboundVideo = {
132
+ outboundRtp?: TOutboundRtp;
133
+ mediaSource?: TMediaSource;
134
+ codec?: RTCRtpCodecParameters;
135
+ remoteInboundRtp?: TRemoteInboundRtp;
136
+ };
137
+ export type TOutboundAudio = {
138
+ outboundRtp?: TOutboundRtp;
139
+ mediaSource?: TMediaSource;
140
+ codec?: RTCRtpCodecParameters;
141
+ remoteInboundRtp?: TRemoteInboundRtp;
142
+ };
143
+ export type TAdditional = {
144
+ candidatePair?: TCandidatePair;
145
+ certificate?: TCertificate;
146
+ localCandidate?: TCandidate;
147
+ remoteCandidate?: TCandidate;
148
+ transport?: TTransport;
149
+ };
150
+ export type TInboundVideo = {
151
+ inboundRtp?: TInboundRtp;
152
+ codec?: RTCRtpCodecParameters;
153
+ synchronizationSources?: TMedia;
154
+ };
155
+ export type TInboundAudio = {
156
+ inboundRtp?: TInboundRtp;
157
+ codec?: RTCRtpCodecParameters;
158
+ remoteOutboundRtp?: TRemoteOutboundRtp;
159
+ synchronizationSources?: TMedia;
160
+ };
161
+ export type TInbound = {
162
+ video: TInboundVideo;
163
+ secondVideo: TInboundVideo;
164
+ audio: TInboundAudio;
165
+ additional: TAdditional;
166
+ };
167
+ export type TOutbound = {
168
+ video: TOutboundVideo;
169
+ secondVideo: TOutboundVideo;
170
+ audio: TOutboundAudio;
171
+ additional: TAdditional;
172
+ };
173
+ export type TAudioStatistics = {
174
+ [EStatsTypes.OUTBOUND_RTP]?: TOutboundRtp;
175
+ [EStatsTypes.CODEC]?: RTCRtpCodecParameters;
176
+ [EStatsTypes.MEDIA_SOURCE]?: TMediaSource;
177
+ [EStatsTypes.REMOTE_INBOUND_RTP]?: TRemoteInboundRtp;
178
+ [EStatsTypes.INBOUND_RTP]?: TInboundRtp;
179
+ [EStatsTypes.REMOTE_OUTBOUND_RTP]?: TRemoteOutboundRtp;
180
+ };
181
+ export type TVideoStatistics = {
182
+ [EStatsTypes.OUTBOUND_RTP]?: TOutboundRtp;
183
+ [EStatsTypes.CODEC]?: RTCRtpCodecParameters;
184
+ [EStatsTypes.MEDIA_SOURCE]?: TMediaSource;
185
+ [EStatsTypes.REMOTE_INBOUND_RTP]?: TRemoteInboundRtp;
186
+ [EStatsTypes.INBOUND_RTP]?: TInboundRtp;
187
+ };
188
+ export type TParsedStatistics = {
189
+ [EStatsTypes.CANDIDATE_PAIR]?: TCandidatePair;
190
+ [EStatsTypes.CERTIFICATE]?: TCertificate;
191
+ [EStatsTypes.LOCAL_CANDIDATE]?: TCandidate;
192
+ [EStatsTypes.REMOTE_CANDIDATE]?: TCandidate;
193
+ [EStatsTypes.TRANSPORT]?: TTransport;
194
+ };
@@ -0,0 +1,2 @@
1
+ declare const hasAvailableStats: () => boolean;
2
+ export default hasAvailableStats;
@@ -0,0 +1,3 @@
1
+ export { default as hasAvailableStats } from './hasAvailableStats';
2
+ export { default as now } from './now';
3
+ export { default as statsReportToObject } from './statsReportToObject';
@@ -0,0 +1,2 @@
1
+ declare const now: () => number;
2
+ export default now;
@@ -0,0 +1,4 @@
1
+ declare const statsReportToObject: (results: ReadonlyMap<string, {
2
+ type: string;
3
+ }>) => {};
4
+ export default statsReportToObject;
@@ -0,0 +1,7 @@
1
+ import { ICodecProvider } from './types';
2
+ /**
3
+ * Реализация провайдера кодеков
4
+ */
5
+ export declare class CodecProvider implements ICodecProvider {
6
+ getCodecFromSender(sender: RTCRtpSender): Promise<string>;
7
+ }
@@ -0,0 +1,12 @@
1
+ import { TOnSetParameters, TResultSetParametersToSender } from '../tools';
2
+ import { IEncodingParameters, IParametersSetter } from './types';
3
+ /**
4
+ * Обёртка для ParametersSetter с использованием TaskQueue
5
+ */
6
+ export declare class ParametersSetterWithQueue implements IParametersSetter {
7
+ private readonly taskQueue;
8
+ private readonly onSetParameters?;
9
+ constructor(onSetParameters?: TOnSetParameters);
10
+ setEncodingsToSender(sender: RTCRtpSender, parameters: IEncodingParameters): Promise<TResultSetParametersToSender>;
11
+ stop(): void;
12
+ }
@@ -0,0 +1,52 @@
1
+ import { TResultSetParametersToSender } from '../tools';
2
+ import { ICodecProvider, IMainCamHeaders, IParametersSetter, ISenderFinder } from './types';
3
+ /**
4
+ * Бизнес-логика балансировки отправителей
5
+ * Отвечает за определение стратегии и применение параметров к отправителю
6
+ */
7
+ export declare class SenderBalancer {
8
+ private readonly ignoreForCodec?;
9
+ private readonly senderFinder;
10
+ private readonly codecProvider;
11
+ private readonly parametersSetter;
12
+ private readonly resultNoChanged;
13
+ constructor({ senderFinder, codecProvider, parametersSetter, }: {
14
+ senderFinder: ISenderFinder;
15
+ codecProvider: ICodecProvider;
16
+ parametersSetter: IParametersSetter;
17
+ }, options: {
18
+ ignoreForCodec?: string;
19
+ });
20
+ /**
21
+ * Выполняет балансировку на основе заголовков от сервера
22
+ * @param connection - RTCPeerConnection для получения отправителей
23
+ * @param headers - Заголовки от сервера с командами управления
24
+ * @returns Promise с результатом балансировки
25
+ */
26
+ balance(connection: RTCPeerConnection, headers?: IMainCamHeaders): Promise<TResultSetParametersToSender>;
27
+ /**
28
+ * Обрабатывает отправитель в зависимости от команды управления
29
+ * @param context - Контекст балансировки
30
+ * @returns Promise с результатом обработки
31
+ */
32
+ private processSender;
33
+ /**
34
+ * Понижает разрешение отправителя (пауза камеры)
35
+ * @param context - Контекст балансировки
36
+ * @returns Promise с результатом
37
+ */
38
+ private downgradeResolutionSender;
39
+ /**
40
+ * Устанавливает битрейт на основе разрешения трека
41
+ * @param context - Контекст балансировки
42
+ * @returns Promise с результатом
43
+ */
44
+ private setBitrateByTrackResolution;
45
+ /**
46
+ * Устанавливает разрешение отправителя на основе заголовка
47
+ * @param resolutionMainCam - Разрешение главной камеры
48
+ * @param context - Контекст балансировки
49
+ * @returns Promise с результатом
50
+ */
51
+ private setResolutionSender;
52
+ }
@@ -0,0 +1,7 @@
1
+ import { ISenderFinder } from './types';
2
+ /**
3
+ * Реализация поиска видео отправителя
4
+ */
5
+ export declare class SenderFinder implements ISenderFinder {
6
+ findVideoSender(senders: RTCRtpSender[]): RTCRtpSender | undefined;
7
+ }
@@ -0,0 +1,20 @@
1
+ import { ITaskQueue } from './types';
2
+ /**
3
+ * Очередь задач с правильной обработкой ошибок
4
+ * Обеспечивает последовательное выполнение задач и логирование ошибок
5
+ */
6
+ export declare class TaskQueue<T> implements ITaskQueue<T> {
7
+ private readonly stackPromises;
8
+ /**
9
+ * Добавляет задачу в очередь и возвращает Promise с результатом
10
+ * @param task - Функция для выполнения
11
+ * @returns Promise с результатом выполнения задачи
12
+ */
13
+ add(task: () => Promise<T>): Promise<T>;
14
+ stop(): void;
15
+ /**
16
+ * Выполняет задачи из очереди с обработкой ошибок
17
+ * @returns Promise с результатом выполнения
18
+ */
19
+ private run;
20
+ }
@@ -0,0 +1,44 @@
1
+ import { SipConnector } from '../SipConnector';
2
+ import { TResultSetParametersToSender } from '../tools';
3
+ import { IBalancerOptions } from './types';
4
+ /**
5
+ * Контроллер/фасад для балансировки видеопотоков
6
+ * Координирует работу обработчика событий, балансировщика и очереди задач
7
+ */
8
+ declare class VideoSendingBalancer {
9
+ private readonly eventHandler;
10
+ private readonly senderBalancer;
11
+ private readonly parametersSetterWithQueue;
12
+ private serverHeaders?;
13
+ constructor(sipConnector: SipConnector, { ignoreForCodec, onSetParameters }?: IBalancerOptions);
14
+ /**
15
+ * Подписывается на события управления главной камерой
16
+ */
17
+ subscribe(): void;
18
+ /**
19
+ * Отписывается от событий и сбрасывает состояние
20
+ */
21
+ unsubscribe(): void;
22
+ /**
23
+ * Сбрасывает состояние балансировщика
24
+ */
25
+ reset(): void;
26
+ /**
27
+ * Перебалансирует текущее состояние
28
+ * @returns Promise с результатом балансировки
29
+ */
30
+ reBalance(): Promise<TResultSetParametersToSender>;
31
+ /**
32
+ * Выполняет балансировку на основе текущего состояния
33
+ * @returns Promise с результатом балансировки
34
+ */
35
+ private balanceByTrack;
36
+ /**
37
+ * Обработчик событий управления главной камерой
38
+ * @param headers - Заголовки от сервера
39
+ */
40
+ private readonly handleMainCamControl;
41
+ }
42
+ declare const resolveVideoSendingBalancer: (sipConnector: SipConnector, options?: IBalancerOptions) => VideoSendingBalancer;
43
+ export default VideoSendingBalancer;
44
+ export { resolveVideoSendingBalancer };
@@ -0,0 +1,25 @@
1
+ import { SipConnector } from '../SipConnector';
2
+ import { IEventHandler, IMainCamHeaders } from './types';
3
+ /**
4
+ * Обработчик событий управления главной камерой
5
+ * Отвечает за подписку и отписку от событий SipConnector
6
+ */
7
+ export declare class VideoSendingEventHandler implements IEventHandler {
8
+ private readonly sipConnector;
9
+ private currentHandler?;
10
+ constructor(sipConnector: SipConnector);
11
+ /**
12
+ * Подписывается на события управления главной камерой
13
+ * @param handler - Обработчик события
14
+ */
15
+ subscribe(handler: (headers: IMainCamHeaders) => void): void;
16
+ /**
17
+ * Отписывается от событий управления главной камерой
18
+ */
19
+ unsubscribe(): void;
20
+ /**
21
+ * Получает соединение из SipConnector
22
+ * @returns RTCPeerConnection или undefined
23
+ */
24
+ getConnection(): RTCPeerConnection | undefined;
25
+ }
@@ -0,0 +1,4 @@
1
+ export declare const MINIMUM_BITRATE: number;
2
+ export declare const MAXIMUM_BITRATE: number;
3
+ declare const calcMaxBitrateByWidth: (maxWidth: number) => number;
4
+ export default calcMaxBitrateByWidth;
@@ -0,0 +1,4 @@
1
+ export declare const getMinimumBitrate: (codec?: string) => number;
2
+ export declare const getMaximumBitrate: (codec?: string) => number;
3
+ declare const calcMaxBitrateByWidthAndCodec: (maxWidth: number, codec?: string) => number;
4
+ export default calcMaxBitrateByWidthAndCodec;
@@ -0,0 +1 @@
1
+ export { default as calcMaxBitrateByWidthAndCodec, getMaximumBitrate, getMinimumBitrate, } from './calcMaxBitrateByWidthAndCodec';
@@ -0,0 +1,6 @@
1
+ import { TSize } from '../../types';
2
+ declare const calcScaleResolutionDownBy: ({ videoTrack, targetSize, }: {
3
+ videoTrack: MediaStreamVideoTrack;
4
+ targetSize: TSize;
5
+ }) => number;
6
+ export default calcScaleResolutionDownBy;
@@ -0,0 +1 @@
1
+ export { default as calcScaleResolutionDownBy } from './calcScaleResolutionDownBy';
@@ -0,0 +1,3 @@
1
+ export { calcMaxBitrateByWidthAndCodec } from './calcBitrate';
2
+ export { calcScaleResolutionDownBy } from './calcResolution';
3
+ export { resolveVideoSendingBalancer, default as VideoSendingBalancer, } from './VideoSendingBalancer';
@@ -0,0 +1,36 @@
1
+ import { EEventsMainCAM } from '../ApiManager';
2
+ import { TOnSetParameters, TResultSetParametersToSender } from '../tools';
3
+ export interface IBalancerOptions {
4
+ ignoreForCodec?: string;
5
+ onSetParameters?: TOnSetParameters;
6
+ }
7
+ export interface IMainCamHeaders {
8
+ mainCam?: EEventsMainCAM;
9
+ resolutionMainCam?: string;
10
+ }
11
+ export interface IBalancingContext {
12
+ sender: RTCRtpSender;
13
+ videoTrack: MediaStreamVideoTrack;
14
+ codec?: string;
15
+ }
16
+ export interface ISenderFinder {
17
+ findVideoSender: (senders: RTCRtpSender[]) => RTCRtpSender | undefined;
18
+ }
19
+ export interface ICodecProvider {
20
+ getCodecFromSender: (sender: RTCRtpSender) => Promise<string>;
21
+ }
22
+ export interface IEncodingParameters {
23
+ scaleResolutionDownBy: number;
24
+ maxBitrate: number;
25
+ }
26
+ export interface IParametersSetter {
27
+ setEncodingsToSender: (sender: RTCRtpSender, parameters: IEncodingParameters, onSetParameters?: TOnSetParameters) => Promise<TResultSetParametersToSender>;
28
+ }
29
+ export interface IEventHandler {
30
+ subscribe: (handler: (headers: IMainCamHeaders) => void) => void;
31
+ unsubscribe: () => void;
32
+ getConnection: () => RTCPeerConnection | undefined;
33
+ }
34
+ export interface ITaskQueue<T> {
35
+ add: (task: () => Promise<T>) => Promise<T>;
36
+ }
@@ -1,6 +1,6 @@
1
- import { AnswerOptions, ExtraHeaders, HoldOptions, MediaStreamTypes, NameAddrHeader, OnHoldResult, RTCPeerConnectionDeprecated, RTCSession, ReferOptions, RenegotiateOptions, SessionDirection, SessionStatus, TerminateOptions, URI, C as constants } from '@krivega/jssip';
2
1
  import { Events } from 'events-constructor';
3
2
  import { SESSION_JSSIP_EVENT_NAMES } from './eventNames';
3
+ import { AnswerOptions, ExtraHeaders, HoldOptions, MediaStreamTypes, NameAddrHeader, OnHoldResult, RTCPeerConnectionDeprecated, RTCSession, ReferOptions, RenegotiateOptions, SessionDirection, SessionStatus, TerminateOptions, URI, C as constants } from '@krivega/jssip';
4
4
  export type TEventHandlers = Record<string, (data: unknown) => void>;
5
5
  declare class BaseSession implements RTCSession {
6
6
  originator: string;
@@ -1,7 +1,7 @@
1
- import { RTCPeerConnectionDeprecated } from '@krivega/jssip';
2
1
  import { Events } from 'events-constructor';
3
- import { MediaStreamTrackMock } from 'webrtc-mock';
4
2
  import { default as RTCRtpSenderMock } from './RTCRtpSenderMock';
3
+ import { RTCPeerConnectionDeprecated } from '@krivega/jssip';
4
+ import { MediaStreamTrackMock } from 'webrtc-mock';
5
5
  export declare enum EEvent {
6
6
  TRACK = "track"
7
7
  }
@@ -1,4 +1,5 @@
1
1
  declare class RTCRtpSenderMock implements RTCRtpSender {
2
+ stats: RTCStatsReport;
2
3
  dtmf: RTCDTMFSender | null;
3
4
  track: MediaStreamTrack | null;
4
5
  transport: RTCDtlsTransport | null;
@@ -1,5 +1,5 @@
1
- import { IncomingInfoEvent, NameAddrHeader } from '@krivega/jssip';
2
- import { TEventHandlers, default as BaseSession } from './BaseSession.mock';
1
+ import { NameAddrHeader, IncomingInfoEvent } from '@krivega/jssip';
2
+ import { default as BaseSession, TEventHandlers } from './BaseSession.mock';
3
3
  export declare const FAILED_CONFERENCE_NUMBER = "777";
4
4
  export declare const createDeclineStartPresentationError: () => Error;
5
5
  declare class RTCSessionMock extends BaseSession {
@@ -1,8 +1,8 @@
1
- import { DisconnectEvent, UA as IUA, IncomingRequest, UAConfiguration, UAConfigurationParams, UAEventMap } from '@krivega/jssip';
2
1
  import { Events } from 'events-constructor';
3
- import { TEventHandlers } from './BaseSession.mock';
4
2
  import { default as Registrator } from './Registrator.mock';
5
3
  import { default as RTCSessionMock } from './RTCSessionMock';
4
+ import { DisconnectEvent, UA as IUA, IncomingRequest, UAConfiguration, UAConfigurationParams, UAEventMap } from '@krivega/jssip';
5
+ import { TEventHandlers } from './BaseSession.mock';
6
6
  export declare const PASSWORD_CORRECT = "PASSWORD_CORRECT";
7
7
  export declare const PASSWORD_CORRECT_2 = "PASSWORD_CORRECT_2";
8
8
  export declare const NAME_INCORRECT = "NAME_INCORRECT";
@@ -2,7 +2,7 @@ export declare const UA_SYNTHETICS_EVENT_NAMES: readonly ["incomingCall", "decli
2
2
  export declare const UA_JSSIP_EVENT_NAMES: readonly ["connecting", "connected", "disconnected", "newRTCSession", "registered", "unregistered", "registrationFailed", "newMessage", "sipEvent"];
3
3
  export declare const SESSION_SYNTHETICS_EVENT_NAMES: readonly ["availableSecondRemoteStream", "notAvailableSecondRemoteStream", "mustStopPresentation", "shareState", "enterRoom", "useLicense", "peerconnection:confirmed", "peerconnection:ontrack", "channels", "ended:fromserver", "main-cam-control", "admin-start-main-cam", "admin-stop-main-cam", "admin-stop-mic", "admin-start-mic", "admin-force-sync-media-state", "participant:move-request-to-spectators", "participant:move-request-to-participants"];
4
4
  export declare const SESSION_JSSIP_EVENT_NAMES: readonly ["ended", "connecting", "sending", "reinvite", "replaces", "refer", "progress", "accepted", "confirmed", "peerconnection", "failed", "muted", "unmuted", "newDTMF", "newInfo", "hold", "unhold", "update", "sdp", "icecandidate", "getusermediafailed", "peerconnection:createofferfailed", "peerconnection:createanswerfailed", "peerconnection:setlocaldescriptionfailed", "peerconnection:setremotedescriptionfailed", "presentation:start", "presentation:started", "presentation:end", "presentation:ended", "presentation:failed"];
5
- export declare const UA_EVENT_NAMES: ("connecting" | "connected" | "disconnected" | "newRTCSession" | "registered" | "unregistered" | "registrationFailed" | "newMessage" | "sipEvent" | "channels:notify" | "participant:added-to-list-moderators" | "participant:removed-from-list-moderators" | "participant:move-request-to-stream" | "participation:accepting-word-request" | "participation:cancelling-word-request" | "webcast:started" | "webcast:stopped" | "account:changed" | "account:deleted" | "conference:participant-token-issued" | "incomingCall" | "declinedIncomingCall" | "terminatedIncomingCall" | "failedIncomingCall")[];
5
+ export declare const UA_EVENT_NAMES: ("connecting" | "channels:notify" | "participant:added-to-list-moderators" | "participant:removed-from-list-moderators" | "participant:move-request-to-stream" | "participation:accepting-word-request" | "participation:cancelling-word-request" | "webcast:started" | "webcast:stopped" | "account:changed" | "account:deleted" | "conference:participant-token-issued" | "connected" | "disconnected" | "newRTCSession" | "registered" | "unregistered" | "registrationFailed" | "newMessage" | "sipEvent" | "incomingCall" | "declinedIncomingCall" | "terminatedIncomingCall" | "failedIncomingCall")[];
6
6
  export declare const SESSION_EVENT_NAMES: readonly ["ended", "connecting", "sending", "reinvite", "replaces", "refer", "progress", "accepted", "confirmed", "peerconnection", "failed", "muted", "unmuted", "newDTMF", "newInfo", "hold", "unhold", "update", "sdp", "icecandidate", "getusermediafailed", "peerconnection:createofferfailed", "peerconnection:createanswerfailed", "peerconnection:setlocaldescriptionfailed", "peerconnection:setremotedescriptionfailed", "presentation:start", "presentation:started", "presentation:end", "presentation:ended", "presentation:failed", "availableSecondRemoteStream", "notAvailableSecondRemoteStream", "mustStopPresentation", "shareState", "enterRoom", "useLicense", "peerconnection:confirmed", "peerconnection:ontrack", "channels", "ended:fromserver", "main-cam-control", "admin-start-main-cam", "admin-stop-main-cam", "admin-stop-mic", "admin-start-mic", "admin-force-sync-media-state", "participant:move-request-to-spectators", "participant:move-request-to-participants"];
7
7
  export type TEventUA = (typeof UA_EVENT_NAMES)[number];
8
8
  export type TEventSession = (typeof SESSION_EVENT_NAMES)[number];
@@ -1,6 +1,6 @@
1
- import { RTCSession, UA } from '@krivega/jssip';
2
1
  import { default as UAMock } from './UA.mock';
3
2
  import { default as WebSocketInterfaceMock } from './WebSocketInterface.mock';
3
+ import { RTCSession, UA } from '@krivega/jssip';
4
4
  declare const jssip: {
5
5
  triggerNewInfo: (rtcSession: RTCSession, extraHeaders: [string, string][]) => void;
6
6
  triggerNewSipEvent: (ua: UA, extraHeaders: [string, string][]) => void;