before anything ! i have checked all answers in similar questions and the answers wasn't usefull and old . i have tried to use webrtc on firefox but it did not work ! and no error was givin !
this code work on all browsers but firefox
this is my code
let configuration = {
"iceServers":[{
'url':'stun:stun.l.google.com:19302'
}]
};
io.on("signaling_message",(data)=>{
//displayMessage(data.message);
if(!rtcPeerConn){
startSignaling();
}
if(data.type!="user_here"){
let message = JSON.parse(data.message);
if(message.sdp){
rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp),()=>{
if(rtcPeerConn.remoteDescription.type=="offer"){
rtcPeerConn.createAnswer(sendLocalDesc,logerror)
}
})
}else{
rtcPeerConn.addIceCandidate(new RTCIceCandidate(message.candidate));
}
}
})
function startSignaling(){
displayMessage("start signaling...");
rtcPeerConn = new RTCPeerConnection(configuration);
//send ice candidate to other peer
rtcPeerConn.onicecandidate = function(evt){
if(evt.candidate){
io.emit("signal",{"type":"ice candidate","message":JSON.stringify({'candidate':evt.candidate}),room:signal_room})
displayMessage("completed that ice candidate");
}
}
rtcPeerConn.onnegotiationneeded = function(){
displayMessage("on negotiationnneded");
rtcPeerConn.createOffer(sendLocalDesc,logerror);
}
rtcPeerConn.onaddstream = (evt,err)=>{
displayMessage("creating the other stream");
if(err){
displayMessage(err)
}
success2(evt.stream);
}
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(stream=>{
success(stream);
rtcPeerConn.addStream(stream);
}).catch(err=>{
logerror(err);
});
}
function sendLocalDesc(desc){
rtcPeerConn.setLocalDescription(desc,()=>{
displayMessage("set local description");
io.emit("signal",{type:"SDP",message:JSON.stringify({'sdp':rtcPeerConn.localDescription}),room:signal_room})
},logerror);
}
function success(stream){
if ("srcObject" in video) {
video.srcObject = stream;
} else {
// Avoid using this in new browsers, as it is going away.
video.src = window.URL.createObjectURL(stream);
}
video.play();
}
function success2(stream){
if ("srcObject" in video2) {
video2.srcObject = stream;
} else {
// Avoid using this in new browsers, as it is going away.
video2.src = window.URL.createObjectURL(stream);
}
video2.play();
}
is there anything wrong with my code?
another question , can i use google stun iceservers on production ? are they reliable?
EDIT
the firefox stuck at this script
rtcPeerConn.onicecandidate = function(evt){
if(evt.candidate){
io.emit("signal",{"type":"ice candidate","message":JSON.stringify({'candidate':evt.candidate}),room:signal_room})
displayMessage("completed that ice candidate");
}
}
it keeps displaying this message (completed that ice candidate) like a loop