mirror of
https://github.com/pion/webrtc.git
synced 2025-10-06 15:46:54 +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()
|
r.mu.RLock()
|
||||||
defer r.mu.RUnlock()
|
defer r.mu.RUnlock()
|
||||||
|
|
||||||
for i := range r.tracks {
|
if err := r.tracks[0].rtcpReadStream.SetReadDeadline(t); err != nil {
|
||||||
if err := r.tracks[i].rtcpReadStream.SetReadDeadline(t); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return nil
|
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.
|
// 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
|
// 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()
|
r.mu.RLock()
|
||||||
defer r.mu.RUnlock()
|
defer r.mu.RUnlock()
|
||||||
|
|
||||||
for i := range r.tracks {
|
if t := r.streamsForTrack(reader); t != nil {
|
||||||
if err := r.tracks[i].rtpReadStream.SetReadDeadline(t); err != nil {
|
return t.rtpReadStream.SetReadDeadline(deadline)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
return fmt.Errorf("%w: %d", errRTPReceiverWithSSRCTrackStreamNotFound, reader.SSRC())
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
@@ -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.
|
// 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 {
|
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