Browse Source

Record the implemented call timing protocol and next stages

master
evgeny 5 days ago
parent
commit
120a865152
  1. 10
      doc/chat_call_arch.md
  2. 5
      doc/tasks.md

10
doc/chat_call_arch.md

@ -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`. Явное завершение звонка прекращает

5
doc/tasks.md

@ -8,8 +8,9 @@
H.265 с fallback H.264, смена камеры/разрешения/кодека/битрейта во время звонка.
Общая шкала захвата, приёмное видео следует аудиоряду; адаптация по ACK 500мс/50мс и задолженности.
Реализованы router ACK/debt и отдельный регулятор; check.sh 153/153 + proxy/burst/load проходят.
Видео пока не подключено. Остановлено на выявленном дрейфе SoundTouch feed/tempo;
измерения и два варианта временной шкалы зафиксированы в спецификации.
Реализован вариант 2: фактическая карта Copy/Mix SoundTouch, CallTimeline, capture PTS/эпоха/Opus delay
в протоколе, часы воспроизведения desktop/Android. Сборки успешны, 79 Kotlin-тестов и профильные C++-тесты проходят.
Видео пока не подключено: далее codecs/capabilities, ограниченные очереди и A/V scheduler, UI обеих платформ.
Контракты, этапы и проверки: `doc/call_video.txt`.
[+] **Android live: увеличение и перемещение видео как в просмотрщике файлов** — 14.10.2026:

Loading…
Cancel
Save