diff --git a/config/types.go b/config/types.go index c2ad7b9..b463781 100755 --- a/config/types.go +++ b/config/types.go @@ -40,10 +40,9 @@ type Publish struct { BufferTime time.Duration // 缓冲长度(单位:秒),0代表取最近关键帧 SpeedLimit time.Duration `default:"500ms"` //速度限制最大等待时间 Key string // 发布鉴权key - SecretArgName string `default:"secret"` // 发布鉴权参数名 - ExpireArgName string `default:"expire"` // 发布鉴权失效时间参数名 - RingSize int `default:"256"` // 初始缓冲区大小 - RingSizeMax int `default:"1024"` // 最大缓冲区大小 + SecretArgName string `default:"secret"` // 发布鉴权参数名 + ExpireArgName string `default:"expire"` // 发布鉴权失效时间参数名 + RingSize string `default:"256-1024"` // 初始缓冲区大小 } func (c Publish) GetPublishConfig() Publish { diff --git a/stream.go b/stream.go index 12e985d..b28599b 100644 --- a/stream.go +++ b/stream.go @@ -327,16 +327,13 @@ func (r *Stream) action(action StreamAction) (ok bool) { case STATE_CLOSED: Streams.Delete(r.Path) r.timeout.Stop() - r.Subscribers.Dispose() - for !r.actionChan.Close() { - // 等待channel发送完毕,伪自旋锁 - time.Sleep(time.Millisecond * 100) - } stateEvent = SEclose{event} r.Subscribers.Broadcast(stateEvent) r.Tracks.Range(func(_ string, t Track) { t.Dispose() }) + r.Subscribers.Dispose() + r.actionChan.Close() } EventBus <- stateEvent if r.Publisher != nil { @@ -475,6 +472,11 @@ func (s *Stream) run() { case action, ok := <-s.actionChan.C: if !ok { return + } else if s.State == STATE_CLOSED { + if s.actionChan.Close() { //再次尝试关闭 + return + } + continue } timeStart = time.Now() switch v := action.(type) { diff --git a/track/base.go b/track/base.go index 4c252b6..793c34b 100644 --- a/track/base.go +++ b/track/base.go @@ -153,7 +153,7 @@ func (av *Media) SetStuff(stuff ...any) { case IStream: pubConf := v.GetPublisherConfig() av.Base.SetStuff(v) - av.Init(pubConf.RingSize, NewAVFrame) + av.Init(256, NewAVFrame) av.SSRC = uint32(uintptr(unsafe.Pointer(av))) av.等待上限 = pubConf.SpeedLimit case uint32: diff --git a/track/reader-av.go b/track/reader-av.go index 3873ac2..8e4e2e1 100644 --- a/track/reader-av.go +++ b/track/reader-av.go @@ -20,7 +20,7 @@ const ( SUBMODE_BUFFER ) -var ErrDiscard = errors.New("dsicard") +var ErrDiscard = errors.New("discard") type AVRingReader struct { RingReader[any, *common.AVFrame]