@livedigital/client 3.56.1 → 3.57.0-lk-5354-api-reference.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.
@@ -1,9 +1,34 @@
1
1
  import type { AudioStreamStats, VideoStreamStats, ScoresCalculatorConfig, DeviceType } from './types';
2
+ /**
3
+ * Утилита для расчёта MOS-оценок на основе WebRTC-статистики.
4
+ *
5
+ * Подходит, если приложению нужно самостоятельно интерпретировать качество
6
+ * аудио и видео, строить индикаторы сети или принимать решения о деградации UI.
7
+ */
2
8
  export declare class ScoresCalculator {
3
9
  private readonly config;
4
10
  constructor(config?: ScoresCalculatorConfig);
11
+ /**
12
+ * Рассчитывает MOS-оценку качества аудиопотока.
13
+ *
14
+ * @param stats Частичный набор аудиометрик. Отсутствующие поля будут заполнены значениями по умолчанию.
15
+ * @returns Итоговая оценка качества аудио по шкале MOS.
16
+ */
5
17
  calculateAudioMOS(stats: Partial<AudioStreamStats>): number;
18
+ /**
19
+ * Рассчитывает MOS-оценку качества видеопотока.
20
+ *
21
+ * @param stats Частичный набор видеометрик. Отсутствующие поля будут заполнены значениями по умолчанию.
22
+ * @returns Итоговая оценка качества видео по шкале MOS.
23
+ */
6
24
  calculateVideoMOS(stats: Partial<VideoStreamStats>): number;
25
+ /**
26
+ * Объединяет аудио- и видеооценки в одну интегральную MOS-метрику.
27
+ *
28
+ * @param Qa MOS-оценка аудио.
29
+ * @param Qv MOS-оценка видео.
30
+ * @param deviceType Тип устройства, для которого нужно скорректировать итоговую модель восприятия.
31
+ */
7
32
  calculateAVCompositeMOS(Qa: number, Qv: number, deviceType?: DeviceType): number;
8
33
  private mergeConfig;
9
34
  private normalizeAudioStats;
@@ -1,29 +1,58 @@
1
1
  import type { ParsedConnectionStats, ParsedInboundAudioStreamStats, ParsedInboundVideoStreamStats, ParsedOutboundAudioStreamStats, ParsedOutboundVideoStreamStats, ParsedRemoteInboundStreamStats } from 'webrtc-issue-detector';
2
+ /**
3
+ * Нормализованные метрики аудиопотока, которые используются при расчёте качества.
4
+ */
2
5
  export interface AudioStreamStats {
6
+ /** SSRC потока, к которому относятся расчётные метрики. */
3
7
  ssrc: number;
8
+ /** Доля потерянных аудиопакетов в процентах. */
4
9
  packetLoss: number;
10
+ /** Текущий bitrate потока. */
5
11
  bitrate: number;
12
+ /** Оценка RTT до удалённой стороны в миллисекундах. */
6
13
  roundTripTime: number;
14
+ /** Задержка буфера воспроизведения или кодирования в миллисекундах. */
7
15
  bufferDelay: number;
16
+ /** Показывает, включена ли FEC-защита для компенсации потерь пакетов. */
8
17
  fec: boolean;
18
+ /** Показывает, используется ли режим DTX для экономии полосы в тишине. */
9
19
  dtx: boolean;
10
20
  }
21
+ /**
22
+ * Нормализованные метрики видеопотока, которые используются при расчёте качества.
23
+ */
11
24
  export interface VideoStreamStats {
25
+ /** SSRC потока, к которому относятся расчётные метрики. */
12
26
  ssrc: number;
27
+ /** Доля потерянных видеопакетов в процентах. */
13
28
  packetLoss: number;
29
+ /** Текущий bitrate потока. */
14
30
  bitrate: number;
31
+ /** Оценка RTT до удалённой стороны в миллисекундах. */
15
32
  roundTripTime: number;
33
+ /** Задержка буфера воспроизведения или кодирования в миллисекундах. */
16
34
  bufferDelay: number;
35
+ /** Кодек, которым сейчас кодируется или декодируется видео. */
17
36
  codec?: string;
37
+ /** Фактическая ширина потока. */
18
38
  width: number;
39
+ /** Фактическая высота потока. */
19
40
  height: number;
41
+ /** Ожидаемая ширина, с которой поток сравнивается при оценке качества. */
20
42
  expectedWidth: number;
43
+ /** Ожидаемая высота, с которой поток сравнивается при оценке качества. */
21
44
  expectedHeight: number;
45
+ /** Фактический frame rate потока. */
22
46
  frameRate: number;
47
+ /** Ожидаемый frame rate, на который ориентируется расчёт качества. */
23
48
  expectedFrameRate: number;
49
+ /** Подсказывает, нужно ли снижать штраф за низкий bitrate на исходящем видео. */
24
50
  decreaseOutboundPenalty?: boolean;
51
+ /** Отмечает статичный контент, например демонстрацию слайдов или документов. */
25
52
  isStaticContent?: boolean;
53
+ /** Среднее значение QP, полезное для интерпретации визуального качества кодирования. */
26
54
  averageQP?: number;
55
+ /** Причина ограничения качества, если браузер или encoder её сообщил. */
27
56
  qualityLimitationReason?: 'none' | 'bandwidth' | 'cpu' | 'other';
28
57
  }
29
58
  export interface AdaptedWIDStats {
@@ -56,8 +85,16 @@ export interface BaseCalculatorConfig {
56
85
  }>;
57
86
  }
58
87
  export type DeviceType = 'mobile' | 'pc' | 'tv';
88
+ /**
89
+ * MOS-оценки качества аудио и видео в понятной для UI форме.
90
+ *
91
+ * Эти значения удобно использовать в индикаторах качества связи, диагностике
92
+ * и собственных правилах деградации интерфейса.
93
+ */
59
94
  export interface MOSScores {
95
+ /** Оценка качества аудио по шкале MOS. */
60
96
  Qa?: number;
97
+ /** Оценка качества видео по шкале MOS. */
61
98
  Qv?: number;
62
99
  }
63
100
  export interface ExpectedVideoParams {
@@ -2,26 +2,59 @@ import type EnhancedEventEmitter from '../EnhancedEventEmitter';
2
2
  import type { LogLevel, LogMessageHandler } from './common';
3
3
  import type { IssuesHandler, NetworkScoresUpdatedHandler } from './engine';
4
4
  import type { InitEffectsSDKParams } from './media';
5
+ /**
6
+ * Параметры инициализации основного клиента SDK.
7
+ *
8
+ * Через этот объект приложение настраивает подключение к сигналингу, сбор
9
+ * диагностических данных, обработчики качества связи и интеграцию с эффектами.
10
+ */
5
11
  export interface ClientParams {
12
+ /**
13
+ * Выбирает движок шумоподавления для микрофонных треков.
14
+ *
15
+ * Используйте `asdk`, если хотите подключить внешний AI-движок, или `rnnoise`
16
+ * для встроенного варианта без дополнительной интеграции.
17
+ */
6
18
  denoiser?: 'rnnoise' | 'asdk';
19
+ /**
20
+ * Настройки интеграции с Audio Effects SDK для продвинутого шумоподавления.
21
+ */
7
22
  asdk?: {
23
+ /** Идентификатор клиента, выданный поставщиком Audio Effects SDK. */
8
24
  customerId?: string;
25
+ /** Версия ASDK-ресурсов, которые должно использовать приложение. */
9
26
  version?: '2.3.5';
27
+ /** Локальный каталог, из которого приложение раздаёт ASDK-ресурсы. */
10
28
  localDir?: string;
29
+ /** Явный URL SDK-ресурсов ASDK, если используется кастомная схема доставки. */
11
30
  sdk_url?: string;
31
+ /** URL API ASDK, если интеграция должна работать через отдельный endpoint. */
12
32
  api_url?: string;
13
33
  };
34
+ /** Позволяет передать собственный emitter, если приложение централизует обработку клиентских событий. */
14
35
  clientEventEmitter?: EnhancedEventEmitter;
36
+ /** Внутренний emitter SDK для продвинутых интеграций и отладки. Обычно передавать не требуется. */
15
37
  internalEventEmitter?: EnhancedEventEmitter;
38
+ /** Переопределяет адрес signaling-сервера, к которому будет подключаться клиент. */
16
39
  signalingServerUrl?: string;
40
+ /** Задаёт минимальный уровень подробности внутренних логов SDK. */
17
41
  logLevel?: LogLevel;
42
+ /** Позволяет перехватить внутренние сообщения SDK и встроить их в ваш логгер. */
18
43
  onLogMessage?: LogMessageHandler;
44
+ /** Вызывается, когда SDK обнаруживает сетевые или медийные проблемы качества. */
19
45
  onIssues?: IssuesHandler;
46
+ /** Вызывается при обновлении агрегированных сетевых оценок качества. */
20
47
  onNetworkScoresUpdated?: NetworkScoresUpdatedHandler;
48
+ /** Интервал опроса статистики WebRTC в миллисекундах. По умолчанию: 1000 мс. */
21
49
  getStatsInterval?: number;
50
+ /** Отключает детектор проблем WID, если приложение хочет обрабатывать это самостоятельно. */
22
51
  disableWid?: boolean;
52
+ /** Общие параметры инициализации движка видеоэффектов. */
23
53
  effectsSDKParams?: InitEffectsSDKParams;
54
+ /** Включает отправку аналитических данных SDK на серверные endpoint'ы. */
24
55
  sendAnalytics?: boolean;
56
+ /** Базовый путь к локально раздаваемым статическим ресурсам эффектов и WASM. */
25
57
  staticFilesPath?: string;
58
+ /** Переопределяет адрес API аналитики, если используется отдельная инфраструктура. */
26
59
  analyticsApiUrl?: string;
27
60
  }
@@ -39,6 +39,13 @@ export interface ConsumerData {
39
39
  appId: string;
40
40
  channelId: string;
41
41
  }
42
+ /**
43
+ * Роль участника в канале.
44
+ *
45
+ * `host` — может публиковать медиатреки (камера, микрофон, экран).
46
+ * `audience` — только потребляет медиа, публикация недоступна по умолчанию.
47
+ * Роль определяется сервером на основе переданного signaling-токена.
48
+ */
42
49
  export type Role = 'audience' | 'host';
43
50
  export interface PeerResponse {
44
51
  id: string;
@@ -52,19 +59,46 @@ export interface PeerResponse {
52
59
  role: Role;
53
60
  loginDate: Date;
54
61
  }
62
+ /**
63
+ * Список доступных на устройстве камер и микрофонов.
64
+ *
65
+ * Обычно возвращается после `client.detectDevices()` и используется для построения UI выбора устройств.
66
+ */
55
67
  export interface AvailableMediaDevices {
68
+ /** Найденные видеоустройства, доступные браузеру или приложению. */
56
69
  video: MediaDeviceInfo[];
70
+ /** Найденные аудиоустройства, доступные браузеру или приложению. */
57
71
  audio: MediaDeviceInfo[];
58
72
  }
73
+ /**
74
+ * Параметры подключения к каналу.
75
+ *
76
+ * Это основной payload для входа в звонок: он связывает канал, токен доступа,
77
+ * роль участника и пользовательские метаданные сессии.
78
+ */
59
79
  export interface JoinChannelParams {
60
- channelId: string;
80
+ /**
81
+ * Signaling-токен участника, выпущенный Moodhood API.
82
+ * Кодирует идентификатор канала, роль и срок действия сессии.
83
+ * Срок действия токена — 24 часа.
84
+ */
61
85
  token: string;
62
- role: Role;
86
+ /** Пользовательские данные участника, которые будут доступны другим клиентам канала. Максимум 1 КБ. */
63
87
  appData?: Record<string, unknown>;
88
+ /**
89
+ * Включает P2P-режим для звонков один-на-один.
90
+ * Используйте, если в канале заведомо будет не более двух участников —
91
+ * это позволяет серверу оптимально распределить ресурсы.
92
+ */
64
93
  isP2pCall?: boolean;
65
94
  }
95
+ /**
96
+ * Произвольное серверное событие канала, которое приложение может обработать в своей бизнес-логике.
97
+ */
66
98
  export interface ChannelEvent {
99
+ /** Имя события, отправленное серверной стороной. */
67
100
  eventName: string;
101
+ /** Payload события в свободной JSON-подобной форме. */
68
102
  data: Record<string, unknown>;
69
103
  }
70
104
  export interface PreferredLayersParams {
@@ -77,21 +111,38 @@ export interface ChangePreferredLayersParams {
77
111
  spatialLayer: number;
78
112
  temporalLayer: number;
79
113
  }
114
+ /**
115
+ * Базовый набор настроек энкодера для локального трека.
116
+ */
80
117
  export type EncoderConfig = object;
81
118
  export type VideoCodec = 'h264' | 'vp8' | 'vp9';
82
119
  export type AudioCodec = 'opus';
120
+ /**
121
+ * Настройки кодирования для локального видеотрека.
122
+ */
83
123
  export type VideoEncoderConfig = EncoderConfig & {
124
+ /** Предпочтительный видеокодек, если приложение хочет сузить выбор браузера. */
84
125
  preferredCodec?: VideoCodec;
126
+ /** Явная конфигурация simulcast/SVC-слоёв и bitrate-параметров. */
85
127
  encodings?: RtpEncodingParameters[];
128
+ /** Стартовый bitrate для Google-энкодеров, если нужно ускорить выход на целевое качество. */
86
129
  videoGoogleStartBitrate?: number;
87
130
  };
131
+ /**
132
+ * Настройки кодирования для локального аудиотрека.
133
+ */
88
134
  export type AudioEncoderConfig = EncoderConfig & {
135
+ /** Предпочтительный аудиокодек. */
89
136
  preferredCodec?: AudioCodec;
137
+ /** Явная конфигурация encodings, если приложение хочет управлять параметрами транспорта. */
90
138
  encodings?: RtpEncodingParameters[];
139
+ /** Включает FEC для лучшей устойчивости аудио к потерям пакетов. */
91
140
  enableFec?: boolean;
141
+ /** Включает DTX, чтобы экономить полосу в моменты тишины. */
92
142
  enableDtx?: boolean;
93
143
  };
94
144
  export interface CreateTrackOptions {
145
+ /** Если `true`, исходный `MediaStreamTrack` будет остановлен при паузе или закрытии публикации. */
95
146
  stopTrackOnPause?: boolean;
96
147
  }
97
148
  export type BaseVideoTrackOptions = CreateTrackOptions & {
@@ -100,52 +151,103 @@ export type BaseVideoTrackOptions = CreateTrackOptions & {
100
151
  export type BaseAudioTrackOptions = CreateTrackOptions & {
101
152
  audio?: boolean | MediaTrackConstraints;
102
153
  };
154
+ /**
155
+ * Параметры создания локального видеотрека с камеры.
156
+ */
103
157
  export type CreateCameraVideoTrackOptions = BaseVideoTrackOptions & {
104
158
  encoderConfig?: VideoEncoderConfig;
159
+ /** Включает поддержку видеоэффектов для создаваемого трека. */
105
160
  effects?: boolean;
161
+ /** Создаёт preview-вариант трека, если приложению нужно локальное превью без основной публикации. */
106
162
  isPreview?: boolean;
107
163
  };
164
+ /**
165
+ * Параметры создания локального аудиотрека с микрофона.
166
+ */
108
167
  export type CreateMicrophoneAudioTrackOptions = BaseAudioTrackOptions & {
109
168
  encoderConfig?: AudioEncoderConfig;
169
+ /** Включает шумоподавление для создаваемого микрофонного трека. */
110
170
  noiseSuppression?: boolean;
171
+ /** Создаёт preview-вариант трека для локального мониторинга. */
111
172
  isPreview?: boolean;
112
173
  };
174
+ /**
175
+ * Параметры создания треков для демонстрации экрана.
176
+ */
113
177
  export type CreateScreenMediaOptions = BaseVideoTrackOptions & BaseAudioTrackOptions & {
178
+ /** Настройки кодирования видеопотока экрана. */
114
179
  videoEncoderConfig?: VideoEncoderConfig;
180
+ /** Настройки кодирования системного или захваченного аудио. */
115
181
  audioEncoderConfig?: AudioEncoderConfig;
116
182
  };
183
+ /**
184
+ * Параметры регистрации уже существующего видеотрека в SDK.
185
+ */
117
186
  export type CreateCustomVideoOptions = BaseVideoTrackOptions & {
118
187
  videoEncoderConfig?: VideoEncoderConfig;
188
+ /** Видеотрек, созданный приложением вне SDK. */
119
189
  videoTrack: MediaStreamTrack;
120
190
  };
191
+ /**
192
+ * Параметры регистрации уже существующего аудиотрека в SDK.
193
+ */
121
194
  export type CreateCustomAudioOptions = BaseAudioTrackOptions & {
122
195
  audioEncoderConfig?: AudioEncoderConfig;
196
+ /** Аудиотрек, созданный приложением вне SDK. */
123
197
  audioTrack: MediaStreamTrack;
124
198
  };
199
+ /**
200
+ * Логические метки треков, которыми SDK помечает разные источники медиа.
201
+ */
125
202
  export declare enum TrackLabel {
203
+ /** Основной видеотрек с камеры. */
126
204
  Camera = "camera",
205
+ /** Локальный preview-трек камеры. */
127
206
  CameraPreview = "camera-preview",
207
+ /** Основной аудиотрек с микрофона. */
128
208
  Microphone = "microphone",
209
+ /** Локальный preview-трек микрофона. */
129
210
  MicrophonePreview = "microphone-preview",
211
+ /** Видеотрек демонстрации экрана. */
130
212
  ScreenVideo = "screen-video",
213
+ /** Аудиотрек демонстрации экрана или системного звука. */
131
214
  ScreenAudio = "screen-audio",
215
+ /** Пользовательский видеотрек, переданный в SDK приложением. */
132
216
  CustomVideo = "custom-video",
217
+ /** Пользовательский аудиотрек, переданный в SDK приложением. */
133
218
  CustomAudio = "custom-audio",
219
+ /** Резервная метка для нераспознанного типа трека. */
134
220
  Unknown = "unknown"
135
221
  }
222
+ /**
223
+ * Событие о публикации медиа участником.
224
+ */
136
225
  export interface PayloadOfPublishedMedia {
137
226
  producerId: string;
138
227
  kind: MediaKind;
228
+ /** Логическая метка трека, по которой удобно различать камеру, микрофон или screen share. */
139
229
  label: TrackLabel;
230
+ /** Показывает, опубликован ли трек в paused-состоянии. */
140
231
  paused: boolean;
141
232
  }
233
+ /**
234
+ * Payload события о принудительном закрытии локального трека.
235
+ */
142
236
  export interface TrackForceClosedPayload {
237
+ /** Метка трека, который сервер или SDK принудительно остановил. */
143
238
  label: TrackLabel;
144
239
  }
240
+ /**
241
+ * Параметры подписки на удалённый producer участника.
242
+ */
145
243
  export interface SubscribeOptions {
146
244
  producerId: string;
245
+ /** Если `true`, трек будет создан в muted-состоянии и его можно будет размьютить позже. */
147
246
  muted?: boolean;
148
247
  }
248
+ /**
249
+ * Событие о прекращении публикации ранее опубликованного медиа.
250
+ */
149
251
  export type PayloadOfUnpublishedMedia = PayloadOfPublishedMedia;
150
252
  export type ChangePreferredLayersPayload = PreferredLayersParams & {
151
253
  consumerId: string;
@@ -189,8 +291,13 @@ export interface TransportConnectionTimeoutPayload {
189
291
  export type ExtendedRTCInboundRtpStreamStats = RTCInboundRtpStreamStats & {
190
292
  decoderImplementation?: string;
191
293
  };
294
+ /**
295
+ * Состояние send и receive transport'ов клиента в удобной для диагностики форме.
296
+ */
192
297
  export interface TransportsStateInfo {
298
+ /** Состояние входящего transport'а, через который клиент получает медиа. */
193
299
  receive?: TransportStateInfo;
300
+ /** Состояние исходящего transport'а, через который клиент публикует медиа. */
194
301
  send?: TransportStateInfo;
195
302
  }
196
303
  export interface TransportStateInfo {
@@ -226,26 +333,45 @@ export interface CreateConsumerResponse {
226
333
  consumer: Consumer;
227
334
  isProducerPaused: boolean;
228
335
  }
336
+ /**
337
+ * Типовые ошибки доступа к медиаустройствам.
338
+ */
229
339
  export declare enum DeviceErrors {
340
+ /** Браузер не нашёл запрошенное устройство. */
230
341
  NotFoundError = "NotFoundError",
342
+ /** На устройстве не найдено ни одной подходящей камеры или микрофона. */
231
343
  NoDevices = "NoDevices",
344
+ /** Устройство занято другим приложением или вкладкой. */
232
345
  DeviceIsBusy = "DeviceIsBusy",
346
+ /** Пользователь или браузер запретил доступ к устройству. */
233
347
  NotAllowedError = "NotAllowedError",
348
+ /** Неизвестная ошибка при запросе списка устройств. */
234
349
  RequestDevicesUnknownError = "RequestDevicesUnknownError"
235
350
  }
351
+ /**
352
+ * Статистика входящего удалённого трека, полезная для диагностики подписки и качества приёма.
353
+ */
236
354
  export interface TrackInboundStats {
237
355
  consumerId: string;
238
356
  codec?: RTCRtpCodecParameters;
357
+ /** Текущий spatial layer, который реально получает клиент. */
239
358
  currentSpatialLayerParams?: SpatialLayerParams;
359
+ /** Слои, которые доступны для данного видеотрека на стороне отправителя. */
240
360
  availableSpatialLayers?: SpatialLayerParams[];
361
+ /** Слой, который приложение или SDK запрашивает у сервера в данный момент. */
241
362
  requestedSpatialLayer?: number;
242
363
  dtlsState?: RTCDtlsTransportState;
364
+ /** Нативная WebRTC-статистика входящего RTP-потока. */
243
365
  rtcStats?: ExtendedRTCInboundRtpStreamStats;
244
366
  }
367
+ /**
368
+ * Статистика исходящего локального трека, полезная для диагностики публикации.
369
+ */
245
370
  export interface TrackOutboundStats {
246
371
  producerId?: string;
247
372
  codec?: RTCRtpCodecParameters;
248
373
  dtlsState?: RTCDtlsTransportState;
374
+ /** Нативная WebRTC-статистика исходящего RTP-потока. */
249
375
  rtcStats?: RTCOutboundRtpStreamStats;
250
376
  }
251
377
  export interface PeerTrackInfo {
@@ -262,6 +388,9 @@ export interface PeerTrackInfo {
262
388
  trackInboundStats?: TrackInboundStats;
263
389
  trackOutboundStats?: TrackOutboundStats;
264
390
  }
391
+ /**
392
+ * Краткая информация о локальном треке в удобном для UI и диагностики виде.
393
+ */
265
394
  export interface BaseTrackInfo {
266
395
  trackId: string;
267
396
  readyState: MediaStreamTrackState;
@@ -272,16 +401,22 @@ export interface BaseTrackInfo {
272
401
  height?: number;
273
402
  frameRate?: number;
274
403
  aspectRatio?: number;
404
+ /** При наличии содержит техническую статистику опубликованного трека. */
275
405
  trackOutboundStats?: TrackOutboundStats;
276
406
  }
407
+ /**
408
+ * Сводная информация об участнике канала и его активных треках.
409
+ */
277
410
  export interface PeerInfo {
278
411
  id: string;
412
+ /** Пользовательские данные участника, которые приложение сохранило в `appData`. */
279
413
  appData: Record<string, unknown>;
280
414
  role: Role;
281
415
  channelIds: string[];
282
416
  appId: string;
283
417
  uid?: string;
284
418
  loginDate: Date;
419
+ /** Текущие удалённые треки участника со статикой по каждому из них. */
285
420
  tracks: PeerTrackInfo[];
286
421
  }
287
422
  export interface UpdatePeerAppDataPayload {
@@ -300,8 +435,12 @@ export interface ForceCloseProducerPayload {
300
435
  peerId: string;
301
436
  label: TrackLabel;
302
437
  }
438
+ /**
439
+ * Payload события, которым сервер просит подтвердить активность участника в канале.
440
+ */
303
441
  export interface ActivityConfirmationRequiredPayload {
304
442
  channelId: string;
443
+ /** Временное значение из серверного события, которое можно использовать для UI таймера или дедлайна подтверждения. */
305
444
  time: number;
306
445
  }
307
446
  export interface PeerShortData {
@@ -316,5 +455,11 @@ export type PeerSyncData = Omit<PeerShortData, 'appData'> & {
316
455
  appData?: string;
317
456
  };
318
457
  export type TransportAppData = AppData;
458
+ /**
459
+ * Группа участника, которую приложение может использовать для прав и UI-ролей.
460
+ */
319
461
  export type PeerGroup = 'moderator' | 'user';
462
+ /**
463
+ * Строковое представление пользовательских меток треков, применяемое в правах и сетевых payload'ах.
464
+ */
320
465
  export type TrackLabelString = 'camera' | 'microphone' | 'screen-video' | 'screen-audio' | 'custom-video' | 'custom-audio';
@@ -4,8 +4,16 @@ import type { InconsistencyType } from '../engine/handlers/ChannelStateSyncEvent
4
4
  import type Peer from '../engine/Peer';
5
5
  import type { ActivityConfirmationRequiredPayload, AvailableMediaDevices, ChannelEvent, LogLevel, LogMessageHandler, PeerGroup, Role, TrackLabel } from './common';
6
6
  import type { BaseTrack, InitEffectsSDKParams, Track } from './media';
7
+ /**
8
+ * Обработчик диагностических проблем, найденных в WebRTC-статистике.
9
+ *
10
+ * Подходит для логирования и собственной аналитики качества звонка.
11
+ */
7
12
  export type IssuesHandler = (issues: IssueDetectorResult) => void;
8
13
  export type StatsHandler = (stats: StatsReportItem[]) => void;
14
+ /**
15
+ * Обработчик обновления агрегированных сетевых оценок качества.
16
+ */
9
17
  export type NetworkScoresUpdatedHandler = (networkScores: NetworkScores) => void;
10
18
  export interface CreateIssueDetectorParams {
11
19
  disableWid: boolean;
@@ -27,59 +35,93 @@ export interface ConnectParams {
27
35
  token: string;
28
36
  isP2pCall?: boolean;
29
37
  }
38
+ /**
39
+ * Payload события о рассинхронизации локального состояния клиента с состоянием канала.
40
+ */
30
41
  export interface ChannelStateInconsistentPayload {
42
+ /** Категория найденной рассинхронизации. */
31
43
  type: InconsistencyType;
44
+ /** Идентификатор участника, если проблема относится к конкретному peer. */
32
45
  peerId?: string;
46
+ /** Идентификатор producer'а, если проблема связана с опубликованным медиа. */
33
47
  producerId?: string;
48
+ /** Идентификатор consumer'а, если проблема относится к подписке на удалённый трек. */
34
49
  consumerId?: string;
35
50
  }
51
+ /**
52
+ * Payload события об изменении набора треков, которые участнику разрешено публиковать.
53
+ */
36
54
  export interface ProducePermissionsChangedPayload {
55
+ /** Обновлённый список разрешённых меток треков. */
37
56
  labels: TrackLabel[];
38
57
  }
39
58
  export interface GroupsChangedPayload {
40
59
  groups: PeerGroup[];
41
60
  }
61
+ /**
62
+ * Event map emitted by `client.observer`.
63
+ */
42
64
  export interface ClientObserverEvents {
65
+ /** Пользовательское событие канала, пришедшее с серверной стороны. */
43
66
  [CLIENT_EVENTS.channelEvent]: [ChannelEvent];
67
+ /** Новый участник появился в канале и доступен в списке `client.peers`. */
44
68
  [CLIENT_EVENTS.peerJoined]: [Peer];
69
+ /** Участник покинул канал. */
45
70
  [CLIENT_EVENTS.peerLeft]: [peerId: string];
71
+ /** Сервер просит подтвердить, что участник всё ещё активен в звонке. */
46
72
  [CLIENT_EVENTS.activityConfirmationRequired]: [ActivityConfirmationRequiredPayload];
47
73
  [CLIENT_EVENTS.activityConfirmationAcquired]: [ChannelEvent];
48
74
  [CLIENT_EVENTS.activityConfirmationExpired]: [ChannelEvent];
75
+ /** Клиенту требуется переподключиться к каналу, чтобы восстановить рабочее состояние. */
49
76
  [CLIENT_EVENTS.channelRejoinRequired]: [];
50
77
  [CLIENT_EVENTS.devicesListUpdated]: [AvailableMediaDevices];
78
+ /** Один из transport'ов не смог установить соединение в ожидаемое время. */
51
79
  [CLIENT_EVENTS.transportConnectionTimeout]: [{
52
80
  reason: 'ice' | 'dtls';
53
81
  direction: 'receive' | 'send';
54
82
  }];
83
+ /** Локальный трек был принудительно остановлен и больше недоступен для публикации. */
55
84
  [CLIENT_EVENTS.trackForceClosed]: [{
56
85
  label: TrackLabel;
57
86
  }];
87
+ /** Операция с локальным треком завершилась ошибкой. */
58
88
  [CLIENT_EVENTS.trackFailed]: [{
59
89
  label: TrackLabel;
60
90
  }];
61
91
  [CLIENT_EVENTS.activeSpeakerChanged]: [{
62
92
  peer?: Peer;
63
93
  }];
94
+ /** Клиент временно потерял соединение с инфраструктурой звонка. */
64
95
  [CLIENT_EVENTS.connectionLost]: [];
96
+ /** Соединение с инфраструктурой звонка было восстановлено. */
65
97
  [CLIENT_EVENTS.connectionRestored]: [];
66
98
  [CLIENT_EVENTS.forcedDisconnect]: [];
99
+ /** Сервер отклонил подключение из-за невалидной или неподходящей авторизации. */
67
100
  [CLIENT_EVENTS.rejectUnauthorized]: [];
101
+ /** SDK обнаружил несогласованность состояния канала и локального клиента. */
68
102
  [CLIENT_EVENTS.channelStateInconsistent]: [ChannelStateInconsistentPayload];
103
+ /** Встроенное шумоподавление начало инициализацию. */
69
104
  [CLIENT_EVENTS.denoiserInitializing]: [boolean];
105
+ /** Шумоподавление успешно включено. */
70
106
  [CLIENT_EVENTS.denoiserEnabled]: [{
71
107
  type: string;
72
108
  }];
109
+ /** Шумоподавление отключено. */
73
110
  [CLIENT_EVENTS.denoiserDisabled]: [{
74
111
  type: string;
75
112
  }];
113
+ /** SDK переключился на резервный сценарий шумоподавления. */
76
114
  [CLIENT_EVENTS.denoiserFallback]: [];
115
+ /** Шумоподавление не удалось включить или поддерживать в рабочем состоянии. */
77
116
  [CLIENT_EVENTS.denoiserFailed]: [{
78
117
  cause: string;
79
118
  error?: unknown;
80
119
  }];
120
+ /** Видеоэффекты успешно включены для активного видеотрека. */
81
121
  [CLIENT_EVENTS.effectsEnabled]: [];
122
+ /** Видеоэффекты отключены. */
82
123
  [CLIENT_EVENTS.effectsDisabled]: [];
124
+ /** Операция с видеоэффектами завершилась ошибкой. */
83
125
  [CLIENT_EVENTS.effectsFailed]: [
84
126
  {
85
127
  cause: string;