首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成ICE候选

生成ICE候选
EN

Stack Overflow用户
提问于 2013-12-02 01:41:18
回答 3查看 5.2K关注 0票数 4

我正在工作的WebRTC应用程序接口之间的两台电脑的运行在铬浏览器的视频通话。我的观察是,只有当我连接到互联网时,才会生成ICE候选对象,否则不会生成ice候选对象。为什么会这样呢?

连接块

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

发布于 2013-12-11 00:06:55

据我所知,ICE候选人有四种类型:

对等主机候选:从您的本地interface.

  • Server自反候选:由STUN服务器提供,将您的本地地址转换为公共network.

  • Relayed候选:由TURN服务器提供,数据将由服务器

  • 自反候选中继:罕见的情况(?)其中在连通性检查期间发现候选。我将跳过这一部分,因为它非常罕见,而且我不确定是否了解它的总体情况。

如果你没有给你的程序提供任何STUN / TURN地址,或者它们是无法访问的,那么唯一可以检索到的候选地址就是主机地址。请注意,您的本地地址(127.0.0.1)不会被视为潜在的候选地址。希望能有所帮助。

但是,我不能完全理解您的用例。两台计算机是否在同一本地网络中?如果你的接口是打开的,你至少应该得到主机候选。我只使用Javascript,但我不明白为什么它会有不同于C++的行为。

票数 9
EN

Stack Overflow用户

发布于 2013-12-02 17:00:35

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-14 16:20:51

是的,在您的pcs共享SDP之前,您必须连接到互联网。这是因为ICE服务器不在您的本地计算机上,而是在internet上。ICE服务器连接在WEB RTC中的以下行中:

if (browser === 'firefox') { PeerConnConfig = { iceServers: [{ url: "stun:23.21.150.121" // FF doesn't support resolving DNS in iceServers yet } ] }; mediaConstraints = { mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: true, MozDontOfferDataChannel: true // Tell FF not to put datachannel info in SDP or chrome will crash } }; // FF doesn't expose this yet MediaStream.prototype.getVideoTracks = function () { return []; }; MediaStream.prototype.getAudioTracks = function () { return []; }; } else { PeerConnConfig = { iceServers: [{ url: "stun:stun.l.google.com:19302" } ] }; mediaConstraints = { mandatory: { OfferToReceiveAudio: true, OfferToReceiveVideo: true }, optional: [{ DtlsSrtpKeyAgreement: true } ] }; // API compat for older versions of chrome if (!MediaStream.prototype.getVideoTracks) { MediaStream.prototype.getVideoTracks = function () { return this.videoTracks; }; MediaStream.prototype.getAudioTracks = function () { return this.audioTracks; }; } if (!PeerConnection.prototype.getLocalStreams) { PeerConnection.prototype.getLocalStreams = function () { return this.localStreams; }; PeerConnection.prototype.getRemoteStreams = function () { return this.remoteStreams; }; } }

我从WEBRTC_SHIM中删减了上面的代码。特别考虑将ICE服务器定义为: url:"stun:stun.l.google.com:19302“的代码行。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20315178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档