Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webrtc适用于所有浏览器,但不适用于firefox_Javascript_Html_Webrtc - Fatal编程技术网

Javascript webrtc适用于所有浏览器,但不适用于firefox

Javascript webrtc适用于所有浏览器,但不适用于firefox,javascript,html,webrtc,Javascript,Html,Webrtc,比什么都重要!我已经检查了类似问题中的所有答案,这些答案既没有用处,又陈旧。 我曾尝试在firefox上使用webrtc,但没有成功!没有错误 此代码适用于除firefox以外的所有浏览器 这是我的密码 let configuration = { "iceServers":[{ 'url':'stun:stun.l.google.com:19302' }] }; io.on("signaling_message",(data)=&g

比什么都重要!我已经检查了类似问题中的所有答案,这些答案既没有用处,又陈旧。 我曾尝试在firefox上使用webrtc,但没有成功!没有错误

此代码适用于除firefox以外的所有浏览器

这是我的密码

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();
        }

我的代码有什么问题吗

另外一个问题,我可以在生产中使用谷歌StunIce服务器吗?它们可靠吗

编辑

firefox坚持使用这个脚本

  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");
            }
        }
它像一个循环一样不断显示此消息(ice候选者已完成)

您应用了吗

谷歌stun服务器也不适合生产

因为如果您的客户端位于NAT或防火墙后面,则P2P连接是不可能的

若WebRTC中的P2P连接失败,则必须准备将服务器转到中继


例如,您可以使用

谢谢,但导入适配器后我没有感觉到任何变化。你能检查(编辑)部分吗?firefox浏览器死机(rtcPeerConn.onicecandidate)可能是一个Clue我还有一个问题,如何使用适配器?我应该把它包括进去吗?我没有找到任何使用methodsadapter的文档。您需要做的是在脚本之前插入它。像这样:我想也许你的配置是错误的。您能在修复后进行测试吗?>>{iceServers:[{url:“stun:stun.l.google.com:19302”}]不是“url”,而是“url”。url属性已过时