| 166 | } |
| 167 | |
| 168 | func (s *Subscriber) AddTrack(t Track) bool { |
| 169 | switch v := t.(type) { |
| 170 | case *track.Video: |
| 171 | if !s.Config.SubVideo { |
| 172 | return false |
| 173 | } |
| 174 | var startTs time.Duration |
| 175 | if s.VideoReader != nil { |
| 176 | startTs = time.Duration(s.VideoReader.AbsTime) * time.Millisecond |
| 177 | s.VideoReader.StopRead() |
| 178 | } |
| 179 | s.VideoReader = s.CreateTrackReader(&v.Media) |
| 180 | s.VideoReader.StartTs = startTs |
| 181 | s.Video = v |
| 182 | case *track.Audio: |
| 183 | if !s.Config.SubAudio { |
| 184 | return false |
| 185 | } |
| 186 | var startTs time.Duration |
| 187 | if s.AudioReader != nil { |
| 188 | startTs = time.Duration(s.AudioReader.AbsTime) * time.Millisecond |
| 189 | s.AudioReader.StopRead() |
| 190 | } |
| 191 | s.AudioReader = s.CreateTrackReader(&v.Media) |
| 192 | s.AudioReader.StartTs = startTs |
| 193 | s.Audio = v |
| 194 | default: |
| 195 | return false |
| 196 | } |
| 197 | s.Info("track+1", zap.String("name", t.GetName())) |
| 198 | return true |
| 199 | } |
| 200 | |
| 201 | func (s *Subscriber) IsPlaying() bool { |
| 202 | return s.TrackPlayer.Context != nil && s.TrackPlayer.Err() == nil |