From 650bdc5a233a347a89a254dbc3b38eb60a2e1257 Mon Sep 17 00:00:00 2001 From: qydysky Date: Thu, 3 Aug 2023 22:53:14 +0800 Subject: [PATCH] =?utf8?q?Improve=20=E9=87=8D=E8=AF=95=E4=B8=8D=E5=BD=B1?= =?utf8?q?=E5=93=8D=E7=9B=B4=E6=92=AD=E5=9B=9E=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/stream.go | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/Reply/stream.go b/Reply/stream.go index e3e2d84..200be3e 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -790,7 +790,7 @@ func (t *M4SStream) saveStreamFlv() (e error) { t.first_buf = make([]byte, len(front_buf)) copy(t.first_buf, front_buf) // fmt.Println("write front_buf") - t.Stream_msg.PushLock_tag(`data`, t.first_buf) + // t.Stream_msg.PushLock_tag(`data`, t.first_buf) t.msg.Push_tag(`load`, t) } if keyframe.Size() != 0 { @@ -1401,10 +1401,31 @@ func (t *M4SStream) PusherToHttp(w http.ResponseWriter, r *http.Request, startFu } //写入头 - if _, err := w.Write(t.getFirstBuf()); err != nil { - return err - } else if flushSupport { - flusher.Flush() + { + retry := 5 + for retry > 0 { + select { + case <-r.Context().Done(): + break + default: + } + + if len(t.getFirstBuf()) != 0 { + if _, err := w.Write(t.getFirstBuf()); err != nil { + return err + } else if flushSupport { + flusher.Flush() + } + break + } + + time.Sleep(time.Second) + retry -= 1 + } + if retry < 0 { + w.WriteHeader(http.StatusNotFound) + return errors.New("no stream") + } } //写入快速启动缓冲 -- 2.39.2