From df0ab77791658977a6e244655a8c1bd60d1be014 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Wed, 1 Mar 2023 17:20:33 +0300 Subject: [PATCH] Update receiving remote candidate info for webrtc --- pkg/webrtc/conn.go | 48 +++++++++++------------------------------- pkg/webrtc/consumer.go | 2 +- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/pkg/webrtc/conn.go b/pkg/webrtc/conn.go index db4ee888..78e6a082 100644 --- a/pkg/webrtc/conn.go +++ b/pkg/webrtc/conn.go @@ -20,6 +20,7 @@ type Conn struct { send int offer string + remote string closed core.Waiter } @@ -34,6 +35,17 @@ func NewConn(pc *webrtc.PeerConnection) *Conn { c.Fire(channel) }) + pc.OnICEConnectionStateChange(func(state webrtc.ICEConnectionState) { + if state != webrtc.ICEConnectionStateChecking { + return + } + pc.SCTP().Transport().ICETransport().OnSelectedCandidatePairChange( + func(pair *webrtc.ICECandidatePair) { + c.remote = pair.Remote.String() + }, + ) + }) + pc.OnTrack(func(remote *webrtc.TrackRemote, _ *webrtc.RTPReceiver) { track := c.getTrack(remote) if track == nil { @@ -110,39 +122,3 @@ func (c *Conn) getTrack(remote *webrtc.TrackRemote) *streamer.Track { return nil } - -func (c *Conn) remote() string { - if c.pc == nil { - return "" - } - - for _, trans := range c.pc.GetTransceivers() { - if trans == nil { - continue - } - - receiver := trans.Receiver() - if receiver == nil { - continue - } - - transport := receiver.Transport() - if transport == nil { - continue - } - - iceTransport := transport.ICETransport() - if iceTransport == nil { - continue - } - - pair, _ := iceTransport.GetSelectedCandidatePair() - if pair == nil || pair.Remote == nil { - continue - } - - return pair.Remote.String() - } - - return "" -} diff --git a/pkg/webrtc/consumer.go b/pkg/webrtc/consumer.go index 828a03f1..9e73bf50 100644 --- a/pkg/webrtc/consumer.go +++ b/pkg/webrtc/consumer.go @@ -114,7 +114,7 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer. func (c *Conn) MarshalJSON() ([]byte, error) { info := &streamer.Info{ Type: "WebRTC", - RemoteAddr: c.remote(), + RemoteAddr: c.remote, UserAgent: c.UserAgent, Medias: c.medias, Tracks: c.tracks,