Как отключить микрофон в iOS, чтобы исчез желтый значок микрофона

Я работаю над приложением Flutter, которое использует сервер Janus WebRTC для создания комнат голосового чата. В приложении есть кнопки для отключения и включения микрофона. Но в iOS, хотя я уже отключил микрофон, отключив аудиодорожки, родной значок все еще присутствует.

Мой способ отключить микрофон примерно так.

myStream.getAudioTracks().forEach((track){
   track.enabled = false;
});

Я также пробовал:

myStream.getAudioTracks().forEach((track){
   track.setMicrophoneMute(true);
});

И хоть он работает и микрофон приглушен. Желтый значок встроенного микрофона продолжает отображаться. Снимок экрана здесь

Я использую модифицированную версию пакета janus_client из этого источника: https://github.com/shivanshtalwar0/flutter_janus_client


person PotatoBoy    schedule 05.03.2021    source источник
comment
Вы не можете. Это функция конфиденциальности в iOS 14.   -  person Julia    schedule 06.03.2021
comment
@Julia Но когда я попытался отключить звук в других приложениях (например, Zoom), значок исчез.   -  person PotatoBoy    schedule 06.03.2021


Ответы (1)


Это должно сработать, если вместо этого вы остановите треки.

myStream.getAudioTracks().forEach((track){
   track.stop();
});

Значок исчезнет, ​​но также остановится поток. Это, конечно, не очень хорошо, если вы захотите снова включить звук в потоке. К счастью, вызов getUserMedia() с теми же параметрами обычно работает без запуска другого запроса пользователя. Это все еще не идеально, поскольку в этом случае включение звука больше не будет мгновенным, но в настоящее время кажется, что это единственный способ избавиться от значка.

person chrisguttandin    schedule 06.03.2021
comment
вероятно, стоит упомянуть, что можно использовать RTCRtpSender.replaceTrack, чтобы повторно включить отправку микрофона - person Philipp Hancke; 06.03.2021
comment
Моя проблема с этим решением заключается в том, что полученный мной MediaStreamTrack не имеет этого метода stop (). Однако я могу полностью избавиться от дорожки с помощью метода dispose (), который отправляет метод trackDispose через канал метода Flutter. Я уже пробовал этот подход, и значок все еще отображается - person PotatoBoy; 08.03.2021
comment
Я даже пошел дальше и установил свой список Stream audioTracks как пустой список, но значок по-прежнему выглядит так, как будто используется микрофон. - person PotatoBoy; 08.03.2021
comment
Благодарим Филиппа Ханке за добавление этого комментария. Я пропустил эту часть. - person chrisguttandin; 08.03.2021
comment
Извините, PotatoBoy, я не знал, что во Flutter есть оболочка для WebRTC. Я думал, что это просто разоблачение нативной реализации браузера. - person chrisguttandin; 08.03.2021