|
|
|
|
@ -115,6 +115,13 @@ CM handle инициирует оптимальное подключение и
|
|
|
|
|
GUI запускает аудиоустройство по CALL_ACCEPTED. При CALL_ENDED начинается финальный тон; |
|
|
|
|
устройство останавливается перед `call_audio_release`. Явное завершение звонка прекращает |
|
|
|
|
воспроизведение накопленной речи и включает тон завершения — на обеих платформах. |
|
|
|
|
Android останавливает гудки до настройки звонкового аудиотракта. После выбора маршрута |
|
|
|
|
и создания AudioRecord поток захвата начинает отправку, затем создаётся и запускается AudioTrack. |
|
|
|
|
Ошибка подготовки playback останавливает и дожидается уже запущенного захвата через общий `stop()`. |
|
|
|
|
Маршрутизатор использует один снимок входных/выходных устройств; обновляет его при старте, |
|
|
|
|
событиях устройств/BT-профиля и явной переоценке. По завершении снимок освобождается. |
|
|
|
|
INFO-логи Android показывают длительности настройки режима, маршрута, создания/старта устройств |
|
|
|
|
и время первого кадра захвата. Общий `call_audio` логирует время ожидания первого PCM. |
|
|
|
|
|
|
|
|
|
## 7. Буфер звонка и восстановление |
|
|
|
|
|
|
|
|
|
@ -146,13 +153,15 @@ SoundTouch: `USE_QUICKSEEK=1, SEQUENCE_MS=20, SEEKWINDOW_MS=10, OVERLAP_MS=4`.
|
|
|
|
|
устанавливается) — гудок «соединение» (короткие бипы); |
|
|
|
|
- фаза 2 «звоним» (`RINGING`: получен RINGING, у пира идёт вызов) — длинные гудки (ringback). |
|
|
|
|
Гудки генерируются платформенно-нативно: desktop — цикличные MP3 через `SoundManager` |
|
|
|
|
(`call_connecting`/`call_ringing`), Android — `ToneGenerator` |
|
|
|
|
(`TONE_SUP_DIAL`/`TONE_SUP_RINGTONE`). Переключение — по `CHAT_EVT_CALL_RINGING`, |
|
|
|
|
(`call_connecting`/`call_ringing`), Android — цикличные MP3 через `CallRingback`/`MediaPlayer`. |
|
|
|
|
Переключение — по `CHAT_EVT_CALL_RINGING`, |
|
|
|
|
остановка — по `CALL_ACCEPTED`/`CALL_ENDED`/`CALL_ERROR`/hangup. |
|
|
|
|
- **Отсутствие медиа ≥500мс при недоборе PCM** (нет входящих медиа) → в `call_audio_pull_pcm` воспроизводится |
|
|
|
|
- **Начальное ожидание первого PCM** → тишина без сигнала потери звука. Подготовка удалённого микрофона |
|
|
|
|
и начальное накопление jitter не считаются перебоем. Существующий таймаут 20с без медиа действует с ACTIVE. |
|
|
|
|
- **Недобор PCM ≥500мс после начала воспроизведения** → в `call_audio_pull_pcm` воспроизводится |
|
|
|
|
`CALL_TONE_GLITCH`: `пи-пи (2×150мс, gap 100мс) … тишина до 1.0с … пи(200мс) |
|
|
|
|
пауза(200мс) пи(200мс)`, 1000 Гц, цикл пока длится сталл. До порога — тишина при нехватке PCM. |
|
|
|
|
При восстановлении медиа или полном запросе PCM сигнал останавливается. |
|
|
|
|
При возобновлении PCM сигнал останавливается; одного входящего пакета без достаточного запаса недостаточно. |
|
|
|
|
- **Завершение звонка → всегда** `CALL_TONE_ENDED`: 3 нисходящих 700/500/400 Гц по 150 мс. |
|
|
|
|
- Счётчики: tx/rx кадры, `c_tx_dropped`/`c_rx_dropped`, дропы буфера, сталлы, |
|
|
|
|
tempo-события, причины завершения. Логи `DEBUG_CATEGORY_CALL` (+стата раз в 1с). |
|
|
|
|
|