BLOCKERS: B-3 закрыт — захват на очках работает, E2E ждёт нажатия UI

This commit is contained in:
2026-09-27 11:33:23 +03:00
parent e3582e34ec
commit c485306bc4
+20 -17
View File
@@ -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<ByteArray>(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`.
---