From 9426be9497014768d5df7363cdd608e5356f6b10 Mon Sep 17 00:00:00 2001 From: dexter <178529795@qq.com> Date: Mon, 13 Dec 2021 12:10:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86closeDelay=E8=B5=8B=E5=80=BC=E6=94=BE?= =?UTF-8?q?=E5=85=A5Publish=E5=87=BD=E6=95=B0=E4=B8=BB=E4=BD=93=E4=B8=AD?= =?UTF-8?q?=E9=98=B2=E6=AD=A2=E8=AE=BF=E9=97=AE=E6=97=B6=E4=B8=BAnil?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- stream.go | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/stream.go b/stream.go index e20732d..112416d 100644 --- a/stream.go +++ b/stream.go @@ -100,7 +100,7 @@ type Stream struct { VideoTracks Tracks AudioTracks Tracks DataTracks Tracks - AutoCloseAfter *int //当无人订阅时延迟N秒后自动停止发布 + AutoCloseAfter *int //当无人订阅时延迟N秒后自动停止发布 Transcoding map[string]string //转码配置,key:目标编码,value:发布者提供的编码 subscribeMutex sync.Mutex OnClose func() `json:"-"` @@ -142,6 +142,12 @@ func (r *Stream) Publish() bool { if r.AutoCloseAfter == nil { r.AutoCloseAfter = &config.AutoCloseAfter } + var closeChann <-chan time.Time + if *r.AutoCloseAfter > 0 { + r.closeDelay = time.NewTimer(time.Duration(*r.AutoCloseAfter) * time.Second) + r.closeDelay.Stop() + closeChann = r.closeDelay.C + } r.Context, r.cancel = context.WithCancel(Ctx) r.VideoTracks.Init(r) r.AudioTracks.Init(r) @@ -149,21 +155,17 @@ func (r *Stream) Publish() bool { r.StartTime = time.Now() Streams.m[r.StreamPath] = r utils.Print(Green("Stream publish:"), BrightCyan(r.StreamPath)) + go r.waitClose(closeChann) //触发钩子 TriggerHook(HOOK_PUBLISH, r) - go r.waitClose() return true } // 等待流关闭 -func (r *Stream) waitClose() { +func (r *Stream) waitClose(closeChann <-chan time.Time) { r.timeout = time.NewTimer(config.PublishTimeout) defer r.timeout.Stop() - var closeChann <-chan time.Time - if *r.AutoCloseAfter > 0 { - r.closeDelay = time.NewTimer(time.Duration(*r.AutoCloseAfter) * time.Second) - r.closeDelay.Stop() - closeChann = r.closeDelay.C + if r.closeDelay != nil { defer r.closeDelay.Stop() } select {