Files
livekit/pkg/rtc/subscribedtrack.go
T
David Zhao 38c81e5645 Support for video dimensions in publications (#36)
* send back video dimensions

* Store video dimensions in MediaTrack and forward in TrackInfo

* use committed protocol
2021-06-18 21:05:56 -07:00

68 lines
1.4 KiB
Go

package rtc
import (
"github.com/pion/ion-sfu/pkg/sfu"
"github.com/pion/webrtc/v3"
livekit "github.com/livekit/livekit-server/proto"
"github.com/livekit/protocol/utils"
)
type SubscribedTrack struct {
dt *sfu.DownTrack
subMuted utils.AtomicFlag
pubMuted utils.AtomicFlag
}
func NewSubscribedTrack(dt *sfu.DownTrack) *SubscribedTrack {
return &SubscribedTrack{
dt: dt,
}
}
func (t *SubscribedTrack) ID() string {
return t.dt.ID()
}
func (t *SubscribedTrack) DownTrack() *sfu.DownTrack {
return t.dt
}
// has subscriber indicated it wants to mute this track
func (t *SubscribedTrack) IsMuted() bool {
return t.subMuted.Get()
}
// set subscriber mute preference
func (t *SubscribedTrack) SetMuted(muted bool) {
t.subMuted.TrySet(muted)
t.updateDownTrackMute()
}
func (t *SubscribedTrack) SetPublisherMuted(muted bool) {
t.pubMuted.TrySet(muted)
t.updateDownTrackMute()
}
func (t *SubscribedTrack) SetVideoQuality(quality livekit.VideoQuality) {
if t.dt.Kind() == webrtc.RTPCodecTypeVideo {
t.dt.SwitchSpatialLayer(spatialLayerForQuality(quality), true)
}
}
func (t *SubscribedTrack) updateDownTrackMute() {
muted := t.subMuted.Get() || t.pubMuted.Get()
t.dt.Mute(muted)
}
func spatialLayerForQuality(quality livekit.VideoQuality) int64 {
switch quality {
case livekit.VideoQuality_LOW:
return 0
case livekit.VideoQuality_MEDIUM:
return 1
default:
return 2
}
}