@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.
- package/README.md +41 -0
- package/dist/Client.d.ts +160 -0
- package/dist/ClientMetaProvider.d.ts +12 -0
- package/dist/EnhancedEventEmitter.d.ts +6 -0
- package/dist/engine/Peer.d.ts +41 -1
- package/dist/engine/WebRTCStats/types.d.ts +8 -0
- package/dist/engine/index.d.ts +1 -1
- package/dist/engine/media/streamEffects/video/esdk/TrackProcessor.d.ts +33 -0
- package/dist/engine/media/tracks/PeerTrack.d.ts +3 -13
- package/dist/index.d.ts +18 -49
- package/dist/index.es.js +2 -2
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/qoe/ScoresCalculator.d.ts +25 -0
- package/dist/qoe/types.d.ts +37 -0
- package/dist/types/client.d.ts +33 -0
- package/dist/types/common.d.ts +147 -2
- package/dist/types/engine.d.ts +42 -0
- package/dist/types/media.d.ts +65 -0
- package/dist/types/network.d.ts +8 -0
- package/dist/types/peerConsumer.d.ts +36 -0
- package/dist/types/peerTrack.d.ts +52 -0
- package/package.json +9 -1
|
@@ -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;
|
package/dist/qoe/types.d.ts
CHANGED
|
@@ -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 {
|
package/dist/types/client.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/types/common.d.ts
CHANGED
|
@@ -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
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Signaling-токен участника, выпущенный Moodhood API.
|
|
82
|
+
* Кодирует идентификатор канала, роль и срок действия сессии.
|
|
83
|
+
* Срок действия токена — 24 часа.
|
|
84
|
+
*/
|
|
61
85
|
token: string;
|
|
62
|
-
|
|
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';
|
package/dist/types/engine.d.ts
CHANGED
|
@@ -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;
|