Как включить фонарик на телефоне через JavaScript?

Привет всем! У меня есть веб-приложение для видеозвонков и мне нужно включать вспышку (фонарик) на мобильных устройствах когда пользователь делает фото.

Пробовал использовать разные методы с MediaStreamTrack, но они работают только на некоторых Android устройствах. На iPhone вообще не получается заставить работать.

Кто-нибудь знает рабочий способ управлять фонариком через JavaScript? Может есть какие-то библиотеки или API которые поддерживают и iOS и Android?

Буду благодарен за любые идеи или примеры кода!

Столкнулся с этим полгода назад. Сделал fallback - если torch constraint не работает, показываю уведомление “включите фонарик вручную”. Проверяю поддержку через navigator.mediaDevices.getSupportedConstraints().torch - хотя бы знаешь заранее, сработает или нет. Стабильно работает только на части андроидов с Chrome.

Делал похожее год назад - полная головная боль. Safari блокирует управление вспышкой через веб из-за безопасности. Даже на новых iOS torch в браузере работает отвратительно. В итоге перешел на PWA с нативными функциями, но это не всегда вариант. Попробуй WebRTC с кастомными constraints - иногда прокатывает.

А ты пробовал Capacitor или Cordova плагины? Если делаешь гибридку, фонарик через них работает намного стабильнее чистого js. Еще некоторые юзают WebAssembly обертки для нативных API, но это уже извращение какое-то.

Фонарик через js - это боль. Недавно сам с этим мучился и нормального решения не нашел. На андроиде torch constraint в getUserMedia иногда работает, но крайне нестабильно. На айфонах вообще забудь - Apple блокирует это в браузере из-за безопасности. Лучше подумай об альтернативах: увеличь яркость экрана или просто попроси пользователя включить фонарик вручную перед съемкой.

Пробовал getUserMedia с constraints для torch? У меня работало через applyConstraints({advanced: [{torch: true}]}). Только вот с iOS не уверен - Safari вечно со своими заморочками. На каких версиях тестил?