diff --git a/mediastream.go b/mediastream.go index 2494fe6..d852090 100644 --- a/mediastream.go +++ b/mediastream.go @@ -33,7 +33,7 @@ func NewMediaStream(trackers ...Tracker) (MediaStream, error) { m := mediaStream{trackers: make(map[string]Tracker)} for _, tracker := range trackers { - id := tracker.Track().ID() + id := tracker.LocalTrack().ID() if _, ok := m.trackers[id]; !ok { m.trackers[id] = tracker } @@ -62,7 +62,7 @@ func (m *mediaStream) queryTracks(t webrtc.RTPCodecType) []Tracker { result := make([]Tracker, 0) for _, tracker := range m.trackers { - if tracker.Track().Kind() == t || t == rtpCodecTypeDefault { + if tracker.LocalTrack().Kind() == t || t == rtpCodecTypeDefault { result = append(result, tracker) } } @@ -74,7 +74,7 @@ func (m *mediaStream) AddTrack(t Tracker) { m.l.Lock() defer m.l.Unlock() - id := t.Track().ID() + id := t.LocalTrack().ID() if _, ok := m.trackers[id]; ok { return } @@ -86,5 +86,5 @@ func (m *mediaStream) RemoveTrack(t Tracker) { m.l.Lock() defer m.l.Unlock() - delete(m.trackers, t.Track().ID()) + delete(m.trackers, t.LocalTrack().ID()) } diff --git a/track.go b/track.go index 21eee41..6fb49aa 100644 --- a/track.go +++ b/track.go @@ -17,6 +17,7 @@ import ( // Reference: https://w3c.github.io/mediacapture-main/#mediastreamtrack type Tracker interface { Track() *webrtc.Track + LocalTrack() LocalTrack Stop() OnEnded(func(error)) } @@ -24,6 +25,8 @@ type Tracker interface { type LocalTrack interface { WriteSample(s media.Sample) error Codec() *webrtc.RTPCodec + ID() string + Kind() webrtc.RTPCodecType } type track struct { @@ -77,6 +80,10 @@ func (t *track) Track() *webrtc.Track { return t.t.(*webrtc.Track) } +func (t *track) LocalTrack() LocalTrack { + return t.t +} + type videoTrack struct { *track d driver.Driver