From 2d76c672e3559cdfe7ca8a29646f2bad02a85e4c Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Tue, 19 Oct 2021 23:46:04 +0530 Subject: [PATCH] Use `abs-send-time` RTP header extension for video downstream (#149) - Update ion-sfu to v1.20.14 - Enable `abs-send-time` for video tracks Reference: ion-sfu PR - https://github.com/livekit/ion-sfu/pull/12 Testing: -------- - Look at SDP offer in subscriber PC and ensure that abs-send-time is negotiated. - Ensure that downstream packets have `abs-send-time` extension for video packets. TODO: ----- - Not yet setting this for audio tracks. Eventually we want to move to TWCC. This is just a step along the way. --- go.mod | 2 +- go.sum | 4 ++-- pkg/rtc/mediaengine.go | 9 +++++++++ pkg/rtc/mediatrack.go | 3 +++ pkg/service/wire_gen.go | 3 ++- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index f2f94fdbe..e6bb716c8 100644 --- a/go.mod +++ b/go.mod @@ -47,4 +47,4 @@ require ( gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b ) -replace github.com/pion/ion-sfu => github.com/livekit/ion-sfu v1.20.13 +replace github.com/pion/ion-sfu => github.com/livekit/ion-sfu v1.20.14 diff --git a/go.sum b/go.sum index a1dfa238b..ae3ef77e7 100644 --- a/go.sum +++ b/go.sum @@ -244,8 +244,8 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lithammer/shortuuid/v3 v3.0.6 h1:pr15YQyvhiSX/qPxncFtqk+v4xLEpOZObbsY/mKrcvA= github.com/lithammer/shortuuid/v3 v3.0.6/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= -github.com/livekit/ion-sfu v1.20.13 h1:I83jimStLFziKc18h/URypCmp849cFyHXwOSgzkhfhU= -github.com/livekit/ion-sfu v1.20.13/go.mod h1:Nmf1dro+y5vr0laNSJSrYDMDYrjERcEWVbWyenEWZ0A= +github.com/livekit/ion-sfu v1.20.14 h1:/eCaRUIa8KxyaTdjOQFJJJGDrjIVClL14BkYO2NqVSw= +github.com/livekit/ion-sfu v1.20.14/go.mod h1:Nmf1dro+y5vr0laNSJSrYDMDYrjERcEWVbWyenEWZ0A= github.com/livekit/protocol v0.9.9 h1:PP+86MnRBwlu40lTiGNkZu2CrHiW7P12VOi2nIOoU98= github.com/livekit/protocol v0.9.9/go.mod h1:MEKn847Iu/2U8ClZyUmEm2oHn8k9fnSHy81Wv8kkSDo= github.com/lucsky/cuid v1.0.2 h1:z4XlExeoderxoPj2/dxKOyPxe9RCOu7yNq9/XWxIUMQ= diff --git a/pkg/rtc/mediaengine.go b/pkg/rtc/mediaengine.go index dd639bb90..fe3ed80bb 100644 --- a/pkg/rtc/mediaengine.go +++ b/pkg/rtc/mediaengine.go @@ -87,6 +87,15 @@ func createPubMediaEngine(codecs []*livekit.Codec) (*webrtc.MediaEngine, error) func createSubMediaEngine() (*webrtc.MediaEngine, error) { me := &webrtc.MediaEngine{} + + for _, extension := range []string{ + sdp.ABSSendTimeURI, + } { + if err := me.RegisterHeaderExtension(webrtc.RTPHeaderExtensionCapability{URI: extension}, webrtc.RTPCodecTypeVideo); err != nil { + return nil, err + } + } + return me, nil } diff --git a/pkg/rtc/mediatrack.go b/pkg/rtc/mediatrack.go index cc35bc7bd..b16961cc1 100644 --- a/pkg/rtc/mediatrack.go +++ b/pkg/rtc/mediatrack.go @@ -205,6 +205,9 @@ func (t *MediaTrack) AddSubscriber(sub types.Participant) error { } } + sendParameters := sender.GetParameters() + downTrack.SetRTPHeaderExtensions(sendParameters.HeaderExtensions) + downTrack.SetTransceiver(transceiver) // when outtrack is bound, start loop to send reports downTrack.OnBind(func() { diff --git a/pkg/service/wire_gen.go b/pkg/service/wire_gen.go index f7d3557a8..48a1b1cd4 100644 --- a/pkg/service/wire_gen.go +++ b/pkg/service/wire_gen.go @@ -1,7 +1,8 @@ // Code generated by Wire. DO NOT EDIT. //go:generate go run github.com/google/wire/cmd/wire -//+build !wireinject +//go:build !wireinject +// +build !wireinject package service