|
|
|
|
@ -41,7 +41,7 @@ CALL_DECLINE 0x04 {call_id:8, reason:1}
|
|
|
|
|
CALL_BUSY 0x05 {call_id:8} |
|
|
|
|
CALL_CANCEL 0x06 {call_id:8} |
|
|
|
|
CALL_HANGUP 0x07 {call_id:8, reason:1} |
|
|
|
|
CALL_MEDIA 0x10 {call_id:8, track_id:1, seq:2, ts_ms:4, payload} |
|
|
|
|
CALL_MEDIA 0x10 {call_id:8, track_id:1, seq:2, ts_ms:4, capture_pts_us:8, capture_epoch:8, codec_delay_samples:4, payload} |
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
- `call_id` — случайный uint64, генерит вызывающий; идентифицирует сессию на обеих сторонах. |
|
|
|
|
@ -50,6 +50,10 @@ CALL_MEDIA 0x10 {call_id:8, track_id:1, seq:2, ts_ms:4, payload}
|
|
|
|
|
- Медиа: без подписи (уже внутри шифрованного канала etcp_router). |
|
|
|
|
- `CALL_MEDIA` — общий контейнер; `track_id` оставляет место видео (`type=VIDEO`). |
|
|
|
|
- Аудио: Opus 48kHz mono, 20ms (960 сэмплов), ~24–32 kbps. ~50 кадров/с. |
|
|
|
|
- Заголовок медиа — 36 байт с subcmd. `ts_ms` — время отправки для оценки сетевого джиттера; |
|
|
|
|
`capture_pts_us` — время первого входного сэмпла в монотонной шкале отправителя, `INT64_MIN` при отсутствии метки. |
|
|
|
|
`capture_epoch` различает разрывы захвата; `codec_delay_samples` передаёт Opus lookahead. |
|
|
|
|
Старый формат не поддерживается; медиа принимается только от пира текущего звонка. |
|
|
|
|
|
|
|
|
|
## 4. Машина состояний |
|
|
|
|
|
|
|
|
|
@ -111,6 +115,10 @@ CM handle инициирует оптимальное подключение и
|
|
|
|
|
Аудиопоток кодирует PCM и постит `call_send_media`; приём в uasync кладёт Opus в `call_jitter`. |
|
|
|
|
Декодер, SoundTouch и генератор тонов принадлежат аудиопотоку. |
|
|
|
|
Кольцо кодированных кадров и снимок статистики защищены мьютексом; статистика не читает SoundTouch из другого потока. |
|
|
|
|
`CallTimeline` хранит фактическое соответствие входных участков SoundTouch выходному PCM. |
|
|
|
|
Платформа публикует позицию воспроизведения с локальной монотонной меткой; `call_audio_get_clock` |
|
|
|
|
возвращает исходный PTS слышимого участка. Локальная тишина и тоны удерживают PTS. |
|
|
|
|
Невалидная/устаревшая отметка устройства не разрешает продвижение видео. Контракт и ограничения — `call_video.txt`. |
|
|
|
|
|
|
|
|
|
GUI запускает аудиоустройство по CALL_ACCEPTED. При CALL_ENDED начинается финальный тон; |
|
|
|
|
устройство останавливается перед `call_audio_release`. Явное завершение звонка прекращает |
|
|
|
|
|