fix(камера): не держать превью-камеру весь звонок (лампочка горела при выкл. видео)

Первопричина: LocalVideoControlButton/LocalAudioControlButton на mounted() подписываются на
useDevices и держат подписку весь звонок; initializeDevices безусловно грабит камеру
(getUserMedia video:true) для превью, хотя кнопкам нужен лишь список устройств. Камера отпускалась
только по завершении звонка → индикатор горел при выключенном видео (медиа-конвейер звонка свой трек
останавливает корректно, но превью-подсистема — нет).

Фикс: разделены подписка на СПИСОК устройств и на ЖИВОЙ превью-поток. streamSubscribersCount +
единая точка контроля в updateAudio/VideoStream (без превью-подписчика поток не грабится и
останавливается — защищает и от watch). Кнопки звонка: requestStream:false. Диалог настроек —
без изменений (превью работает). enableDeviceEvents использует enumerateDevices (без камеры).

Сборка OK. НЕ деплоено — ждёт тест-фазу (docs/f7-fixes/camera-led-on-with-video-off.md).
This commit is contained in:
2026-07-08 08:20:19 +00:00
parent 49dd055a58
commit 557d2f0864
22 changed files with 105 additions and 13 deletions
@@ -303,11 +303,13 @@ export default {
},
mounted() {
this.subscribeToDevices()
// [F7] Кнопке нужен только СПИСОК устройств — не живой поток микрофона.
// (Симметрично видео-кнопке; звук звонка идёт через медиа-конвейер, не через превью.)
this.subscribeToDevices({ requestStream: false })
},
beforeUnmount() {
this.unsubscribeFromDevices()
this.unsubscribeFromDevices({ requestStream: false })
},
methods: {