接收方先接收到的是candidate导致无法建立连接的问题


#1

发起方先发送offer sdp, 再发送candiate message后存在接收方先接收到的是candidate,导致无法建立连接的问题。

第一次接触webrtc,有个棘手的问题请教各位大神。

有个项目,发起方和接受方在建立连接阶段,概率性连接失败,概率还挺大,大约有一半的概率连接不上。
问题描述:
1.连接成功的情况:
接收方执行register后,如果接收到的是"sdp",就会连接成功,弹出是否接受连接的提示框。
main.log.0:39666:06-13 17:13:00.054 10249 11455 D rast-WebSocketChannel: C->WSS: {“cmd”:“register”,“roomid”:“474227”,“clientid”:“474227_13417847247”,“auth”:“4e69f1476ef488c62c526779bcdd229e681f416dfed3e85amc75d02139c1e1560417116”}
main.log.0:39839:06-13 17:13:00.979 10249 11466 D rast-WebSocketChannel: WSS->C: {“msg”:"{“sdp”:"v=0\r\no=- 4247763827755673375 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE audio video data\r\na=msid-semantic: WMS ARDAMS0

2.连接失败的情况:
接收方执行register后,如果接收到的是"candidate",就连接失败。
main.log.0:43803:06-13 17:13:20.316 10249 11530 I rast-WebSocketChannel: Registering WebSocket for room 545532. CLientID: 545532_13417847247
main.log.0:43807:06-13 17:13:20.378 10249 11530 D rast-WebSocketChannel: C->WSS: {“cmd”:“register”,“roomid”:“545532”,“clientid”:“545532_13417847247”,“auth”:“0a2530707f679d465f518181da1837c36d0667e2fe5c4645amc75d0213b01e1560417201”}
main.log.0:43808:06-13 17:13:20.398 10249 11542 D rast-WebSocketChannel: WSS->C: {“msg”:"{“type”:“candidate”,“label”:0,“id”:“audio”,“candidate”:“candidate:4234804642 1 udp 2122260223 172.29.60.54 37502 typ host generation 0 ufrag OVjO network-id 3 network-cost 10”}",“error”:""}

连接失败的情况一般出现在上次连接失败或者上次连接成功后自动断开后再次连接的情况。

具体是什么原因导致的呢?
看网上介绍,onicecandidate是在设置本地sdp后就被调用了:
pc.setLocalDescription(sdp);//设置本地sdp,完成设置后onicecandidate事件会调用。

PeerConnection.Observer接口的实现是作为PeerConnectionFactory的函数createPeerConnection的参数传入的。

发送方的createOffer是在createPeerConnection之后执行的,在createOffer的回调onCreateSuccess中执行了setLocalDescription,onSetSuccess还没有被调用,就已经触发了onicecandidate回调。