@@ -49,6 +49,7 @@ func (s *sfuServer) postISLBEvent(event *islb.ISLBEvent) {
4949}
5050
5151func (s * sfuServer ) Signal (stream pb.SFU_SignalServer ) error {
52+ recvCandidates := []webrtc.ICECandidateInit {}
5253 peer := isfu .NewPeer (s .sfu )
5354 var streams []* ion.Stream
5455
@@ -326,20 +327,20 @@ func (s *sfuServer) Signal(stream pb.SFU_SignalServer) error {
326327 continue
327328 }
328329
330+ // trickle the old candidates
331+ for _ , candidate := range recvCandidates {
332+ err = peer .Trickle (candidate , int (payload .Trickle .Target ))
333+ if err != nil {
334+ log .Warnf ("peer trickle error: %v" , err )
335+ }
336+ }
329337 err = peer .Trickle (candidate , int (payload .Trickle .Target ))
330338 if err != nil {
331339 switch err {
332340 case isfu .ErrNoTransportEstablished :
333- log .Errorf ("peer hasn't joined, error -> %v" , err )
334- err = stream .Send (& pb.SignalReply {
335- Payload : & pb.SignalReply_Error {
336- Error : fmt .Errorf ("trickle error: %w" , err ).Error (),
337- },
338- })
339- if err != nil {
340- log .Errorf ("grpc send error: %v" , err )
341- return status .Errorf (codes .Internal , err .Error ())
342- }
341+ // cadidate arrived before join, cache it
342+ log .Infof ("cadidate arrived before join, cache it: %v" , candidate )
343+ recvCandidates = append (recvCandidates , candidate )
343344 default :
344345 return status .Errorf (codes .Unknown , fmt .Sprintf ("negotiate error: %v" , err ))
345346 }
0 commit comments