Переключение передней / задней камеры на Android во время вызова WebRTC с использованием Circuit SDK
Я могу сделать прямой вызов между Circuit WebClient и примером приложения SDK по адресу https://output.jsbin.com/posoko.
При запуске примера SDK на ПК со второй камерой (USB) переключение между встроенной камерой и камерой USB работает нормально. Но пробуя то же самое на моем устройстве Android (Samsung Galaxy S6), переключение не работает.
Мой код использует navigator.mediaDevices.enumerateDevices()
чтобы получить камеры, а затем использует функцию Circuit SDK setMediaDevices
переключиться на другую камеру.
async function switchCam() {
let availDevices = await navigator.mediaDevices.enumerateDevices();
availDevices = availDevices.filter(si => si.kind === 'videoinput');
let newDevice = availDevices[1]; // secondary camera
await client.setMediaDevices({video: newDevice.deviceId})
}
Может кто-нибудь объяснить, почему это не работает на устройстве Android?
1 ответ
Мы видели устройства Android, которые не позволяют звонить navigator.getUserMedia
пока видео дорожка (и, следовательно, поток) все еще активна. Я попробовал ваш пример выше с Pixel 2 без каких-либо проблем.
Если вы удалите видеодорожку из потока и остановите ее перед вызовом client.setMediaDevices, коммутатор должен работать.
async function switchCam() {
const stream = await client.getLocalAudioVideoStream();
const currTrack = stream.getVideoTracks()[0];
console.log(`Remove and stop current track: ${currTrack.label}`);
stream.removeTrack(currTrack);
currTrack.stop();
let availDevices = await navigator.mediaDevices.enumerateDevices();
availDevices = availDevices.filter(si => si.kind === 'videoinput');
let newDevice = availDevices[1]; // secondary camera
await client.setMediaDevices({video: newDevice.deviceId})
}
Полный пример камеры переключения на JSBin можно найти по адресу https://output.jsbin.com/wuniwec/