增加Stream NeverTimeout属性,用于纯数据轨道的流保持不关闭

消除一处魔法数字
将TCP监听增加TLS支持
This commit is contained in:
langhuihui
2023-06-04 11:02:45 +08:00
parent fc7ac81c4e
commit f4fb7881f7
14 changed files with 210 additions and 42 deletions

View File

@@ -124,6 +124,7 @@ type StreamTimeoutConfig struct {
PublishTimeout time.Duration //发布者无数据后超时
DelayCloseTimeout time.Duration //无订阅者后超时,必须先有一次订阅才会激活
IdleTimeout time.Duration //无订阅者后超时,不需要订阅即可激活
NeverTimeout bool // 永不超时
}
type Tracks struct {
sync.Map
@@ -418,26 +419,28 @@ func (s *Stream) run() {
s.onSuberClose(sub)
}
}
hasTrackTimeout := false
trackCount := 0
s.Tracks.Range(func(name string, t Track) {
trackCount++
if _, ok := t.(track.Custom); ok {
return
}
// track 超过一定时间没有更新数据了
if lastWriteTime := t.LastWriteTime(); !lastWriteTime.IsZero() && time.Since(lastWriteTime) > s.PublishTimeout {
s.Warn("track timeout", zap.String("name", name), zap.Time("last writetime", lastWriteTime), zap.Duration("timeout", s.PublishTimeout))
hasTrackTimeout = true
}
})
if trackCount == 0 || hasTrackTimeout || (s.Publisher != nil && s.Publisher.IsClosed()) {
s.action(ACTION_PUBLISHLOST)
} else {
s.timeout.Reset(time.Second * 5)
//订阅者等待音视频轨道超时了,放弃等待,订阅成功
s.Subscribers.AbortWait()
if !s.NeverTimeout {
hasTrackTimeout := false
trackCount := 0
s.Tracks.Range(func(name string, t Track) {
trackCount++
if _, ok := t.(track.Custom); ok {
return
}
// track 超过一定时间没有更新数据了
if lastWriteTime := t.LastWriteTime(); !lastWriteTime.IsZero() && time.Since(lastWriteTime) > s.PublishTimeout {
s.Warn("track timeout", zap.String("name", name), zap.Time("last writetime", lastWriteTime), zap.Duration("timeout", s.PublishTimeout))
hasTrackTimeout = true
}
})
if trackCount == 0 || hasTrackTimeout || (s.Publisher != nil && s.Publisher.IsClosed()) {
s.action(ACTION_PUBLISHLOST)
continue
}
}
s.timeout.Reset(time.Second * 5)
//订阅者等待音视频轨道超时了,放弃等待,订阅成功
s.Subscribers.AbortWait()
} else {
s.Debug("timeout", timeOutInfo)
s.action(ACTION_TIMEOUT)