From 747e2426f3537497e4c5a0450467591116e96f1a Mon Sep 17 00:00:00 2001 From: Hunter Dolan Date: Thu, 18 Apr 2024 19:12:50 -0600 Subject: [PATCH 1/6] Add Negotiation Error Handler --- engine.go | 10 ++++++++++ transport.go | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/engine.go b/engine.go index 74a38c5..31211cf 100644 --- a/engine.go +++ b/engine.go @@ -231,12 +231,14 @@ func (e *RTCEngine) configure( Pacer: e.connParams.Pacer, OnRTTUpdate: e.setRTT, IsSender: true, + OnNegotiationError: e.handleNegiationError, }); err != nil { return err } if e.subscriber, err = NewPCTransport(PCTransportParams{ Configuration: configuration, RetransmitBufferSize: e.connParams.RetransmitBufferSize, + OnNegotiationError: e.handleNegiationError, }); err != nil { return err } @@ -646,3 +648,11 @@ func (e *RTCEngine) handleLeave(leave *livekit.LeaveRequest) { } } } + +func (e *RTCEngine) handleNegiationError(err error) { + logger.Errorw("negotiation error", err) + + if e.OnDisconnected != nil { + e.OnDisconnected() + } +} diff --git a/transport.go b/transport.go index 11d6470..15b1743 100644 --- a/transport.go +++ b/transport.go @@ -60,7 +60,8 @@ type PCTransport struct { onRemoteDescriptionSettled func() error onRTTUpdate func(rtt uint32) - OnOffer func(description webrtc.SessionDescription) + OnOffer func(description webrtc.SessionDescription) + onNegotiationError func(err error) } type PCTransportParams struct { @@ -70,6 +71,8 @@ type PCTransportParams struct { Pacer pacer.Factory OnRTTUpdate func(rtt uint32) IsSender bool + + OnNegotiationError func(err error) } func NewPCTransport(params PCTransportParams) (*PCTransport, error) { @@ -95,6 +98,7 @@ func NewPCTransport(params PCTransportParams) (*PCTransport, error) { t := &PCTransport{ debouncedNegotiate: debounce.New(negotiationFrequency), onRTTUpdate: params.OnRTTUpdate, + onNegotiationError: params.OnNegotiationError, } // nack interceptor @@ -371,6 +375,7 @@ func (t *PCTransport) createAndSendOffer(options *webrtc.OfferOptions) error { logger.Debugw("create offer", "offer", offer.SDP) if err != nil { logger.Errorw("could not negotiate", err) + t.onNegotiationError(err) return err } if err := t.pc.SetLocalDescription(offer); err != nil { From 0df19ada08c67b90d864cc6a147249e0cdb13bbd Mon Sep 17 00:00:00 2001 From: Hunter Dolan Date: Fri, 19 Apr 2024 16:59:49 -0600 Subject: [PATCH 2/6] update logging signature to be unique, switch package name --- LICENSE | 0 NOTICE | 0 README.md | 8 +++---- auth.go | 0 callback.go | 0 data.go | 0 egressclient.go | 0 engine.go | 13 +++++++++++ errors.go | 0 examples/filesaver/main.go | 4 ++-- go.mod | 17 +++++++------- go.sum | 31 ++++++++++++++----------- ingressclient.go | 0 integration_test.go | 2 +- localparticipant.go | 0 localtrack.go | 0 logger.go | 0 magefile.go | 0 participant.go | 0 pkg/interceptor/limitsizeinteceptor.go | 0 pkg/interceptor/nackgenerator.go | 0 pkg/interceptor/nackgenerator_test.go | 0 pkg/interceptor/pacerinteceptor.go | 0 pkg/interceptor/packetpool.go | 0 pkg/interceptor/rttinteceptor.go | 0 pkg/interceptor/utils_test.go | 0 pkg/jitter/buffer.go | 0 pkg/jitter/buffer_test.go | 0 pkg/jitter/options.go | 0 pkg/samplebuilder/NOTICE | 0 pkg/samplebuilder/samplebuilder.go | 0 pkg/samplebuilder/samplebuilder_test.go | 0 pkg/synchronizer/participant.go | 0 pkg/synchronizer/synchronizer.go | 0 pkg/synchronizer/synchronizer_test.go | 0 pkg/synchronizer/track.go | 0 publication.go | 0 readersampleprovider.go | 0 remoteparticipant.go | 0 renovate.json | 0 room.go | 0 roomclient.go | 0 sampleprovider.go | 0 signalclient.go | 0 signalclient_test.go | 0 sipclient.go | 0 track.go | 0 transport.go | 7 +++--- utils.go | 0 utils_test.go | 0 version.go | 0 51 files changed, 50 insertions(+), 32 deletions(-) mode change 100644 => 100755 LICENSE mode change 100644 => 100755 NOTICE mode change 100644 => 100755 README.md mode change 100644 => 100755 auth.go mode change 100644 => 100755 callback.go mode change 100644 => 100755 data.go mode change 100644 => 100755 egressclient.go mode change 100644 => 100755 engine.go mode change 100644 => 100755 errors.go mode change 100644 => 100755 examples/filesaver/main.go mode change 100644 => 100755 go.mod mode change 100644 => 100755 go.sum mode change 100644 => 100755 ingressclient.go mode change 100644 => 100755 integration_test.go mode change 100644 => 100755 localparticipant.go mode change 100644 => 100755 localtrack.go mode change 100644 => 100755 logger.go mode change 100644 => 100755 magefile.go mode change 100644 => 100755 participant.go mode change 100644 => 100755 pkg/interceptor/limitsizeinteceptor.go mode change 100644 => 100755 pkg/interceptor/nackgenerator.go mode change 100644 => 100755 pkg/interceptor/nackgenerator_test.go mode change 100644 => 100755 pkg/interceptor/pacerinteceptor.go mode change 100644 => 100755 pkg/interceptor/packetpool.go mode change 100644 => 100755 pkg/interceptor/rttinteceptor.go mode change 100644 => 100755 pkg/interceptor/utils_test.go mode change 100644 => 100755 pkg/jitter/buffer.go mode change 100644 => 100755 pkg/jitter/buffer_test.go mode change 100644 => 100755 pkg/jitter/options.go mode change 100644 => 100755 pkg/samplebuilder/NOTICE mode change 100644 => 100755 pkg/samplebuilder/samplebuilder.go mode change 100644 => 100755 pkg/samplebuilder/samplebuilder_test.go mode change 100644 => 100755 pkg/synchronizer/participant.go mode change 100644 => 100755 pkg/synchronizer/synchronizer.go mode change 100644 => 100755 pkg/synchronizer/synchronizer_test.go mode change 100644 => 100755 pkg/synchronizer/track.go mode change 100644 => 100755 publication.go mode change 100644 => 100755 readersampleprovider.go mode change 100644 => 100755 remoteparticipant.go mode change 100644 => 100755 renovate.json mode change 100644 => 100755 room.go mode change 100644 => 100755 roomclient.go mode change 100644 => 100755 sampleprovider.go mode change 100644 => 100755 signalclient.go mode change 100644 => 100755 signalclient_test.go mode change 100644 => 100755 sipclient.go mode change 100644 => 100755 track.go mode change 100644 => 100755 transport.go mode change 100644 => 100755 utils.go mode change 100644 => 100755 utils_test.go mode change 100644 => 100755 version.go diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/NOTICE b/NOTICE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index cf749ac..fdf80ee --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Version 2 of the SDK contains a small set of breaking changes. Read t ## Installation ```shell -go get github.com/livekit/server-sdk-go/v2 +go get github.com/tryiris-ai/livekit-server-sdk-go/v2 ``` Note: since v1.0 release, this package requires Go 1.18+ in order to build. @@ -32,7 +32,7 @@ Note: since v1.0 release, this package requires Go 1.18+ in order to build. import ( "time" - lksdk "github.com/livekit/server-sdk-go/v2" + lksdk "github.com/tryiris-ai/livekit-server-sdk-go/v2" "github.com/livekit/protocol/auth" ) @@ -56,7 +56,7 @@ RoomService gives you complete control over rooms and participants within them. ```go import ( - lksdk "github.com/livekit/server-sdk-go/v2" + lksdk "github.com/tryiris-ai/livekit-server-sdk-go/v2" livekit "github.com/livekit/protocol/livekit" ) @@ -110,7 +110,7 @@ The Real-time SDK gives you access programmatic access as a client enabling you ```go import ( - lksdk "github.com/livekit/server-sdk-go/v2" + lksdk "github.com/tryiris-ai/livekit-server-sdk-go/v2" ) func main() { diff --git a/auth.go b/auth.go old mode 100644 new mode 100755 diff --git a/callback.go b/callback.go old mode 100644 new mode 100755 diff --git a/data.go b/data.go old mode 100644 new mode 100755 diff --git a/egressclient.go b/egressclient.go old mode 100644 new mode 100755 diff --git a/engine.go b/engine.go old mode 100644 new mode 100755 index 31211cf..e71a013 --- a/engine.go +++ b/engine.go @@ -648,11 +648,24 @@ func (e *RTCEngine) handleLeave(leave *livekit.LeaveRequest) { } } } +<<<<<<< Updated upstream +======= +<<<<<<< Updated upstream +======= +>>>>>>> Stashed changes func (e *RTCEngine) handleNegiationError(err error) { logger.Errorw("negotiation error", err) if e.OnDisconnected != nil { +<<<<<<< Updated upstream e.OnDisconnected() } } +======= + logger.Infow("negotiation error, sending disconnected event") + e.OnDisconnected() + } +} +>>>>>>> Stashed changes +>>>>>>> Stashed changes diff --git a/errors.go b/errors.go old mode 100644 new mode 100755 diff --git a/examples/filesaver/main.go b/examples/filesaver/main.go old mode 100644 new mode 100755 index c9cc11a..f40e156 --- a/examples/filesaver/main.go +++ b/examples/filesaver/main.go @@ -31,8 +31,8 @@ import ( "github.com/pion/webrtc/v3/pkg/media/oggwriter" "github.com/livekit/protocol/logger" - lksdk "github.com/livekit/server-sdk-go/v2" - "github.com/livekit/server-sdk-go/v2/pkg/samplebuilder" + lksdk "github.com/tryiris-ai/livekit-server-sdk-go/v2" + "github.com/tryiris-ai/livekit-server-sdk-go/v2/pkg/samplebuilder" ) var ( diff --git a/go.mod b/go.mod old mode 100644 new mode 100755 index 6908cad..deb476d --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/livekit/server-sdk-go/v2 +module github.com/tryiris-ai/livekit-server-sdk-go/v2 go 1.21 @@ -8,19 +8,20 @@ require ( github.com/go-logr/stdr v1.2.2 github.com/gorilla/websocket v1.5.1 github.com/livekit/mediatransportutil v0.0.0-20240302142739-1c3dd691a1b8 - github.com/livekit/protocol v1.11.0 + github.com/livekit/protocol v1.12.0 + github.com/livekit/server-sdk-go/v2 v2.1.0 github.com/magefile/mage v1.15.0 github.com/pion/dtls/v2 v2.2.10 github.com/pion/interceptor v0.1.25 github.com/pion/rtcp v1.2.14 github.com/pion/rtp v1.8.3 - github.com/pion/sdp/v3 v3.0.6 - github.com/pion/webrtc/v3 v3.2.28 + github.com/pion/sdp/v3 v3.0.8 + github.com/pion/webrtc/v3 v3.2.29 github.com/stretchr/testify v1.9.0 github.com/twitchtv/twirp v8.1.3+incompatible go.uber.org/atomic v1.11.0 golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 - google.golang.org/protobuf v1.32.0 + google.golang.org/protobuf v1.33.0 ) require ( @@ -31,8 +32,9 @@ require ( github.com/eapache/channels v1.1.0 // indirect github.com/eapache/queue v1.1.0 // indirect github.com/frostbyte73/core v0.0.10 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/gammazero/deque v0.2.1 // indirect - github.com/go-jose/go-jose/v3 v3.0.2 // indirect + github.com/go-jose/go-jose/v3 v3.0.3 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/uuid v1.6.0 // indirect github.com/jxskiss/base62 v1.1.0 // indirect @@ -41,7 +43,6 @@ require ( github.com/lithammer/shortuuid/v4 v4.0.0 // indirect github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 // indirect github.com/livekit/psrpc v0.5.3-0.20240228172457-3724cb4adbc4 // indirect - github.com/mackerelio/go-osstat v0.2.4 // indirect github.com/nats-io/nats.go v1.31.0 // indirect github.com/nats-io/nkeys v0.4.6 // indirect github.com/nats-io/nuid v1.0.1 // indirect @@ -60,7 +61,7 @@ require ( github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/puzpuzpuz/xsync v1.5.2 // indirect + github.com/puzpuzpuz/xsync/v3 v3.1.0 // indirect github.com/redis/go-redis/v9 v9.5.1 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect go.uber.org/multierr v1.11.0 // indirect diff --git a/go.sum b/go.sum old mode 100644 new mode 100755 index 152e6a3..72d75f0 --- a/go.sum +++ b/go.sum @@ -21,10 +21,12 @@ github.com/frostbyte73/core v0.0.10 h1:D4DQXdPb8ICayz0n75rs4UYTXrUSdxzUfeleuNJOR github.com/frostbyte73/core v0.0.10/go.mod h1:XsOGqrqe/VEV7+8vJ+3a8qnCIXNbKsoEiu/czs7nrcU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gammazero/deque v0.2.1 h1:qSdsbG6pgp6nL7A0+K/B7s12mcCY/5l5SIUpMOl+dC0= github.com/gammazero/deque v0.2.1/go.mod h1:LFroj8x4cMYCukHJDbxFCkT+r9AndaJnFMuZDV34tuU= -github.com/go-jose/go-jose/v3 v3.0.2 h1:2Edjn8Nrb44UvTdp84KU0bBPs1cO7noRCybtS3eJEUQ= -github.com/go-jose/go-jose/v3 v3.0.2/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= +github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= +github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -75,12 +77,12 @@ github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1 h1:jm09419p0lqTkD github.com/livekit/mageutil v0.0.0-20230125210925-54e8a70427c1/go.mod h1:Rs3MhFwutWhGwmY1VQsygw28z5bWcnEYmS1OG9OxjOQ= github.com/livekit/mediatransportutil v0.0.0-20240302142739-1c3dd691a1b8 h1:xawydPEACNO5Ncs2LgioTjWghXQ0eUN1q1RnVUUyVnI= github.com/livekit/mediatransportutil v0.0.0-20240302142739-1c3dd691a1b8/go.mod h1:jwKUCmObuiEDH0iiuJHaGMXwRs3RjrB4G6qqgkr/5oE= -github.com/livekit/protocol v1.11.0 h1:3V1j0EGfh5T8A/rb/H7kB+ak9TINA8a/2jXpH+emLsg= -github.com/livekit/protocol v1.11.0/go.mod h1:XpJ2t2wFnnQghPpkxXAzMZhYMDnm8wWxdxYJK4fP9gM= +github.com/livekit/protocol v1.12.0 h1:B7qsqq5xf9MmyG9WEk9/gMsfMVXuyLNxX5cO6TQil6s= +github.com/livekit/protocol v1.12.0/go.mod h1:G7Pa985GhZv2MCC3UnUocBhZfi3DsWA6WmlSkkpQYTM= github.com/livekit/psrpc v0.5.3-0.20240228172457-3724cb4adbc4 h1:253WtQ2VGVHzIIzW9MUZj7vUDDILESU3zsEbiRdxYF0= github.com/livekit/psrpc v0.5.3-0.20240228172457-3724cb4adbc4/go.mod h1:CQUBSPfYYAaevg1TNCc6/aYsa8DJH4jSRFdCeSZk5u0= -github.com/mackerelio/go-osstat v0.2.4 h1:qxGbdPkFo65PXOb/F/nhDKpF2nGmGaCFDLXoZjJTtUs= -github.com/mackerelio/go-osstat v0.2.4/go.mod h1:Zy+qzGdZs3A9cuIqmgbJvwbmLQH9dJvtio5ZjJTbdlQ= +github.com/livekit/server-sdk-go/v2 v2.1.0 h1:2YIW6c1IhHTVCsBsTD6P3TLIP3l/3nK+iokopquP8eE= +github.com/livekit/server-sdk-go/v2 v2.1.0/go.mod h1:uOiQU0kIhiZM10y9RIuig2CwRA/g5fW5bzy+2WiIxP8= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/nats-io/nats.go v1.31.0 h1:/WFBHEc/dOKBF6qf1TZhrdEfTmOZ5JzdJ+Y3m6Y/p7E= @@ -123,8 +125,8 @@ github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= github.com/pion/sctp v1.8.12 h1:2VX50pedElH+is6FI+OKyRTeN5oy4mrk2HjnGa3UCmY= github.com/pion/sctp v1.8.12/go.mod h1:cMLT45jqw3+jiJCrtHVwfQLnfR0MGZ4rgOJwUOIqLkI= -github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw= -github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= +github.com/pion/sdp/v3 v3.0.8 h1:yd/wkrS0nzXEAb+uwv1TL3SG/gzsTiXHVOtXtD7EKl0= +github.com/pion/sdp/v3 v3.0.8/go.mod h1:B5xmvENq5IXJimIO4zfp6LAe1fD9N+kFv+V/1lOdz8M= github.com/pion/srtp/v2 v2.0.18 h1:vKpAXfawO9RtTRKZJbG4y0v1b11NZxQnxRl85kGuUlo= github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= @@ -140,8 +142,8 @@ github.com/pion/transport/v3 v3.0.1 h1:gDTlPJwROfSfz6QfSi0ZmeCSkFcnWWiiR9ES0ouAN github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/turn/v2 v2.1.3 h1:pYxTVWG2gpC97opdRc5IGsQ1lJ9O/IlNhkzj7MMrGAA= github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= -github.com/pion/webrtc/v3 v3.2.28 h1:ienStxZ6HcjtH2UlmnFpMM0loENiYjaX437uIUpQSKo= -github.com/pion/webrtc/v3 v3.2.28/go.mod h1:PNRCEuQlibrmuBhOTnol9j6KkIbUG11aHLEfNpUYey0= +github.com/pion/webrtc/v3 v3.2.29 h1:flXjxjlqpp3FjkpSSBKwv7UOfbUvan9+gFY6A5ZaAn4= +github.com/pion/webrtc/v3 v3.2.29/go.mod h1:M+5YSvBDPAkHHRwGXlplIFBQI5mXm6Y4byns1OpiX68= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -154,8 +156,8 @@ github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSz github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/puzpuzpuz/xsync v1.5.2 h1:yRAP4wqSOZG+/4pxJ08fPTwrfL0IzE/LKQ/cw509qGY= -github.com/puzpuzpuz/xsync v1.5.2/go.mod h1:K98BYhX3k1dQ2M63t1YNVDanbwUPmBCAhNmVrrxfiGg= +github.com/puzpuzpuz/xsync/v3 v3.1.0 h1:EewKT7/LNac5SLiEblJeUu8z5eERHrmRLnMQL2d7qX4= +github.com/puzpuzpuz/xsync/v3 v3.1.0/go.mod h1:VjzYrABPabuM4KyBh1Ftq6u8nhwY5tBPKP9jpmh0nnA= github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8= github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= @@ -164,6 +166,7 @@ github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -295,8 +298,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= -google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/ingressclient.go b/ingressclient.go old mode 100644 new mode 100755 diff --git a/integration_test.go b/integration_test.go old mode 100644 new mode 100755 index 01e256f..7173429 --- a/integration_test.go +++ b/integration_test.go @@ -32,7 +32,7 @@ import ( "github.com/livekit/protocol/livekit" - "github.com/livekit/server-sdk-go/v2/pkg/interceptor" + "github.com/tryiris-ai/livekit-server-sdk-go/v2/pkg/interceptor" ) // The integration test of the SDK. can't run this test standalone, should be run with `mage test` diff --git a/localparticipant.go b/localparticipant.go old mode 100644 new mode 100755 diff --git a/localtrack.go b/localtrack.go old mode 100644 new mode 100755 diff --git a/logger.go b/logger.go old mode 100644 new mode 100755 diff --git a/magefile.go b/magefile.go old mode 100644 new mode 100755 diff --git a/participant.go b/participant.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/limitsizeinteceptor.go b/pkg/interceptor/limitsizeinteceptor.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/nackgenerator.go b/pkg/interceptor/nackgenerator.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/nackgenerator_test.go b/pkg/interceptor/nackgenerator_test.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/pacerinteceptor.go b/pkg/interceptor/pacerinteceptor.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/packetpool.go b/pkg/interceptor/packetpool.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/rttinteceptor.go b/pkg/interceptor/rttinteceptor.go old mode 100644 new mode 100755 diff --git a/pkg/interceptor/utils_test.go b/pkg/interceptor/utils_test.go old mode 100644 new mode 100755 diff --git a/pkg/jitter/buffer.go b/pkg/jitter/buffer.go old mode 100644 new mode 100755 diff --git a/pkg/jitter/buffer_test.go b/pkg/jitter/buffer_test.go old mode 100644 new mode 100755 diff --git a/pkg/jitter/options.go b/pkg/jitter/options.go old mode 100644 new mode 100755 diff --git a/pkg/samplebuilder/NOTICE b/pkg/samplebuilder/NOTICE old mode 100644 new mode 100755 diff --git a/pkg/samplebuilder/samplebuilder.go b/pkg/samplebuilder/samplebuilder.go old mode 100644 new mode 100755 diff --git a/pkg/samplebuilder/samplebuilder_test.go b/pkg/samplebuilder/samplebuilder_test.go old mode 100644 new mode 100755 diff --git a/pkg/synchronizer/participant.go b/pkg/synchronizer/participant.go old mode 100644 new mode 100755 diff --git a/pkg/synchronizer/synchronizer.go b/pkg/synchronizer/synchronizer.go old mode 100644 new mode 100755 diff --git a/pkg/synchronizer/synchronizer_test.go b/pkg/synchronizer/synchronizer_test.go old mode 100644 new mode 100755 diff --git a/pkg/synchronizer/track.go b/pkg/synchronizer/track.go old mode 100644 new mode 100755 diff --git a/publication.go b/publication.go old mode 100644 new mode 100755 diff --git a/readersampleprovider.go b/readersampleprovider.go old mode 100644 new mode 100755 diff --git a/remoteparticipant.go b/remoteparticipant.go old mode 100644 new mode 100755 diff --git a/renovate.json b/renovate.json old mode 100644 new mode 100755 diff --git a/room.go b/room.go old mode 100644 new mode 100755 diff --git a/roomclient.go b/roomclient.go old mode 100644 new mode 100755 diff --git a/sampleprovider.go b/sampleprovider.go old mode 100644 new mode 100755 diff --git a/signalclient.go b/signalclient.go old mode 100644 new mode 100755 diff --git a/signalclient_test.go b/signalclient_test.go old mode 100644 new mode 100755 diff --git a/sipclient.go b/sipclient.go old mode 100644 new mode 100755 diff --git a/track.go b/track.go old mode 100644 new mode 100755 diff --git a/transport.go b/transport.go old mode 100644 new mode 100755 index 15b1743..2a646f5 --- a/transport.go +++ b/transport.go @@ -31,7 +31,7 @@ import ( lkinterceptor "github.com/livekit/mediatransportutil/pkg/interceptor" "github.com/livekit/mediatransportutil/pkg/pacer" lksdp "github.com/livekit/protocol/sdp" - sdkinterceptor "github.com/livekit/server-sdk-go/v2/pkg/interceptor" + sdkinterceptor "github.com/tryiris-ai/livekit-server-sdk-go/v2/pkg/interceptor" ) const ( @@ -374,12 +374,13 @@ func (t *PCTransport) createAndSendOffer(options *webrtc.OfferOptions) error { offer, err := t.pc.CreateOffer(options) logger.Debugw("create offer", "offer", offer.SDP) if err != nil { - logger.Errorw("could not negotiate", err) + logger.Errorw("could not negotiate, notifiying...", err) t.onNegotiationError(err) return err } if err := t.pc.SetLocalDescription(offer); err != nil { - logger.Errorw("could not set local description", err) + logger.Errorw("could not set local description, notifiying...", err) + t.onNegotiationError(err) return err } t.restartAfterGathering = false diff --git a/utils.go b/utils.go old mode 100644 new mode 100755 diff --git a/utils_test.go b/utils_test.go old mode 100644 new mode 100755 diff --git a/version.go b/version.go old mode 100644 new mode 100755 From 2e2523e7e1b4a20bcd419a72cda8c995da110d15 Mon Sep 17 00:00:00 2001 From: Hunter Dolan Date: Fri, 19 Apr 2024 17:07:21 -0600 Subject: [PATCH 3/6] fix merge conflict --- engine.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/engine.go b/engine.go index e71a013..aa7ec33 100755 --- a/engine.go +++ b/engine.go @@ -648,24 +648,12 @@ func (e *RTCEngine) handleLeave(leave *livekit.LeaveRequest) { } } } -<<<<<<< Updated upstream -======= -<<<<<<< Updated upstream -======= ->>>>>>> Stashed changes func (e *RTCEngine) handleNegiationError(err error) { logger.Errorw("negotiation error", err) if e.OnDisconnected != nil { -<<<<<<< Updated upstream - e.OnDisconnected() - } -} -======= logger.Infow("negotiation error, sending disconnected event") e.OnDisconnected() } } ->>>>>>> Stashed changes ->>>>>>> Stashed changes From e7d77756b15f5b09b1cd1899aa1f895561c7173c Mon Sep 17 00:00:00 2001 From: Hunter Dolan Date: Mon, 22 Apr 2024 17:16:06 -0600 Subject: [PATCH 4/6] update --- LICENSE | 0 NOTICE | 0 README.md | 0 auth.go | 0 bootstrap.sh | 0 callback.go | 0 data.go | 0 egressclient.go | 0 engine.go | 0 errors.go | 0 examples/filesaver/main.go | 0 go.mod | 0 go.sum | 0 ingressclient.go | 0 integration_test.go | 0 localparticipant.go | 0 localtrack.go | 0 logger.go | 0 magefile.go | 0 participant.go | 0 pkg/interceptor/limitsizeinteceptor.go | 0 pkg/interceptor/nackgenerator.go | 0 pkg/interceptor/nackgenerator_test.go | 0 pkg/interceptor/pacerinteceptor.go | 0 pkg/interceptor/packetpool.go | 0 pkg/interceptor/rttinteceptor.go | 0 pkg/interceptor/utils_test.go | 0 pkg/jitter/buffer.go | 0 pkg/jitter/buffer_test.go | 0 pkg/jitter/options.go | 0 pkg/samplebuilder/NOTICE | 0 pkg/samplebuilder/samplebuilder.go | 0 pkg/samplebuilder/samplebuilder_test.go | 0 pkg/synchronizer/participant.go | 0 pkg/synchronizer/synchronizer.go | 0 pkg/synchronizer/synchronizer_test.go | 0 pkg/synchronizer/track.go | 0 publication.go | 0 readersampleprovider.go | 0 remoteparticipant.go | 0 renovate.json | 0 room.go | 0 roomclient.go | 0 sampleprovider.go | 0 signalclient.go | 0 signalclient_test.go | 0 sipclient.go | 0 track.go | 0 transport.go | 3 ++- utils.go | 0 utils_test.go | 0 version.go | 0 52 files changed, 2 insertions(+), 1 deletion(-) mode change 100755 => 100644 LICENSE mode change 100755 => 100644 NOTICE mode change 100755 => 100644 README.md mode change 100755 => 100644 auth.go mode change 100755 => 100644 bootstrap.sh mode change 100755 => 100644 callback.go mode change 100755 => 100644 data.go mode change 100755 => 100644 egressclient.go mode change 100755 => 100644 engine.go mode change 100755 => 100644 errors.go mode change 100755 => 100644 examples/filesaver/main.go mode change 100755 => 100644 go.mod mode change 100755 => 100644 go.sum mode change 100755 => 100644 ingressclient.go mode change 100755 => 100644 integration_test.go mode change 100755 => 100644 localparticipant.go mode change 100755 => 100644 localtrack.go mode change 100755 => 100644 logger.go mode change 100755 => 100644 magefile.go mode change 100755 => 100644 participant.go mode change 100755 => 100644 pkg/interceptor/limitsizeinteceptor.go mode change 100755 => 100644 pkg/interceptor/nackgenerator.go mode change 100755 => 100644 pkg/interceptor/nackgenerator_test.go mode change 100755 => 100644 pkg/interceptor/pacerinteceptor.go mode change 100755 => 100644 pkg/interceptor/packetpool.go mode change 100755 => 100644 pkg/interceptor/rttinteceptor.go mode change 100755 => 100644 pkg/interceptor/utils_test.go mode change 100755 => 100644 pkg/jitter/buffer.go mode change 100755 => 100644 pkg/jitter/buffer_test.go mode change 100755 => 100644 pkg/jitter/options.go mode change 100755 => 100644 pkg/samplebuilder/NOTICE mode change 100755 => 100644 pkg/samplebuilder/samplebuilder.go mode change 100755 => 100644 pkg/samplebuilder/samplebuilder_test.go mode change 100755 => 100644 pkg/synchronizer/participant.go mode change 100755 => 100644 pkg/synchronizer/synchronizer.go mode change 100755 => 100644 pkg/synchronizer/synchronizer_test.go mode change 100755 => 100644 pkg/synchronizer/track.go mode change 100755 => 100644 publication.go mode change 100755 => 100644 readersampleprovider.go mode change 100755 => 100644 remoteparticipant.go mode change 100755 => 100644 renovate.json mode change 100755 => 100644 room.go mode change 100755 => 100644 roomclient.go mode change 100755 => 100644 sampleprovider.go mode change 100755 => 100644 signalclient.go mode change 100755 => 100644 signalclient_test.go mode change 100755 => 100644 sipclient.go mode change 100755 => 100644 track.go mode change 100755 => 100644 transport.go mode change 100755 => 100644 utils.go mode change 100755 => 100644 utils_test.go mode change 100755 => 100644 version.go diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/NOTICE b/NOTICE old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/auth.go b/auth.go old mode 100755 new mode 100644 diff --git a/bootstrap.sh b/bootstrap.sh old mode 100755 new mode 100644 diff --git a/callback.go b/callback.go old mode 100755 new mode 100644 diff --git a/data.go b/data.go old mode 100755 new mode 100644 diff --git a/egressclient.go b/egressclient.go old mode 100755 new mode 100644 diff --git a/engine.go b/engine.go old mode 100755 new mode 100644 diff --git a/errors.go b/errors.go old mode 100755 new mode 100644 diff --git a/examples/filesaver/main.go b/examples/filesaver/main.go old mode 100755 new mode 100644 diff --git a/go.mod b/go.mod old mode 100755 new mode 100644 diff --git a/go.sum b/go.sum old mode 100755 new mode 100644 diff --git a/ingressclient.go b/ingressclient.go old mode 100755 new mode 100644 diff --git a/integration_test.go b/integration_test.go old mode 100755 new mode 100644 diff --git a/localparticipant.go b/localparticipant.go old mode 100755 new mode 100644 diff --git a/localtrack.go b/localtrack.go old mode 100755 new mode 100644 diff --git a/logger.go b/logger.go old mode 100755 new mode 100644 diff --git a/magefile.go b/magefile.go old mode 100755 new mode 100644 diff --git a/participant.go b/participant.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/limitsizeinteceptor.go b/pkg/interceptor/limitsizeinteceptor.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/nackgenerator.go b/pkg/interceptor/nackgenerator.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/nackgenerator_test.go b/pkg/interceptor/nackgenerator_test.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/pacerinteceptor.go b/pkg/interceptor/pacerinteceptor.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/packetpool.go b/pkg/interceptor/packetpool.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/rttinteceptor.go b/pkg/interceptor/rttinteceptor.go old mode 100755 new mode 100644 diff --git a/pkg/interceptor/utils_test.go b/pkg/interceptor/utils_test.go old mode 100755 new mode 100644 diff --git a/pkg/jitter/buffer.go b/pkg/jitter/buffer.go old mode 100755 new mode 100644 diff --git a/pkg/jitter/buffer_test.go b/pkg/jitter/buffer_test.go old mode 100755 new mode 100644 diff --git a/pkg/jitter/options.go b/pkg/jitter/options.go old mode 100755 new mode 100644 diff --git a/pkg/samplebuilder/NOTICE b/pkg/samplebuilder/NOTICE old mode 100755 new mode 100644 diff --git a/pkg/samplebuilder/samplebuilder.go b/pkg/samplebuilder/samplebuilder.go old mode 100755 new mode 100644 diff --git a/pkg/samplebuilder/samplebuilder_test.go b/pkg/samplebuilder/samplebuilder_test.go old mode 100755 new mode 100644 diff --git a/pkg/synchronizer/participant.go b/pkg/synchronizer/participant.go old mode 100755 new mode 100644 diff --git a/pkg/synchronizer/synchronizer.go b/pkg/synchronizer/synchronizer.go old mode 100755 new mode 100644 diff --git a/pkg/synchronizer/synchronizer_test.go b/pkg/synchronizer/synchronizer_test.go old mode 100755 new mode 100644 diff --git a/pkg/synchronizer/track.go b/pkg/synchronizer/track.go old mode 100755 new mode 100644 diff --git a/publication.go b/publication.go old mode 100755 new mode 100644 diff --git a/readersampleprovider.go b/readersampleprovider.go old mode 100755 new mode 100644 diff --git a/remoteparticipant.go b/remoteparticipant.go old mode 100755 new mode 100644 diff --git a/renovate.json b/renovate.json old mode 100755 new mode 100644 diff --git a/room.go b/room.go old mode 100755 new mode 100644 diff --git a/roomclient.go b/roomclient.go old mode 100755 new mode 100644 diff --git a/sampleprovider.go b/sampleprovider.go old mode 100755 new mode 100644 diff --git a/signalclient.go b/signalclient.go old mode 100755 new mode 100644 diff --git a/signalclient_test.go b/signalclient_test.go old mode 100755 new mode 100644 diff --git a/sipclient.go b/sipclient.go old mode 100755 new mode 100644 diff --git a/track.go b/track.go old mode 100755 new mode 100644 diff --git a/transport.go b/transport.go old mode 100755 new mode 100644 index 2a646f5..62abd93 --- a/transport.go +++ b/transport.go @@ -151,7 +151,8 @@ func NewPCTransport(params PCTransportParams) (*PCTransport, error) { i.Add(lkinterceptor.NewRTTFromXRFactory(onXRRtt)) se := webrtc.SettingEngine{} - se.SetSRTPProtectionProfiles(dtls.SRTP_AEAD_AES_128_GCM, dtls.SRTP_AES128_CM_HMAC_SHA1_80) + fmt.Println("Setting protection profiles", dtls.SRTP_AES128_CM_HMAC_SHA1_80) + se.SetSRTPProtectionProfiles(dtls.SRTP_AES128_CM_HMAC_SHA1_80) se.SetDTLSRetransmissionInterval(dtlsRetransmissionInterval) se.SetICETimeouts(iceDisconnectedTimeout, iceFailedTimeout, iceKeepaliveInterval) diff --git a/utils.go b/utils.go old mode 100755 new mode 100644 diff --git a/utils_test.go b/utils_test.go old mode 100755 new mode 100644 diff --git a/version.go b/version.go old mode 100755 new mode 100644 From ed34f13daf31bff26a986161588de32bc7227b82 Mon Sep 17 00:00:00 2001 From: Hunter Dolan Date: Wed, 24 Apr 2024 00:42:57 -0600 Subject: [PATCH 5/6] v2.1.1 --- .DS_Store | Bin 0 -> 16388 bytes README.md | 11 +++- callback.go | 13 ++++ engine.go | 69 +++++++++++--------- examples/filesender/main.go | 97 +++++++++++++++++++++++++++ go.mod | 28 ++++---- go.sum | 126 +++++++++--------------------------- integration_test.go | 8 +-- localparticipant.go | 35 +++++----- localtrack.go | 30 ++++++++- magefile.go | 4 +- pkg/jitter/buffer.go | 5 +- room.go | 81 +++++++++++++++++++++-- transport.go | 123 ++++++++++++++++++++++------------- version.go | 2 +- 15 files changed, 412 insertions(+), 220 deletions(-) create mode 100644 .DS_Store create mode 100644 examples/filesender/main.go diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..976d8fac3e9ebbb37e7ee787b3fb45e828b2e7a6 GIT binary patch literal 16388 zcmeI3+iu%N5Qc|2_)yz*iUi1Apcjap+~rbD>;eVS6lmJsHjbspN@Pip~FIcW0LTe=cWtmP-*yUf%Sci@Xq#JvNmO4n^+li*%6B4#-H8mg|;F zcgacEeqy_ay~sfN@RnL!g*G%}o6A#b9HKj7|Cw4pAs6I^D`?Kl&U%zQP3srA&;1@z(&yR}?DWq1T;n5l z6B$Q|>T5FvMQv&sXc@S*3~1j?+FR-CLr%MI8E6@}^$e(g=&-5mrg9mixej(ZeAIFs zLR#XOIKc8csqCh58KjwFW2VSpnxr8{63of(s5-Kn%4LwjT#{feNqXfZjZhN1I(8jX zm!unHyKfn28OSs6n5^nZ=}j8{RcKMiF45M+BDk32#yko~pD9UM3y3c*I@MTnL5vx1 z)T~dq9Fa3op#>{H5Mf^s$4_kzXlgZnCT8zhq#iRn^^iGBHMC*t7`BGAm@%An7722B`xRLam_Hm9TWQ8BlwZSXm3wQb<<(D<7+rfpT>aehj5;A4;WGUIK# zWWF%wc2k7I@#o5{9R%EC+QSqtKa2dmIZU5p5gzBERL9!E4K?VOih1PiAdkcG?=iE! zh7sIHD|yZEpw)<+iwZ4R`OdyA=ogD2@5VUl7Ey-9nJ6rWgEqAcv<%!f2A%+Tm+_GH z6jxFEy*vu{c$pFqAM(XnBi#iaKa7i}V4urXlwXFc@i+^mnBn7q@vugqBY25_Y+R1U zxhT=FccBLZx{e{{=wO%mmUR@4JW~SVV`dx%!~?pDW8RoJaWg7sWP>IQ?c1EpfU)72 zqnO)8F%oB@pfp84vw1unAIFY9k7N~nrWEu$wx;NW8O@3GBJCZr7##6h{tDJPqk-$l zu{wqBpIO?^0uzqiTtXW=d6DH@PQV(wK!p$ccMA`!Wy?e)-=A=(u|4`6x^V+xh2q&y@?(3H&fk`nFuE_lF=G6YziEC!YTOxX)LD$gnJFj* z{Ud8n8f$CB(Y!I_Hu#*W+BWGoO#L@%{cotXI3Ew~HSfSU>4mQUKQI6P&y?C-%RtLO zGZ{$koxMGK3AS`?eGa9rwePUKW7DL1%OL+T;lP&SBiDWw=Ddrl+AM?Qi1f{W0Qm2J slWy6IuXxxkEup2LUyO82U5v#0o`O=)*Y4{g 0 { fmt.Println("set node ip", addresses[0]) parameters = append(parameters, `--node-ip`, addresses[0]) diff --git a/pkg/jitter/buffer.go b/pkg/jitter/buffer.go index 299eb86..930f5e1 100644 --- a/pkg/jitter/buffer.go +++ b/pkg/jitter/buffer.go @@ -403,10 +403,13 @@ func (b *Buffer) drop() { for b.head != nil && !b.head.start && before32(b.head.packet.Timestamp-b.maxSampleSize, b.minTS) { dropped = true b.packetsDropped++ + b.prevSN = b.head.packet.SequenceNumber - 1 b.dropHead() } - b.prevSN = b.head.packet.SequenceNumber - 1 + if b.head != nil { + b.prevSN = b.head.packet.SequenceNumber - 1 + } } for c := b.head; c != nil; { diff --git a/room.go b/room.go index 84f302b..206fb23 100644 --- a/room.go +++ b/room.go @@ -20,6 +20,8 @@ import ( "strings" "sync" + "github.com/pion/dtls/v2" + "github.com/pion/interceptor" "github.com/pion/rtcp" "github.com/pion/webrtc/v3" "golang.org/x/exp/maps" @@ -81,6 +83,12 @@ type connectParams struct { RetransmitBufferSize uint16 Pacer pacer.Factory + + Interceptors []interceptor.Factory + + ICETransportPolicy webrtc.ICETransportPolicy + + SRTPProtectionProfiles []dtls.SRTPProtectionProfile } type ConnectOption func(*connectParams) @@ -105,6 +113,24 @@ func WithPacer(pacer pacer.Factory) ConnectOption { } } +func WithInterceptors(interceptors []interceptor.Factory) ConnectOption { + return func(p *connectParams) { + p.Interceptors = interceptors + } +} + +func WithICETransportPolicy(iceTransportPolicy webrtc.ICETransportPolicy) ConnectOption { + return func(p *connectParams) { + p.ICETransportPolicy = iceTransportPolicy + } +} + +func WithSRTPProtectionProfiles(profiles []dtls.SRTPProtectionProfile) ConnectOption { + return func(p *connectParams) { + p.SRTPProtectionProfiles = profiles + } +} + type PLIWriter func(webrtc.SSRC) type Room struct { @@ -117,6 +143,7 @@ type Room struct { remoteParticipants map[livekit.ParticipantIdentity]*RemoteParticipant sidToIdentity map[livekit.ParticipantID]livekit.ParticipantIdentity + sidDefers map[livekit.ParticipantID][]func(p *RemoteParticipant) metadata string activeSpeakers []Participant serverInfo *livekit.ServerInfo @@ -131,6 +158,7 @@ func NewRoom(callback *RoomCallback) *Room { engine: engine, remoteParticipants: make(map[livekit.ParticipantIdentity]*RemoteParticipant), sidToIdentity: make(map[livekit.ParticipantID]livekit.ParticipantIdentity), + sidDefers: make(map[livekit.ParticipantID][]func(*RemoteParticipant)), callback: NewRoomCallback(), sidReady: make(chan struct{}), } @@ -251,6 +279,32 @@ func (r *Room) Disconnect() { r.cleanup() } +func (r *Room) deferParticipantUpdate(sid livekit.ParticipantID, fnc func(p *RemoteParticipant)) { + r.lock.Lock() + defer r.lock.Unlock() + r.sidDefers[sid] = append(r.sidDefers[sid], fnc) +} + +func (r *Room) runParticipantDefers(sid livekit.ParticipantID, p *RemoteParticipant) { + r.lock.RLock() + has := len(r.sidDefers[sid]) != 0 + r.lock.RUnlock() + if !has { + return + } + r.lock.Lock() + fncs := r.sidDefers[sid] + delete(r.sidDefers, sid) + r.lock.Unlock() + if len(fncs) == 0 { + return + } + logger.Infow("running deferred updates for participant", "participantID", sid, "updates", len(fncs)) + for _, fnc := range fncs { + fnc(p) + } +} + func (r *Room) GetParticipantByIdentity(identity string) *RemoteParticipant { r.lock.RLock() defer r.lock.RUnlock() @@ -299,13 +353,14 @@ func (r *Room) ServerInfo() *livekit.ServerInfo { func (r *Room) addRemoteParticipant(pi *livekit.ParticipantInfo, updateExisting bool) *RemoteParticipant { r.lock.Lock() + defer r.lock.Unlock() rp, ok := r.remoteParticipants[livekit.ParticipantIdentity(pi.Identity)] if ok { if updateExisting { rp.updateInfo(pi) r.sidToIdentity[livekit.ParticipantID(pi.Sid)] = livekit.ParticipantIdentity(pi.Identity) } - r.lock.Unlock() + return rp } @@ -319,8 +374,6 @@ func (r *Room) addRemoteParticipant(pi *livekit.ParticipantInfo, updateExisting }) r.remoteParticipants[livekit.ParticipantIdentity(pi.Identity)] = rp r.sidToIdentity[livekit.ParticipantID(pi.Sid)] = livekit.ParticipantIdentity(pi.Identity) - r.lock.Unlock() - return rp } @@ -333,17 +386,22 @@ func (r *Room) handleMediaTrack(track *webrtc.TrackRemote, receiver *webrtc.RTPR // backwards compatibility trackID = streamID } + update := func(p *RemoteParticipant) { + p.addSubscribedMediaTrack(track, trackID, receiver) + } rp := r.GetParticipantBySID(participantID) if rp == nil { - logger.Errorw("could not find participant", nil, "participantID", participantID) + logger.Infow("could not find participant, deferring track update", "participantID", participantID) + r.deferParticipantUpdate(livekit.ParticipantID(participantID), update) return } - rp.addSubscribedMediaTrack(track, trackID, receiver) + update(rp) } -func (r *Room) handleDisconnect() { +func (r *Room) handleDisconnect(reason DisconnectionReason) { r.callback.OnDisconnected() + r.callback.OnDisconnectedWithReason(reason) r.cleanup() } @@ -420,7 +478,17 @@ func (r *Room) handleParticipantUpdate(participants []*livekit.ParticipantInfo) rp = r.addRemoteParticipant(pi, true) go r.callback.OnParticipantConnected(rp) } else { + oldSid := livekit.ParticipantID(rp.SID()) rp.updateInfo(pi) + newSid := livekit.ParticipantID(rp.SID()) + if oldSid != newSid { + logger.Infow("participant sid update", "sid-old", oldSid, "sid-new", newSid, "identity", rp.Identity()) + r.lock.Lock() + delete(r.sidToIdentity, oldSid) + r.sidToIdentity[newSid] = livekit.ParticipantIdentity(rp.Identity()) + r.lock.Unlock() + r.runParticipantDefers(newSid, rp) + } } } } @@ -429,6 +497,7 @@ func (r *Room) handleParticipantDisconnect(p *RemoteParticipant) { r.lock.Lock() delete(r.remoteParticipants, livekit.ParticipantIdentity(p.Identity())) delete(r.sidToIdentity, livekit.ParticipantID(p.SID())) + delete(r.sidDefers, livekit.ParticipantID(p.SID())) r.lock.Unlock() p.unpublishAllTracks() diff --git a/transport.go b/transport.go index 62abd93..0bbc2a1 100644 --- a/transport.go +++ b/transport.go @@ -25,6 +25,7 @@ import ( "github.com/pion/dtls/v2" "github.com/pion/interceptor" "github.com/pion/interceptor/pkg/nack" + "github.com/pion/interceptor/pkg/twcc" "github.com/pion/sdp/v3" "github.com/pion/webrtc/v3" @@ -58,10 +59,10 @@ type PCTransport struct { rttFromXR atomic.Bool onRemoteDescriptionSettled func() error + onNegotiationError func(err error) onRTTUpdate func(rtt uint32) - OnOffer func(description webrtc.SessionDescription) - onNegotiationError func(err error) + OnOffer func(description webrtc.SessionDescription) } type PCTransportParams struct { @@ -69,10 +70,65 @@ type PCTransportParams struct { RetransmitBufferSize uint16 Pacer pacer.Factory + Interceptors []interceptor.Factory + OnNegotiationError func(err error) OnRTTUpdate func(rtt uint32) IsSender bool - OnNegotiationError func(err error) + SRTPProtectionProfiles []dtls.SRTPProtectionProfile +} + +func (t *PCTransport) registerDefaultInterceptors(params PCTransportParams, i *interceptor.Registry) error { + if params.Pacer != nil { + i.Add(sdkinterceptor.NewPacerInterceptorFactory(params.Pacer)) + } + + // nack interceptor + generator := &sdkinterceptor.NackGeneratorInterceptorFactory{} + var generatorOption []nack.ResponderOption + if params.RetransmitBufferSize > 0 { + generatorOption = append(generatorOption, nack.ResponderSize(params.RetransmitBufferSize)) + } + t.nackGenerator = generator + + responder, err := nack.NewResponderInterceptor(generatorOption...) + if err != nil { + return err + } + i.Add(generator) + i.Add(responder) + + // rtcp report interceptor + if err := webrtc.ConfigureRTCPReports(i); err != nil { + return err + } + + // twcc interceptor + twccGenerator, err := twcc.NewSenderInterceptor() + if err != nil { + return err + } + i.Add(twccGenerator) + + i.Add(sdkinterceptor.NewLimitSizeInterceptorFactory()) + + if params.OnRTTUpdate != nil { + i.Add(sdkinterceptor.NewRTTInterceptorFactory(t.handleRTTUpdate)) + } + + var onXRRtt func(rtt uint32) + if params.IsSender { + // publisher only responds to XR request for sfu to measure RTT + onXRRtt = func(rtt uint32) {} + } else { + onXRRtt = func(rtt uint32) { + t.rttFromXR.Store(true) + t.setRTT(rtt) + } + } + i.Add(lkinterceptor.NewRTTFromXRFactory(onXRRtt)) + + return nil } func NewPCTransport(params PCTransportParams) (*PCTransport, error) { @@ -97,62 +153,42 @@ func NewPCTransport(params PCTransportParams) (*PCTransport, error) { t := &PCTransport{ debouncedNegotiate: debounce.New(negotiationFrequency), - onRTTUpdate: params.OnRTTUpdate, onNegotiationError: params.OnNegotiationError, + onRTTUpdate: params.OnRTTUpdate, } - // nack interceptor - generator := &sdkinterceptor.NackGeneratorInterceptorFactory{} - var generatorOption []nack.ResponderOption - if params.RetransmitBufferSize > 0 { - generatorOption = append(generatorOption, nack.ResponderSize(params.RetransmitBufferSize)) - } - responder, err := nack.NewResponderInterceptor(generatorOption...) - if err != nil { - return nil, err + if params.Interceptors != nil { + for _, c := range params.Interceptors { + i.Add(c) + } + } else { + err := t.registerDefaultInterceptors(params, i) + if err != nil { + return nil, err + } } m.RegisterFeedback(webrtc.RTCPFeedback{Type: "nack"}, webrtc.RTPCodecTypeVideo) m.RegisterFeedback(webrtc.RTCPFeedback{Type: "nack", Parameter: "pli"}, webrtc.RTPCodecTypeVideo) - if params.Pacer != nil { - i.Add(sdkinterceptor.NewPacerInterceptorFactory(params.Pacer)) - } - - i.Add(responder) - i.Add(generator) - - // rtcp report interceptor - if err := webrtc.ConfigureRTCPReports(i); err != nil { + m.RegisterFeedback(webrtc.RTCPFeedback{Type: webrtc.TypeRTCPFBTransportCC}, webrtc.RTPCodecTypeVideo) + if err := m.RegisterHeaderExtension(webrtc.RTPHeaderExtensionCapability{URI: sdp.TransportCCURI}, webrtc.RTPCodecTypeVideo); err != nil { return nil, err } - // twcc interceptor - if err := webrtc.ConfigureTWCCSender(m, i); err != nil { + m.RegisterFeedback(webrtc.RTCPFeedback{Type: webrtc.TypeRTCPFBTransportCC}, webrtc.RTPCodecTypeAudio) + if err := m.RegisterHeaderExtension(webrtc.RTPHeaderExtensionCapability{URI: sdp.TransportCCURI}, webrtc.RTPCodecTypeAudio); err != nil { return nil, err } - i.Add(sdkinterceptor.NewLimitSizeInterceptorFactory()) - - if params.OnRTTUpdate != nil { - i.Add(sdkinterceptor.NewRTTInterceptorFactory(t.handleRTTUpdate)) - } + se := webrtc.SettingEngine{} - var onXRRtt func(rtt uint32) - if params.IsSender { - // publisher only responds to XR request for sfu to measure RTT - onXRRtt = func(rtt uint32) {} + if len(params.SRTPProtectionProfiles) == 0 { + se.SetSRTPProtectionProfiles(dtls.SRTP_AEAD_AES_128_GCM, dtls.SRTP_AES128_CM_HMAC_SHA1_80) } else { - onXRRtt = func(rtt uint32) { - t.rttFromXR.Store(true) - t.setRTT(rtt) - } + se.SetSRTPProtectionProfiles(params.SRTPProtectionProfiles...) } - i.Add(lkinterceptor.NewRTTFromXRFactory(onXRRtt)) - se := webrtc.SettingEngine{} - fmt.Println("Setting protection profiles", dtls.SRTP_AES128_CM_HMAC_SHA1_80) - se.SetSRTPProtectionProfiles(dtls.SRTP_AES128_CM_HMAC_SHA1_80) se.SetDTLSRetransmissionInterval(dtlsRetransmissionInterval) se.SetICETimeouts(iceDisconnectedTimeout, iceFailedTimeout, iceKeepaliveInterval) @@ -163,7 +199,6 @@ func NewPCTransport(params PCTransportParams) (*PCTransport, error) { } t.pc = pc - t.nackGenerator = generator pc.OnICEGatheringStateChange(t.onICEGatheringStateChange) @@ -375,12 +410,12 @@ func (t *PCTransport) createAndSendOffer(options *webrtc.OfferOptions) error { offer, err := t.pc.CreateOffer(options) logger.Debugw("create offer", "offer", offer.SDP) if err != nil { - logger.Errorw("could not negotiate, notifiying...", err) + logger.Errorw("could not negotiate", err) t.onNegotiationError(err) return err } if err := t.pc.SetLocalDescription(offer); err != nil { - logger.Errorw("could not set local description, notifiying...", err) + logger.Errorw("could not set local description", err) t.onNegotiationError(err) return err } diff --git a/version.go b/version.go index 57b8444..652bfc1 100644 --- a/version.go +++ b/version.go @@ -14,4 +14,4 @@ package lksdk -const Version = "2.0.6" +const Version = "2.1.1" From 3266e64f172166cbd436826ee05c5fe7a69040a8 Mon Sep 17 00:00:00 2001 From: geenkel Date: Thu, 18 Jul 2024 08:55:35 -0600 Subject: [PATCH 6/6] AV1 Support --- localtrack.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/localtrack.go b/localtrack.go index b94844e..3631151 100644 --- a/localtrack.go +++ b/localtrack.go @@ -622,6 +622,8 @@ func payloaderForCodec(codec webrtc.RTPCodecCapability) (rtp.Payloader, error) { }, nil case strings.ToLower(webrtc.MimeTypeVP9): return &codecs.VP9Payloader{}, nil + case strings.ToLower(webrtc.MimeTypeAV1): + return &codecs.AV1Payloader{}, nil case strings.ToLower(webrtc.MimeTypeG722): return &codecs.G722Payloader{}, nil case strings.ToLower(webrtc.MimeTypePCMU), strings.ToLower(webrtc.MimeTypePCMA):