mirror of
https://github.com/Monibuca/engine.git
synced 2025-10-05 08:36:56 +08:00
增加Stream NeverTimeout属性,用于纯数据轨道的流保持不关闭
消除一处魔法数字 将TCP监听增加TLS支持
This commit is contained in:
41
stream.go
41
stream.go
@@ -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)
|
||||
|
Reference in New Issue
Block a user