mark final ice candidate (#2871)

* add IsFinal flag to last ice candidate

* deps
This commit is contained in:
Paul Wells
2024-07-16 09:50:55 -07:00
committed by GitHub
parent 8605ada485
commit c905336fec
6 changed files with 23 additions and 16 deletions

View File

@@ -69,6 +69,8 @@ type RTCClient struct {
signalRequestInterceptor SignalRequestInterceptor
signalResponseInterceptor SignalResponseInterceptor
icQueue atomic.Pointer[webrtc.ICECandidate]
subscriberAsPrimary atomic.Bool
publisherFullyEstablished atomic.Bool
subscriberFullyEstablished atomic.Bool
@@ -226,9 +228,6 @@ func NewRTCClient(conn *websocket.Conn, opts *Options) (*RTCClient, error) {
}
publisherHandler.OnICECandidateCalls(func(ic *webrtc.ICECandidate, t livekit.SignalTarget) error {
if ic == nil {
return nil
}
return c.SendIceCandidate(ic, livekit.SignalTarget_PUBLISHER)
})
publisherHandler.OnOfferCalls(c.onOffer)
@@ -556,11 +555,14 @@ func (c *RTCClient) sendRequest(msg *livekit.SignalRequest) error {
}
func (c *RTCClient) SendIceCandidate(ic *webrtc.ICECandidate, target livekit.SignalTarget) error {
trickle := rtc.ToProtoTrickle(ic.ToJSON())
trickle.Target = target
prevIC := c.icQueue.Swap(ic)
if prevIC == nil {
return nil
}
return c.SendRequest(&livekit.SignalRequest{
Message: &livekit.SignalRequest_Trickle{
Trickle: trickle,
Trickle: rtc.ToProtoTrickle(prevIC.ToJSON(), target, ic == nil),
},
})
}