Switch camera during video call?

379 views
Skip to first unread message

Kulsum International Hospital

unread,
Jul 22, 2020, 6:03:20 AM7/22/20
to discuss-webrtc

i need to switch camera during video call . here is my code

this code run when video call connect

function initializeLocalMedia(options, callback) {

if (options) {
 options
['audio'] = true;

 
if (options['video'])
 options
['video'] = true;
} else {
 options
['audio'] = true;
 options
['video'] = false;
}

navigator
.mediaDevices.enumerateDevices().then(function (devices) {
 
var cameras = [];
 devices
.forEach(function (device) {
 
'videoinput' === device.kind && cameras.push(device.deviceId);
 
});
 
 
var defaultsOpts = { audio: false, video: true }
 defaultsOpts
.video = { facingMode: shouldFaceUser ? 'user' : 'environment' }
 
var constraints = { video: { deviceId: { exact: cameras[1] } }, audio: true };

 navigator
.mediaDevices.getUserMedia(defaultsOpts).then(function (_stream) {
 stream
= _stream;

 window
.localStream = stream;
 

 myapp
.setMyVideo(window.localStream)
 
if (callback)
 callback
();
 
}, function (err) {
 console
.log("The following error occurred: " + err.name);
 alert
('Unable to call ' + err.name)
 
});


});





}

and this code for flip camera



flipBtn.addEventListener('click', function () {
 
if (stream == null) return
// // we need to flip, stop everything
 stream
.getTracks().forEach(t => {
 t
.stop();
 
});
// // toggle / flip
 shouldFaceUser
= !shouldFaceUser;
// capture();
 
var defaultsOpts = { audio: false, video: true }
 defaultsOpts
.video = { facingMode: shouldFaceUser ? 'user' : 'environment' }
 
//var constraints = { video: { deviceId: { exact: cameras[1] } }, audio: true };

 navigator
.mediaDevices.getUserMedia(defaultsOpts).then(function (_stream) {

 stream
= _stream;
 
 
 replaceTracks
(stream);
 
 
}, function (err) {
 console
.log("The following error occurred: " + err.name);
 alert
('Unable to call ' + err.name)
 
});
 
})

 
function replaceTracks(newStreamm) {
 
//console.log(window.RTCPeerConnection);
 detachMediaStream
();

 newStreamm
.getVideoTracks().forEach(function (track) {
 track
.stop();
 
});
 
var configuration = {
 iceServers
: [{ urls: "stun:stun.1.google.com:19302" }]
 
};
 
 
//var candidate = new RTCIceCandidate(msg.candidate);
 attachMediaStream
(newStreamm);

 
// optionally, if you have active peer connections:
 _replaceTracksForPeer
();

 
function _replaceTracksForPeer() {
 
var pc = new RTCPeerConnection();

 
// var tracks = newStream.getVideoTracks()[0];
 
// tracks.enabled = true;
 pc
.getSenders().map(function (sender) {
 sender
.replaceTrack(newStreamm.getTracks().find(function (track) {
 
return track.kind === sender.track.kind;
 
}));
 
});
 
}
 
}

 
function detachMediaStream() {
 
var elem = document.getElementById('my-video');
 
//var elem = document.getElementById(id);

 
if (elem) {
 elem
.pause();

 
if (typeof elem.srcObject === 'object') {
 elem
.srcObject = null;
 
} else {
 elem
.src = '';
 
}
 
}
 
};

 
function attachMediaStream(newStreamm) {
 
var elem = document.getElementById('my-video');

 
if (elem) {
 
if (typeof elem.srcObject === 'object') {
 elem
.srcObject = newStreamm;
 
} else {
 elem
.src = window.URL.createObjectURL(newStreamm);
 
}

 elem
.onloadedmetadata = function (e) {
 elem
.play();
 
};
 
} else {
 
throw new Error('Unable to attach media stream');
 
}
 
};




when i click on flip button remote camera just hang and wont run again. 

Reply all
Reply to author
Forward
0 new messages