如何开始收集用于点对点连接的ICE候选项

8
我正在开发两个对等方之间的信令系统,并注意到RTCPeerConnection.onicecandidate事件没有触发。 我检查了iceGatheringState并且它总是返回“new”,这意味着对等连接尚未开始搜索ice candidate。
我该如何从本地机器启动收集ice candidate对象以发送给对等方?
如果我不想滴漏candidates,那么一旦收集到它们,我如何通过sdp发送它们?
这是我的当前代码,我能够成功获取sdp数据并捕获它们以便发送,因此ice和检查两个客户端是否连接起来是唯一的问题。
var peerConn = new webkitRTCPeerConnection(
    {'iceServers':[{'url':'stun:stun.1.google.com:19302'}]}
);
var remoteConn = new webkitRTCPeerConnection(
    {'iceServers':[{'url':'stun:stun.1.google.com:19302'}]}
);

alert(peerConn.iceGatheringState);

///Event Handlers//
//will be called when each event occurs

//onicecandidate
//returns local ice candidates (when gathered) to be sent to peer
//peerConn.onicecandidate = onicecandidate;
peerConn.onicecandidate = function(iceEvent){ //not firing
    if(iceEvent.candidate === null){
        alert(peerConn.iceConnectionState);
        alert(iceEvent.candidate);

        //send to peer or put in with sdp data
    }
}
1个回答

13

当您使用createOffer或createAnswer生成的SDP调用setLocalDescription时,ICE收集将开始。

如果您不想使用渐进式ICE,请等待空候选者,然后发送peerConn.localDescription.sdp的内容--其中应包括该候选者。


因此,在非滴漏解决方案中,SDP生成和本地描述设置的函数仅在接收到空候选者后才会被调用,这意味着如果我在之前调用它们,那么ICE候选者将不会被添加? - Pj Rigor
不行,你不能在空候选项之前不发出SDP信令。你必须生成SDP并调用setLocalDescription来开始收集。 请尝试这个fiddle - Philipp Hancke
1
我没有打开任何数据通道或流。这可能是我的问题,我正在尝试实现小提琴,看看它是否能够奏效。 - Pj Rigor
它运行了!我执行过程的顺序不正确。 - Pj Rigor
2
@PjRigor,你能展示一下代码吗?由于我设置了本地描述,但在应答端没有收集冰,可能与添加流有关? - Muhammad Umer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接