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 CHANGED
@@ -9,16 +9,20 @@
9
9
 
10
10
  **sip-connector** — это TypeScript SDK для интеграции WebRTC-приложений с платформой Vinteo через SIP-протокол. Библиотека построена на базе `@krivega/jssip` и предоставляет высокоуровневый API для создания полнофункциональных видеоконференций.
11
11
 
12
- ### 🚨 Breaking Changes в версии 16.0.0
13
-
14
- **Важные изменения, требующие обновления кода:**
12
+ ### 🎯 Основные возможности
15
13
 
16
- - **VideoSendingBalancer перенесен в SipConnector**: Теперь балансировка видео настраивается через конструктор `SipConnector` с параметром `videoBalancerOptions`
17
- - **Удален параметр `simulcastEncodings`**: Вместо него используется `sendEncodings` для настройки кодировок
18
- - **Автоматический запуск балансировки**: VideoSendingBalancer теперь автоматически запускается через 10 секунд после начала звонка
19
- - **Новые события балансировки**: Добавлены события `video-balancer:*` для мониторинга состояния балансировки
14
+ SDK предоставляет комплексное решение для:
20
15
 
21
- ### 🆕 Новые возможности версии 16.0.0
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
- // и вызывает callManager.restartIce() при получении таких событий
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 автоматически вызовет restartIce()
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
- ### События балансировки видео (версия 16.0.0+)
574
+ ### События балансировки видео
498
575
 
499
576
  ```typescript
500
577
  // Мониторинг автоматической балансировки видео
@@ -644,7 +721,7 @@ monitor.subscribe(videoSender, () => {
644
721
 
645
722
  ### Автоматическая балансировка
646
723
 
647
- С версии 16.0.0 `VideoSendingBalancer` интегрирован в `SipConnector` и запускается автоматически:
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