Background
Жизненный цикл звонка выглядит примерно следующим образом:
- Инициализация локальных треков (
initLocalTracks
) и настроек (setLocalMediaSettings
) от MediaStreamSettings
, который при аудио звонке содержит только audio
составляющую, а при видео звонке - audio
и deviceVideo
.
- Нажатие на кнопку "выключить видео" вызывает
room.disableVideo(Device)
и в случае успеха удаляет и освобождает трек (и рендерер) этого видео.
- Нажатие на кнопку "включить видео" вызывает только лишь
room.enableVideo(Device)
, а сам трек приходит через room.onLocalTrack
callback, откуда трек и добавляется.
- Пункты 2-3 описывают поведение и для аудио, и для screen sharing'а.
Question
Если при инициализации локальных треков видео было включено, то описанное выше поведение работает идеально, видео включается и выключается, индикаторы гаснут и так далее. Однако если видео было выключено (т.е. отсутствовала при initLocalTracks
/setLocalMediaSettings
в MediaStreamSettings
составляющая deviceVideo
), то в таком случае room.enableVideo(Device)
просто моментально выполняется (await
моментален) без каких либо ошибок, при этом никакого enable'а не происходит. Аналогично и screen share, т.е. если вместо Device
прокидывать Display
. Отмечу, что если при инициализации локальных треков аудио было отключено, то room.enableAudio
всё равно вызывает onLocalTrack
, тем самым отрабатывая идеально даже при выключенном изначально аудио.
Вопрос: корректно ли я поступаю в данном случае? Судя по js демо, там используется примерно такая же логика. Хочется иметь возможность из аудио звонка перейти в видео звонок так, чтобы ни камера, ни шейринг экрана не включались при старте аудио звонка.
И ещё вопрос, если можно: насколько некорректно дёргать заново initLocalTracks
и setLocalMediaSettings
для enable/disable камеры и шейринга экрана? Потому что если вызывать эти функции с включением или нет той или иной составляющей deviceVideo
и displayVideo
, то enable/disable отрабатывает идеально и как задумано. audio
составляющая делает disable аудио, но enable
аудио не отрабатывает таким образом.