mirror of
https://github.com/pion/webrtc.git
synced 2025-09-27 03:25:58 +08:00
Refine SetReadDeadline behavior
- Refine RTPReceiver.SetReadDeadline behavior Instead of iterating over r.tracks, just calling r.tracks[0] directly. This behavior follows RTPReceiver.Read. - Add RTPReceiver.SetReadDeadlineSimulcast Its fingerprint follows RTPReceiver.ReadSimulcast. - Refine RTPReceiver.setRTPReadDeadline It will only timeout the RTP stream for the track makes the call.
This commit is contained in:

committed by
mission.liao

parent
398c363baf
commit
1dedfd8c28
@@ -329,24 +329,33 @@ func (r *RTPReceiver) SetReadDeadline(t time.Time) error {
|
||||
r.mu.RLock()
|
||||
defer r.mu.RUnlock()
|
||||
|
||||
for i := range r.tracks {
|
||||
if err := r.tracks[i].rtcpReadStream.SetReadDeadline(t); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := r.tracks[0].rtcpReadStream.SetReadDeadline(t); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetReadDeadlineSimulcast sets the max amount of time the RTCP stream for a given rid will block before returning. 0 is forever.
|
||||
func (r *RTPReceiver) SetReadDeadlineSimulcast(deadline time.Time, rid string) error {
|
||||
r.mu.RLock()
|
||||
defer r.mu.RUnlock()
|
||||
|
||||
for _, t := range r.tracks {
|
||||
if t.track != nil && t.track.rid == rid {
|
||||
return t.rtcpReadStream.SetReadDeadline(deadline)
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("%w: %s", errRTPReceiverForRIDTrackStreamNotFound, rid)
|
||||
}
|
||||
|
||||
// setRTPReadDeadline sets the max amount of time the RTP stream will block before returning. 0 is forever.
|
||||
// This should be fired by calling SetReadDeadline on the TrackRemote
|
||||
func (r *RTPReceiver) setRTPReadDeadline(t time.Time) error {
|
||||
func (r *RTPReceiver) setRTPReadDeadline(deadline time.Time, reader *TrackRemote) error {
|
||||
r.mu.RLock()
|
||||
defer r.mu.RUnlock()
|
||||
|
||||
for i := range r.tracks {
|
||||
if err := r.tracks[i].rtpReadStream.SetReadDeadline(t); err != nil {
|
||||
return err
|
||||
}
|
||||
if t := r.streamsForTrack(reader); t != nil {
|
||||
return t.rtpReadStream.SetReadDeadline(deadline)
|
||||
}
|
||||
return nil
|
||||
return fmt.Errorf("%w: %d", errRTPReceiverWithSSRCTrackStreamNotFound, reader.SSRC())
|
||||
}
|
||||
|
@@ -179,5 +179,5 @@ func (t *TrackRemote) peek(b []byte) (n int, a interceptor.Attributes, err error
|
||||
|
||||
// SetReadDeadline sets the max amount of time the RTP stream will block before returning. 0 is forever.
|
||||
func (t *TrackRemote) SetReadDeadline(deadline time.Time) error {
|
||||
return t.receiver.setRTPReadDeadline(deadline)
|
||||
return t.receiver.setRTPReadDeadline(deadline, t)
|
||||
}
|
||||
|
Reference in New Issue
Block a user