diff --git a/BLOCKERS.md b/BLOCKERS.md index 9c538be..06fed0d 100644 --- a/BLOCKERS.md +++ b/BLOCKERS.md @@ -63,27 +63,30 @@ settings put global adb_wifi_enabled 1 # не дать ему ав --- -## B-3 · Звук end-to-end: очки не на общей сети +## B-3 · Звук end-to-end — РЕШЕНО на стороне очков -**Когда выяснено:** 2026-09-27, при попытке E2E-проверки аудио после ночной сессии. +**Когда замечено:** 2026-09-27, E2E-проверка после восстановления общей сети «O2 5». -**Что я вижу сейчас:** -- Телефон на WiFi «O2 5» (192.168.76.121/22, шлюз 192.168.76.1). -- Очки подключались к «O2 5» и получали `192.168.76.248/22` — **это та же подсеть**. - Это видно из логов `dumpsys wifi` очков (06:19:42 — provisioned DHCP). -- Затем очки **ушли на «Caffeine Portable»** (10.197.69.201/24) — другая подсеть, не - маршрутизируется с телефоном. В логах это 06:37:49. -- Сейчас (на момент написания B-3): `wlan0` на очках вообще в `NO-CARRIER` — WiFi - соединения нет. +**Что доказано работающим на очках:** +- `MediaProjection` получается без диалога (`PROJECT_MEDIA: allow` уже стоит с ночи). +- `AudioPlaybackCapture` стартует, читает PCM: `GlassesAudioCapture: capture: bytes=... rms=...`. +- 440 Гц TestTone → RMS=5674 (теория ~5657). **Реальный звук захвачен, не тишина**. +- Динамик очков мутится (`STREAM_MUSIC: mute`). +- Поток PCM по 4 КБ фреймам идёт в `Channel(capacity=16)`, готов к WebSocket. +- TCP-порт `8081` на очках (`192.168.76.248:8081/vm-audio`) отвечает с телефона. -**Что это значит:** End-to-end аудио нельзя проверить в текущем состоянии, **но это не -баг — это окружение**. Когда очки снова на «O2 5», mDNS `_adb-tls-connect._tcp` -должен находить `ip:port` и поток пойдёт. +**Что не проверено вживую:** воспроизведение на телефоне. AudioPlaybackManager код опубликован, +но не вызван (`controller.setAudioMode(ON_PHONE)` никто не дёрнул). UI-переключатель на +телефоне готов, но нажать его можно только с руки (в этой сессии PhoneDebugReceiver я не +реализовал, broadcast дропается HONOR). -**Следующий шаг:** при следующем физическом доступе к очкам — подключить их к «O2 5» -и запустить полный E2E: на очках поднять `VmService`, на телефоне нажать переключатель -«Звук на телефоне», послушать. Сама механика уже доказана через debug-`TestTone` -(440 Гц, RMS=5629, что совпадает с теорией для PCM16 full-scale). +**Известный race-condition:** `MainActivity.handledTick` при двойном `requestProjection` +с коротким интервалом пересоздаёт projection → `AudioRecord.read -2`. Не блокирует нормальную +работу (UI нажимается один раз → один tick), но при отладке DEBUG_AUDIO_PIPE после уже +активного захвата ломает capture. Чиню при случае. + +**Следующий шаг:** нажать в UI телефона переключатель «Звук на телефоне» — должно +зазвучать. Если нет — проверить `adb -s AXGL024B05001337 logcat -s AudioPlaybackManager:V`. ---