Я разрабатываю приложение видеочата с помощью JavaScript и Twilio Video SDK. Я внедрил функцию, позволяющую мобильным пользователям переключаться между передними и задними камерами. Попытка снова переключиться, с задней части к передней камере, локальное видео замораживает (показывает последнюю кадр) или становится черным. Камера. < /p>
Мой текущий код выполняет следующие шаги для переключения камер: < /p>
Получить список доступных камер (видео вход). Id. < /Li>
Uncublishtrack and Stop (track.stop ()) старая видео трека. < /Li>
Опубликовать новую видеоте.
Код: Выделить всё
Plugin.prototype.checkDevices = function () {
var that = this;
var constraints = {
audio: true,
video: true
};
navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
that.userStream = stream;
var nstream = null;
if (that.options.auto_recording === 4) {
const tracks = stream.getAudioTracks();
nstream = new MediaStream();
nstream.addTrack(tracks[0]);
} else {
nstream = stream;
}
if (!that.setUpRTCRecorder('own', that.getVideoFrom(false), false, nstream, false)) {
that.setUpStatRecording();
}
navigator.mediaDevices.enumerateDevices().then(function (mediaDevices) {
var count = 1;
const select = document.getElementById('video-switch-select');
that.cameraSelected = 0;
mediaDevices.forEach(mediaDevice => {
if (mediaDevice.kind === 'videoinput') {
count++;
that.cameras.push({
id: mediaDevice.deviceId,
label: mediaDevice.label || `Camara ${count}`
});
}
});
if (that.cameras.length > 1) {
$(".video-switch-button").on('click', function () {
that.cameraSelected++;
if (that.cameraSelected >= that.cameras.length) {
that.cameraSelected = 0;
}
console.log("Switching to camera", that.cameraSelected);
var toswitch = that.cameras[that.cameraSelected];
Twilio.Video.createLocalVideoTrack({
deviceId: {exact: toswitch.id}
}).then(function (localVideoTrack) {
console.log("Adding track", localVideoTrack);
const publications = Array.from(that.activeRoom.localParticipant.videoTracks.values());
for (var i in publications) {
var track = publications[i].track;
console.log("Unpublishing track", track);
that.activeRoom.localParticipant.unpublishTrack(track);
track.stop();
}
that.activeRoom.localParticipant.publishTrack(localVideoTrack);
$('#local-media').html("");
document.getElementById('local-media').appendChild(localVideoTrack.attach());
if (that.chatOn) {
$('#local-media > video').addClass('local-media-oncall-video-chat');
$('.user-placeholder').addClass('placeholder-oncall-video-chat');
} else {
$('#local-media > video').addClass('local-media-oncall-video');
$('.user-placeholder').addClass('placeholder-oncall-video');
}
}).catch(error => {
console.error("Error al crear la nueva pista de video:", error);
alert("Error al cambiar de cámara: " + error.message);
});
});
}
});
that.initCB();
}).catch(function (error) {
alert('getUserMedia() error: ', error.message);
});
};
Подробнее здесь: https://stackoverflow.com/questions/797 ... eo-in-chro