Webrtc 生成ICE候选对象

Webrtc 生成ICE候选对象,webrtc,Webrtc,我正在使用WebRTC API在chrome浏览器上运行的两台PC之间进行视频调用。我的观察是,只有当我连接到internet时,才会生成ICE候选项,否则不会生成ICE候选项。为什么会这样 连接块 var pc_config = {"iceServers":[]}; pc = new webkitRTCPeerConnection(pc_config); pc.onicecandidate=function (evt) { if(evt.candid

我正在使用WebRTC API在chrome浏览器上运行的两台PC之间进行视频调用。我的观察是,只有当我连接到internet时,才会生成ICE候选项,否则不会生成ICE候选项。为什么会这样

连接块

var pc_config = {"iceServers":[]};

      pc = new webkitRTCPeerConnection(pc_config);
       pc.onicecandidate=function (evt) {

       if(evt.candidate){
         console.log("Sending candidate to other peer"+evt);
        jWebSocketClient.broadcastText("",evt);
        }
      };  
谢谢,
Sureshkumar Menon

如果我没有弄错的话,ICE候选者是通过联系
STUN
服务器创建的,因此您需要互联网连接。这样做是为了将私人地址转换为公共地址,使您的客户端能够连接(并被连接)到其他客户端。

据我所知,有四种类型的ICE候选地址:

  • 候选主持人:从您的本地界面
  • 服务器自反候选:由STUN服务器提供,将您的本地地址翻译成公共网络
  • 中继候选:由回合服务器提供,数据将由服务器中继
  • 对等自反候选者:在连接检查期间发现候选者的罕见情况(?)。我将跳过这一部分,因为这是非常罕见的,我不确定是否理解它的大局
  • 如果您没有向您的程序提供任何晕眩/转身地址,或者无法访问这些地址,则可以检索的唯一候选地址是主机地址。请注意,您的本地地址(127.0.0.1)不会被视为潜在候选人。 希望能有帮助


    但是,我不能完全确定您是否理解您的用例。。两台计算机在同一个本地网络上吗?如果您的接口已启动,则至少应该获得主机候选。我只使用C++ API,但我不明白为什么它会与JavaScript的不同行为。< P> >是的,在PC共享SDP之前,你必须连接到Internet。这是因为ICE服务器不在本地计算机上,而是在internet上。ICE服务器通过以下线路连接到WEB RTC中:

    if(浏览器=='firefox'){
    PeerConnConfig={
    ICEServer:[{
    url:“stun:23.21.150.121”//FF尚不支持在ICEServer中解析DNS
    }
    ]
    };
    媒体约束={
    强制性:{
    OfferToReceiveAudio:正确,
    OfferToReceiveVideo:没错,
    MozDontOfferDataChannel:true//告诉FF不要将数据通道信息放入SDP,否则chrome将崩溃
    }
    };
    //FF还没有揭露这一点
    MediaStream.prototype.getVideoTracks=函数(){
    返回[];
    };
    MediaStream.prototype.getAudioTracks=函数(){
    返回[];
    };
    }否则{
    PeerConnConfig={
    ICEServer:[{
    网址:“stun:stun.l.google.com:19302”
    }
    ]
    };
    媒体约束={
    强制性:{
    OfferToReceiveAudio:正确,
    OfferToReceiveVideo:正确
    },
    可选:[{
    DtlsSrtpKeyAgreement:true
    }
    ]
    };
    //适用于chrome旧版本的API compat
    if(!MediaStream.prototype.getVideoTracks){
    MediaStream.prototype.getVideoTracks=函数(){
    返回此项。视频跟踪;
    };
    MediaStream.prototype.getAudioTracks=函数(){
    归还此音频曲目;
    };
    }
    if(!PeerConnection.prototype.getLocalStreams){
    PeerConnection.prototype.getLocalStreams=函数(){
    返回this.localStreams;
    };
    PeerConnection.prototype.getRemoteStreams=函数(){
    返回此文件。remoteStreams;
    };
    }
    }


    我从WEBRTC_SHIM中剪切了上面的代码。特别是将ICE服务器定义为:URL:“STUN:STUN .L.GooGel.com:19302”。chrome://webrtc-internals/