sip-connector 16.2.0 → 17.0.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.
- package/README.md +128 -45
- package/dist/{@SipConnector-D1YBDd7g.js → @SipConnector-DADbRZIb.js} +361 -267
- package/dist/@SipConnector-aB66gnC6.cjs +1 -0
- package/dist/ApiManager/index.d.ts +1 -0
- package/dist/CallManager/@CallManager.d.ts +2 -0
- package/dist/CallManager/AbstractCallStrategy.d.ts +9 -1
- package/dist/CallManager/MCUCallStrategy.d.ts +10 -1
- package/dist/CallManager/TransceiverManager.d.ts +51 -0
- package/dist/CallManager/index.d.ts +2 -1
- package/dist/CallManager/types.d.ts +16 -3
- package/dist/PresentationManager/types.d.ts +1 -1
- package/dist/SipConnector/@SipConnector.d.ts +1 -0
- package/dist/__fixtures__/RTCPeerConnectionMock.d.ts +2 -1
- package/dist/__fixtures__/RTCRtpTransceiverMock.d.ts +16 -0
- package/dist/doMock.cjs +1 -1
- package/dist/doMock.js +166 -143
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/package.json +8 -8
- package/dist/@SipConnector-B5FFHZzJ.cjs +0 -1
package/README.md
CHANGED
|
@@ -9,16 +9,20 @@
|
|
|
9
9
|
|
|
10
10
|
**sip-connector** — это TypeScript SDK для интеграции WebRTC-приложений с платформой Vinteo через SIP-протокол. Библиотека построена на базе `@krivega/jssip` и предоставляет высокоуровневый API для создания полнофункциональных видеоконференций.
|
|
11
11
|
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
**Важные изменения, требующие обновления кода:**
|
|
12
|
+
### 🎯 Основные возможности
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
- **Удален параметр `simulcastEncodings`**: Вместо него используется `sendEncodings` для настройки кодировок
|
|
18
|
-
- **Автоматический запуск балансировки**: VideoSendingBalancer теперь автоматически запускается через 10 секунд после начала звонка
|
|
19
|
-
- **Новые события балансировки**: Добавлены события `video-balancer:*` для мониторинга состояния балансировки
|
|
14
|
+
SDK предоставляет комплексное решение для:
|
|
20
15
|
|
|
21
|
-
|
|
16
|
+
| Категория | Возможности |
|
|
17
|
+
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
18
|
+
| **SIP-подключения** | Регистрация на сервере (SIP REGISTER), управление сессиями |
|
|
19
|
+
| **WebRTC-коммуникации** | Исходящие/входящие звонки (SIP INVITE/200 OK), медиа-потоки, управление transceiver'ами, автоматический перезапуск ICE |
|
|
20
|
+
| **Презентации** | Отправка второго потока (screen sharing, демонстрация экрана) |
|
|
21
|
+
| **Системные сообщения** | DTMF, SIP INFO, синхронизация медиа-состояния |
|
|
22
|
+
| **Событийная архитектура** | Подписка на события платформы в реальном времени |
|
|
23
|
+
| **Мониторинг** | WebRTC-статистика (RTCRtpStats, ICE candidate stats) |
|
|
24
|
+
| **Управление конференциями** | Перемещение участников между ролями (участник/зритель) |
|
|
25
|
+
| **Лицензирование** | Мониторинг использования лицензий и состояния презентаций |
|
|
22
26
|
|
|
23
27
|
- **Адаптивный polling**: Улучшенная система опроса для мониторинга изменений видеотреков
|
|
24
28
|
- **Поддержка maxBitrate в PresentationManager**: Автоматическое управление битрейтом для презентаций
|
|
@@ -26,21 +30,9 @@
|
|
|
26
30
|
- **Обработка смены треков**: Автоматическая адаптация балансировки при изменении видеотреков
|
|
27
31
|
- **Улучшенная статистика**: Расширенные возможности сбора и анализа WebRTC статистики
|
|
28
32
|
- **Автоматический перезапуск ICE**: Обработка событий `restart` от сервера с автоматическим вызовом `restartIce`
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
SDK предоставляет комплексное решение для:
|
|
33
|
-
|
|
34
|
-
| Категория | Возможности |
|
|
35
|
-
| ---------------------------- | ------------------------------------------------------------------------------------------ |
|
|
36
|
-
| **SIP-подключения** | Регистрация на сервере (SIP REGISTER), управление сессиями |
|
|
37
|
-
| **WebRTC-коммуникации** | Исходящие/входящие звонки (SIP INVITE/200 OK), медиа-потоки, автоматический перезапуск ICE |
|
|
38
|
-
| **Презентации** | Отправка второго потока (screen sharing, демонстрация экрана) |
|
|
39
|
-
| **Системные сообщения** | DTMF, SIP INFO, синхронизация медиа-состояния |
|
|
40
|
-
| **Событийная архитектура** | Подписка на события платформы в реальном времени |
|
|
41
|
-
| **Мониторинг** | WebRTC-статистика (RTCRtpStats, ICE candidate stats) |
|
|
42
|
-
| **Управление конференциями** | Перемещение участников между ролями (участник/зритель) |
|
|
43
|
-
| **Лицензирование** | Мониторинг использования лицензий и состояния презентаций |
|
|
33
|
+
- **Управление transceiver'ами**: Новый `TransceiverManager` для отслеживания и управления RTCRtpTransceiver'ами
|
|
34
|
+
- **Автоматическое добавление transceiver'ов**: Умное добавление презентационных transceiver'ов при событиях restart
|
|
35
|
+
|
|
|
44
36
|
|
|
45
37
|
### 🏗️ Архитектура
|
|
46
38
|
|
|
@@ -67,23 +59,6 @@ yarn add sip-connector
|
|
|
67
59
|
pnpm add sip-connector
|
|
68
60
|
```
|
|
69
61
|
|
|
70
|
-
### 📋 Системные требования
|
|
71
|
-
|
|
72
|
-
#### Обязательные зависимости
|
|
73
|
-
|
|
74
|
-
| Компонент | Требование | Описание |
|
|
75
|
-
| ------------------ | -------------------- | ------------------------------ |
|
|
76
|
-
| `@krivega/jssip` | peer dependency | Для SIP-функциональности |
|
|
77
|
-
| WebRTC API | Поддержка в браузере | Стандартные WebRTC возможности |
|
|
78
|
-
| JavaScript runtime | ES2017+ | Современный синтаксис |
|
|
79
|
-
|
|
80
|
-
#### Рекомендуемые зависимости
|
|
81
|
-
|
|
82
|
-
| Компонент | Версия | Назначение |
|
|
83
|
-
| ---------- | ------ | ------------------- |
|
|
84
|
-
| TypeScript | 4.5+ | Полная типизация |
|
|
85
|
-
| Node.js | 16+ | Сборка и разработка |
|
|
86
|
-
|
|
87
62
|
---
|
|
88
63
|
|
|
89
64
|
## 🎯 Быстрый старт
|
|
@@ -398,11 +373,13 @@ try {
|
|
|
398
373
|
|
|
399
374
|
#### Автоматический перезапуск по событию сервера
|
|
400
375
|
|
|
401
|
-
SDK автоматически обрабатывает события `restart` от сервера и инициирует перезапуск ICE
|
|
376
|
+
SDK автоматически обрабатывает события `restart` от сервера и инициирует перезапуск ICE-соединения с интеллектуальным управлением transceiver'ами:
|
|
402
377
|
|
|
403
378
|
```typescript
|
|
404
379
|
// SDK автоматически подписывается на события restart от ApiManager
|
|
405
|
-
// и
|
|
380
|
+
// и выполняет следующие действия:
|
|
381
|
+
// 1. Проверяет необходимость добавления презентационного transceiver'а
|
|
382
|
+
// 2. Вызывает callManager.restartIce()
|
|
406
383
|
|
|
407
384
|
// Мониторинг событий restart (опционально)
|
|
408
385
|
sipConnector.on('api:restart', (data) => {
|
|
@@ -412,8 +389,14 @@ sipConnector.on('api:restart', (data) => {
|
|
|
412
389
|
videoTrackCount: data.videoTrackCount,
|
|
413
390
|
});
|
|
414
391
|
|
|
415
|
-
// SDK
|
|
392
|
+
// SDK автоматически:
|
|
393
|
+
// - Добавит презентационный transceiver если videoTrackCount === 2
|
|
394
|
+
// - Вызовет restartIce()
|
|
416
395
|
console.log('ICE будет перезапущен автоматически');
|
|
396
|
+
|
|
397
|
+
if (data.videoTrackCount === 2) {
|
|
398
|
+
console.log('Может быть добавлен презентационный transceiver');
|
|
399
|
+
}
|
|
417
400
|
});
|
|
418
401
|
```
|
|
419
402
|
|
|
@@ -429,6 +412,100 @@ sipConnector.on('api:restart', (data) => {
|
|
|
429
412
|
|
|
430
413
|
---
|
|
431
414
|
|
|
415
|
+
## 🎛️ Управление RTCRtpTransceiver'ами
|
|
416
|
+
|
|
417
|
+
### Обзор TransceiverManager
|
|
418
|
+
|
|
419
|
+
SDK автоматически отслеживает и управляет RTCRtpTransceiver'ами через новый класс `TransceiverManager`:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
// Получение текущих transceiver'ов
|
|
423
|
+
const transceivers = sipConnector.callManager.getTransceivers();
|
|
424
|
+
|
|
425
|
+
console.log('Основной аудио transceiver:', transceivers.mainAudio);
|
|
426
|
+
console.log('Основной видео transceiver:', transceivers.mainVideo);
|
|
427
|
+
console.log('Презентационный видео transceiver:', transceivers.presentationVideo);
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
### Типы transceiver'ов
|
|
431
|
+
|
|
432
|
+
SDK автоматически классифицирует transceiver'ы по их `mid` значению:
|
|
433
|
+
|
|
434
|
+
| Тип transceiver'а | mid | Назначение |
|
|
435
|
+
| ------------------- | --- | --------------------------- |
|
|
436
|
+
| `mainAudio` | '0' | Основной аудио поток |
|
|
437
|
+
| `mainVideo` | '1' | Основной видео поток |
|
|
438
|
+
| `presentationVideo` | '2' | Презентационный видео поток |
|
|
439
|
+
|
|
440
|
+
### Автоматическое добавление transceiver'ов
|
|
441
|
+
|
|
442
|
+
При получении события `restart` с `videoTrackCount === 2`, SDK автоматически добавляет презентационный transceiver если он отсутствует:
|
|
443
|
+
|
|
444
|
+
```typescript
|
|
445
|
+
// SDK автоматически обрабатывает события restart
|
|
446
|
+
sipConnector.on('api:restart', (data) => {
|
|
447
|
+
if (data.videoTrackCount === 2) {
|
|
448
|
+
// SDK проверит наличие presentationVideo transceiver'а
|
|
449
|
+
// и добавит его автоматически если необходимо
|
|
450
|
+
console.log('Будет добавлен презентационный transceiver');
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Ручное управление transceiver'ами
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
// Добавление нового transceiver'а
|
|
459
|
+
try {
|
|
460
|
+
const audioTransceiver = await sipConnector.callManager.addTransceiver('audio', {
|
|
461
|
+
direction: 'sendrecv',
|
|
462
|
+
});
|
|
463
|
+
|
|
464
|
+
const videoTransceiver = await sipConnector.callManager.addTransceiver('video', {
|
|
465
|
+
direction: 'sendonly',
|
|
466
|
+
sendEncodings: [
|
|
467
|
+
{ rid: 'low', maxBitrate: 500_000, scaleResolutionDownBy: 4 },
|
|
468
|
+
{ rid: 'high', maxBitrate: 2_000_000, scaleResolutionDownBy: 1 },
|
|
469
|
+
],
|
|
470
|
+
});
|
|
471
|
+
|
|
472
|
+
console.log('Transceiver'ы добавлены:', { audioTransceiver, videoTransceiver });
|
|
473
|
+
} catch (error) {
|
|
474
|
+
console.error('Ошибка добавления transceiver'а:', error);
|
|
475
|
+
}
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
### Мониторинг transceiver'ов
|
|
479
|
+
|
|
480
|
+
```typescript
|
|
481
|
+
// Проверка состояния transceiver'ов
|
|
482
|
+
const checkTransceivers = () => {
|
|
483
|
+
const transceivers = sipConnector.callManager.getTransceivers();
|
|
484
|
+
|
|
485
|
+
console.log('Статус transceiver'ов:', {
|
|
486
|
+
hasAudio: transceivers.mainAudio !== undefined,
|
|
487
|
+
hasVideo: transceivers.mainVideo !== undefined,
|
|
488
|
+
hasPresentation: transceivers.presentationVideo !== undefined,
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
// Детальная информация
|
|
492
|
+
if (transceivers.mainVideo) {
|
|
493
|
+
console.log('Основное видео:', {
|
|
494
|
+
mid: transceivers.mainVideo.mid,
|
|
495
|
+
direction: transceivers.mainVideo.direction,
|
|
496
|
+
currentDirection: transceivers.mainVideo.currentDirection,
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
};
|
|
500
|
+
|
|
501
|
+
// Проверка после установки соединения
|
|
502
|
+
sipConnector.on('call:confirmed', () => {
|
|
503
|
+
checkTransceivers();
|
|
504
|
+
});
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
---
|
|
508
|
+
|
|
432
509
|
## 📡 События и их обработка
|
|
433
510
|
|
|
434
511
|
### Архитектура событий
|
|
@@ -494,7 +571,7 @@ const roomData = await sipConnector.wait('api:enterRoom');
|
|
|
494
571
|
console.log('Данные комнаты:', roomData);
|
|
495
572
|
```
|
|
496
573
|
|
|
497
|
-
### События балансировки видео
|
|
574
|
+
### События балансировки видео
|
|
498
575
|
|
|
499
576
|
```typescript
|
|
500
577
|
// Мониторинг автоматической балансировки видео
|
|
@@ -644,7 +721,7 @@ monitor.subscribe(videoSender, () => {
|
|
|
644
721
|
|
|
645
722
|
### Автоматическая балансировка
|
|
646
723
|
|
|
647
|
-
|
|
724
|
+
`VideoSendingBalancer` интегрирован в `SipConnector` и запускается автоматически:
|
|
648
725
|
|
|
649
726
|
```typescript
|
|
650
727
|
const sipConnector = new SipConnector(
|
|
@@ -753,6 +830,7 @@ import {
|
|
|
753
830
|
SipConnector, // Низкоуровневый API
|
|
754
831
|
SipConnectorFacade, // Высокоуровневый фасад
|
|
755
832
|
StatsPeerConnection, // Сбор статистики
|
|
833
|
+
TransceiverManager, // Управление transceiver'ами
|
|
756
834
|
// ... другие экспорты
|
|
757
835
|
} from 'sip-connector';
|
|
758
836
|
```
|
|
@@ -769,6 +847,10 @@ await facade.replaceMediaStream(mediaStream, options);
|
|
|
769
847
|
// Получение удаленных потоков
|
|
770
848
|
const streams = facade.getRemoteStreams();
|
|
771
849
|
|
|
850
|
+
// Управление transceiver'ами (низкоуровневый API)
|
|
851
|
+
const transceivers = sipConnector.callManager.getTransceivers();
|
|
852
|
+
await sipConnector.callManager.addTransceiver('video', { direction: 'sendrecv' });
|
|
853
|
+
|
|
772
854
|
// Перезапуск ICE-соединения (низкоуровневый API)
|
|
773
855
|
await sipConnector.callManager.restartIce(options);
|
|
774
856
|
```
|
|
@@ -791,6 +873,7 @@ import {
|
|
|
791
873
|
type TInboundStats, // Входящая статистика
|
|
792
874
|
type TOutboundStats, // Исходящая статистика
|
|
793
875
|
type TRestartData, // Данные события restart
|
|
876
|
+
type ITransceiverStorage, // Интерфейс хранения transceiver'ов
|
|
794
877
|
} from 'sip-connector';
|
|
795
878
|
```
|
|
796
879
|
|