From f8afe9d9becdd4ceb9c1b9673091c4a41be472cb Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 17 Jul 2023 03:33:06 +0800 Subject: [PATCH] =?utf8?q?Fix=20flv=E6=A0=BC=E5=BC=8F=E4=BF=9D=E5=AD=98?= =?utf8?q?=E9=81=87=E5=8D=A1=E9=A1=BF=E6=9C=89=E6=A6=82=E7=8E=87=E4=B8=8D?= =?utf8?q?=E8=83=BD=E6=81=A2=E5=A4=8D=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/stream.go | 18 +++++++++++------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Reply/stream.go b/Reply/stream.go index 1797d25..cb06944 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -685,7 +685,7 @@ func (t *M4SStream) saveStreamFlv() (e error) { select { //停止录制 case <-tsc: - r.Cancel() + cancel() //当前连接终止 case <-cancelC.Done(): } @@ -706,19 +706,20 @@ func (t *M4SStream) saveStreamFlv() (e error) { for { select { case <-cancelC.Done(): + rc.CloseWithError(context.Canceled) return case curT := <-timer.C: if curT.Unix()-leastReadUnix.Load() > readTO { t.log.L(`W: `, fmt.Sprintf("%vs未接收到有效数据", readTO)) // 5s未接收到任何数据 - r.Cancel() + cancel() return } if v, ok := c.C.K_v.LoadV(`直播流清晰度`).(float64); ok { if t.config.want_qn != int(v) { t.log.L(`I: `, "直播流清晰度改变:", t.common.Qn[t.config.want_qn], "=>", t.common.Qn[int(v)]) t.config.want_qn = int(v) - r.Cancel() + cancel() return } } @@ -735,13 +736,12 @@ func (t *M4SStream) saveStreamFlv() (e error) { buf = make([]byte, 1<<16) frameCount = 0 ) - defer ticker.Stop() - defer t.Stream_msg.PushLock_tag(`close`, nil) + for { n, e := rc.Read(buf) _ = buff.Append(buf[:n]) if e != nil { - r.Cancel() + cancel() break } @@ -779,7 +779,7 @@ func (t *M4SStream) saveStreamFlv() (e error) { if keyframe.Size() != 0 { if len(t.first_buf) == 0 { t.log.L(`W: `, `flv未接收到起始段`) - r.Cancel() + cancel() break } t.bootBufPush(keyframe.GetPureBuf()) @@ -799,11 +799,15 @@ func (t *M4SStream) saveStreamFlv() (e error) { buf = nil buff.Reset() + + ticker.Stop() + t.Stream_msg.PushLock_tag(`close`, nil) }() t.log.L(`I: `, `flv下载开始`) _ = r.Reqf(reqf.Rval{ + Ctx: cancelC, Url: surl.String(), SaveToPipeWriter: rw, NoResponse: true, diff --git a/go.mod b/go.mod index f361f30..fcd6598 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.20 require ( github.com/gotk3/gotk3 v0.6.2 github.com/mdp/qrterminal/v3 v3.1.1 - github.com/qydysky/part v0.28.1-0.20230627085103-b1631761d65e + github.com/qydysky/part v0.28.1-0.20230716191926-eec76611f9da github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 golang.org/x/text v0.11.0 diff --git a/go.sum b/go.sum index 7bad2f4..d164629 100644 --- a/go.sum +++ b/go.sum @@ -30,8 +30,8 @@ github.com/mdp/qrterminal/v3 v3.1.1/go.mod h1:5lJlXe7Jdr8wlPDdcsJttv1/knsRgzXASy github.com/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo= github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/qydysky/part v0.28.1-0.20230627085103-b1631761d65e h1:hadrhlWMlfPOD/QN8sA6iUUk/e36MKkO1g5e37+CdBY= -github.com/qydysky/part v0.28.1-0.20230627085103-b1631761d65e/go.mod h1:CdkAHZ+OxieG1sI4M6UowP9j0QQDnhtDtN4tWsylCPU= +github.com/qydysky/part v0.28.1-0.20230716191926-eec76611f9da h1:37ymW4OXo7uFZ4GZPDHcY741bBAxgLQBFTQvZbAMySA= +github.com/qydysky/part v0.28.1-0.20230716191926-eec76611f9da/go.mod h1:CdkAHZ+OxieG1sI4M6UowP9j0QQDnhtDtN4tWsylCPU= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= -- 2.39.2