Skip to content

Add call-quality warnings, no-media watchdog and QoS tagging - #15

Merged
PetrShtuka merged 1 commit into
mainfrom
feature/p0-call-quality
Aug 11, 2026
Merged

Add call-quality warnings, no-media watchdog and QoS tagging#15
PetrShtuka merged 1 commit into
mainfrom
feature/p0-call-quality

Conversation

@PetrShtuka

Copy link
Copy Markdown
Owner

Что входит (кодовая часть P0 из плана улучшений)

P0.2 — события качества звонка

  • Новый CallWaveEventTypeCallQualityWarning с причинами CallWaveCallQualityWarning: PacketLoss, HighJitter, HighRoundTripTime, NoMedia.
  • Пороги на CallWaveEngineConfiguration: qualityWarningPacketLossThreshold (5 %), qualityWarningJitterThreshold (30 мс), qualityWarningRoundTripTimeThreshold (300 мс), выключатель qualityWarningsEnabled.
  • Каждое предупреждение срабатывает максимум один раз на звонок (latch) и несёт снапшот CallWaveCallStatistics, который его вызвал.
  • Оценка вынесена в чистую функцию CallWaveEvaluateCallQuality — правила покрыты тестами без живого SIP-звонка.

P0.3 — no-media watchdog

  • noMediaTimeout (по умолчанию 5 с): если после CONNECT не пришло ни одного RTP-пакета — событие NoMedia («домофон ответил молчанием»).
  • Опциональное авто-завершение звонка: terminatesCallOnNoMedia (по умолчанию выключено).

P0.5 — QoS/DSCP

  • PJ_QOS_TYPE_VOICE на SIP-транспортах (UDP/TCP/TLS) и на RTP-сокетах аккаунта. По умолчанию включено, выключатель QoSTaggingEnabled.

Дополнительно

  • CallWaveCallStatistics.estimatedMOS — упрощённая E-model (1.0–4.5, 0 = «нет данных») для событий статистики и экрана VoIP Logs.
  • Мониторинг качества тикает раз в секунду во время активного звонка даже при statisticsUpdateInterval = 0; периодические …CallStatisticsUpdated остаются opt-in.

Тесты

  • 15 ObjC-тестов оценщика качества и MOS (CallWaveCallQualityTests.m).
  • 3 Swift-теста дефолтов/клампинга/копирования конфигурации.
  • Прогон ./Scripts/run-package-tests.sh: 57/57 passed.

Не входит (следующий PR, пересборка PJSIP)

  • P0.1 Opus в билде XCFramework.
  • P0.4 SHA-256 digest: с PJ_SSL_SOCK_IMP_APPLE PJSIP собирается в режиме HAVE_NO_OPENSSL, где SHA-256-challenge не распознаётся — нужен патч к pjproject со встроенной реализацией SHA-256.

- CallWaveEventTypeCallQualityWarning with per-call latched reasons
  (packet loss, high jitter, high RTT, no media) carrying the statistics
  snapshot that crossed the engine-configured thresholds.
- No-media watchdog: fires after noMediaTimeout connected seconds without
  inbound RTP and can optionally end the call (terminatesCallOnNoMedia).
- Voice service-type tagging on SIP and RTP sockets, on by default via
  CallWaveEngineConfiguration.QoSTaggingEnabled.
- CallWaveCallStatistics.estimatedMOS, a simplified E-model estimate.
- Quality monitoring ticks once a second during active calls even when
  statisticsUpdateInterval is 0; periodic statistics events stay opt-in.
@PetrShtuka
PetrShtuka merged commit 0fd5256 into main Aug 11, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant