]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Fix flv格式保存遇卡顿有概率不能恢复 #77
authorqydysky <qydysky@foxmail.com>
Sun, 16 Jul 2023 19:33:06 +0000 (03:33 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 16 Jul 2023 19:33:06 +0000 (03:33 +0800)
Reply/stream.go
go.mod
go.sum

index 1797d25197db534093d9c97fd3f5914012ae0f46..cb06944c67d2f3cdf42650932219c3bff8c54fa0 100644 (file)
@@ -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 f361f308f908a546ffdde36e1c61593eb7dde8c7..fcd6598d7c8ce62f222e5dcb97b34b522c1c2bbf 100644 (file)
--- 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 7bad2f4e089a35ae8dcb902d14d415a11f1aa60e..d1646290366461167f2f9418acfb2a843eeb2877 100644 (file)
--- 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=