Add trickling on server (part 2)

This commit is contained in:
Pierre HUBERT 2020-04-12 15:18:42 +02:00
parent 570830571e
commit e06c9d8be5

View File

@ -202,7 +202,7 @@ func newCall(mainOffer receivedSignal, r activeRelay) {
// Enable trickling // Enable trickling
s := webrtc.SettingEngine{} s := webrtc.SettingEngine{}
s.SetTrickle(true) s.SetTrickle(false)
// Create the API object with the MediaEngine // Create the API object with the MediaEngine
api := webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine), api := webrtc.NewAPI(webrtc.WithMediaEngine(mediaEngine),
@ -403,6 +403,10 @@ func newCall(mainOffer receivedSignal, r activeRelay) {
val.Close() val.Close()
} }
// Ice candidates mutex
var newCandidatesMux sync.Mutex
newPendingCandidates := make([]*webrtc.ICECandidate, 0)
// Create new peer connection // Create new peer connection
newPeerConnection, err := api.NewPeerConnection(peerConnectionConfig) newPeerConnection, err := api.NewPeerConnection(peerConnectionConfig)
if err != nil { if err != nil {
@ -411,6 +415,27 @@ func newCall(mainOffer receivedSignal, r activeRelay) {
} }
clients[newMessage.peerID] = newPeerConnection clients[newMessage.peerID] = newPeerConnection
// Send ice candidates
newPeerConnection.OnICECandidate(func(c *webrtc.ICECandidate) {
if c == nil || r.closed {
return
}
newCandidatesMux.Lock()
defer newCandidatesMux.Unlock()
// Check if we have already determined remote descprition
desc := newPeerConnection.LocalDescription()
if desc == nil {
// Append signal to the queue
newPendingCandidates = append(newPendingCandidates, c)
} else {
// Send the signal immedialy
sendSignal(r.callHash, newMessage.peerID, c.ToJSON())
}
})
// Add tracks // Add tracks
for _, value := range localTracks { for _, value := range localTracks {
_, err = newPeerConnection.AddTrack(value) _, err = newPeerConnection.AddTrack(value)
@ -433,17 +458,16 @@ func newCall(mainOffer receivedSignal, r activeRelay) {
continue continue
} }
// Send ice candidates
newPeerConnection.OnICECandidate(func(c *webrtc.ICECandidate) {
if c != nil {
println("new ice candidate 2")
sendSignal(r.callHash, newMessage.peerID, c.ToJSON())
}
})
// Send offer // Send offer
sendSignal(r.callHash, newMessage.peerID, offer) sendSignal(r.callHash, newMessage.peerID, offer)
// Send pending ice candidates
newCandidatesMux.Lock()
for _, c := range newPendingCandidates {
sendSignal(r.callHash, newMessage.peerID, c.ToJSON())
}
newCandidatesMux.Unlock()
} else if newMessage.sigType == SDP { } else if newMessage.sigType == SDP {
// Got an answer from the client // Got an answer from the client