]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 避免潜在数据错误
authorqydysky <qydysky@foxmail.com>
Sat, 16 Mar 2024 12:02:21 +0000 (20:02 +0800)
committerqydysky <qydysky@foxmail.com>
Sat, 16 Mar 2024 12:02:21 +0000 (20:02 +0800)
Reply/fmp4Decode.go
Reply/stream.go
go.mod
go.sum

index c66cc748ab710c7477c40c74cdc65a8fb7b14d87..cbc599975ba0ff6e02c3f645be759062555a42f4 100644 (file)
@@ -273,7 +273,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                //deal frame
                                if keyframeMoof {
                                        if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
-                                               _ = keyframe.Append(t.buf.GetPureBuf())
+                                               _ = t.buf.AppendTo(keyframe)
                                                cu = m[0].i
                                                t.buf.Reset()
                                        }
@@ -365,7 +365,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                //deal frame
                                if keyframeMoof {
                                        if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
-                                               _ = keyframe.Append(t.buf.GetPureBuf())
+                                               _ = t.buf.AppendTo(keyframe)
                                                cu = m[0].i
                                                t.buf.Reset()
                                        }
index dc284d1556a2b83dbcb51b7d84f57ea0a687e2b5..55251859bc7b7001e9a1894c2df9a2ab396fa3ae 100644 (file)
@@ -740,7 +740,9 @@ func (t *M4SStream) saveStreamFlv() (e error) {
 
                                        if !buff.IsEmpty() {
                                                keyframe.Reset()
-                                               front_buf, last_available_offset, e := Search_stream_tag(buff.GetPureBuf(), keyframe)
+                                               buf, unlock := buff.GetPureBufRLock()
+                                               front_buf, last_available_offset, e := Search_stream_tag(buf, keyframe)
+                                               unlock()
                                                if e != nil {
                                                        if strings.Contains(e.Error(), `no found available tag`) {
                                                                continue
@@ -766,7 +768,9 @@ func (t *M4SStream) saveStreamFlv() (e error) {
                                                                pctx.PutVal(cancelC, &errCtx, errors.New(`flv未接收到起始段`))
                                                                break
                                                        }
-                                                       t.bootBufPush(keyframe.GetPureBuf())
+                                                       buf, unlock := keyframe.GetPureBufRLock()
+                                                       t.bootBufPush(buf)
+                                                       unlock()
                                                        keyframe.Reset()
                                                        _ = t.bootBufRead(func(data []byte) error {
                                                                t.Stream_msg.PushLock_tag(`data`, data)
@@ -959,18 +963,23 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                        // no, _ := download_seq[k].getNo()
                        // fmt.Println("download_seq ", no, download_seq[k].status, download_seq[k].data.Size(), len(t.first_buf))
                        if download_seq[k].isInit() {
-                               if front_buf, e := fmp4Decoder.Init_fmp4(download_seq[k].data.GetPureBuf()); e != nil {
-                                       t.log.L(`E: `, e, `重试!`)
-                                       download_seq[k].status = 3
-                                       break
-                               } else {
-                                       for _, trak := range fmp4Decoder.traks {
-                                               // fmt.Println(`T: `, "找到trak:", string(trak.handlerType), trak.trackID, trak.timescale)
-                                               t.log.L(`T: `, "找到trak:", string(trak.handlerType), trak.trackID, trak.timescale)
+                               {
+                                       buf, unlock := download_seq[k].data.GetPureBufRLock()
+                                       front_buf, e := fmp4Decoder.Init_fmp4(buf)
+                                       unlock()
+                                       if e != nil {
+                                               t.log.L(`E: `, e, `重试!`)
+                                               download_seq[k].status = 3
+                                               break
+                                       } else {
+                                               for _, trak := range fmp4Decoder.traks {
+                                                       // fmt.Println(`T: `, "找到trak:", string(trak.handlerType), trak.trackID, trak.timescale)
+                                                       t.log.L(`T: `, "找到trak:", string(trak.handlerType), trak.trackID, trak.timescale)
+                                               }
+                                               t.first_buf = make([]byte, len(front_buf))
+                                               copy(t.first_buf, front_buf)
+                                               t.msg.Push_tag(`load`, t)
                                        }
-                                       t.first_buf = make([]byte, len(front_buf))
-                                       copy(t.first_buf, front_buf)
-                                       t.msg.Push_tag(`load`, t)
                                }
                                t.putM4s(download_seq[k])
                                download_seq = append(download_seq[:k], download_seq[k+1:]...)
@@ -983,11 +992,15 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                                continue
                        }
 
-                       _ = buf.Append(download_seq[k].data.GetPureBuf())
+                       _ = download_seq[k].data.AppendTo(buf)
                        t.putM4s(download_seq[k])
                        download_seq = append(download_seq[:k], download_seq[k+1:]...)
                        k -= 1
-                       last_available_offset, err := fmp4Decoder.Search_stream_fmp4(buf.GetPureBuf(), keyframe)
+
+                       buff, unlock := buf.GetPureBufRLock()
+                       last_available_offset, err := fmp4Decoder.Search_stream_fmp4(buff, keyframe)
+                       unlock()
+
                        if err != nil {
                                if !errors.Is(err, io.EOF) {
                                        t.log.L(`E: `, err)
@@ -1007,7 +1020,9 @@ func (t *M4SStream) saveStreamM4s() (e error) {
 
                        // 传递关键帧
                        if !keyframe.IsEmpty() {
-                               t.bootBufPush(keyframe.GetPureBuf())
+                               buf, unlock := keyframe.GetPureBufRLock()
+                               t.bootBufPush(buf)
+                               unlock()
                                keyframe.Reset()
                                _ = t.bootBufRead(func(data []byte) error {
                                        t.Stream_msg.PushLock_tag(`data`, data)
diff --git a/go.mod b/go.mod
index ee4138ef12aa1b9c2b8bf4d61fce00170df1ef5b..7c26ff855e73024cdb91f0f02d94384279843e4c 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.22
 require (
        github.com/gotk3/gotk3 v0.6.3
        github.com/mdp/qrterminal/v3 v3.2.0
-       github.com/qydysky/part v0.28.20240310094912
+       github.com/qydysky/part v0.28.20240316105420
        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.14.0
@@ -24,7 +24,7 @@ require (
        github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
        golang.org/x/term v0.18.0 // indirect
        modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b // indirect
-       modernc.org/libc v1.43.1 // indirect
+       modernc.org/libc v1.45.0 // indirect
        modernc.org/mathutil v1.6.0 // indirect
        modernc.org/memory v1.7.2 // indirect
        modernc.org/strutil v1.2.0 // indirect
@@ -51,7 +51,7 @@ require (
        golang.org/x/sys v0.18.0 // indirect
        golang.org/x/tools v0.19.0 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
-       modernc.org/sqlite v1.29.3
+       modernc.org/sqlite v1.29.5
        rsc.io/qr v0.2.0 // indirect
 )
 
diff --git a/go.sum b/go.sum
index e1b5aa6eb95056e46bb4711ed4c81d630319ef1d..b7eca6ac66da3fe11d52fdcfc87674d7ff04a1f8 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -37,8 +37,8 @@ github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdh
 github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/qydysky/part v0.28.20240310094912 h1:n4pKPS3q6NmVkI76n447a/UM3XWXRAaLpZDzOgAo798=
-github.com/qydysky/part v0.28.20240310094912/go.mod h1:8Y4MrasGC0BLEM71QY/MuP2jl+v5b0Y+rqox3qJu97c=
+github.com/qydysky/part v0.28.20240316105420 h1:KUqY3aYyW1qbuOcU4Jn76JlLDF4RGkuzKatCaPG/jQo=
+github.com/qydysky/part v0.28.20240316105420/go.mod h1:XytV5dI1Y7+qvjhsa2TMvi55RBZQQf0LCDYQ1kUCYqM=
 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=
@@ -47,8 +47,8 @@ github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1
 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
 github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0=
 github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs=
 github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4=
@@ -81,16 +81,16 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 modernc.org/cc/v4 v4.19.3 h1:vE9kmJqUcyvNOf8F2Hn8od14SOMq34BiqcZ2tMzLk5c=
 modernc.org/cc/v4 v4.19.3/go.mod h1:HM7VJTZbUCR3rV8EYBi9wxnJ0ZBRiGE5OeGXNA0IsLQ=
-modernc.org/ccgo/v4 v4.9.9 h1:HGZLD/Ws06nfcbjAKpnR5On3KQRSKUrD+oiHgEvRANI=
-modernc.org/ccgo/v4 v4.9.9/go.mod h1:LokeoHUZBUwISlbOW5u0+FXg73J8+akj348VfX5q/Ns=
+modernc.org/ccgo/v4 v4.11.0 h1:2uc2kRvZLC/oHylsrirRW6f1I4wljQST2BBbm+aKiXM=
+modernc.org/ccgo/v4 v4.11.0/go.mod h1:GwrfAtnU6PdZkCWD4XI8wB1T5Xj3fSw9lO/40H1ldys=
 modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
 modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
 modernc.org/gc/v2 v2.4.1 h1:9cNzOqPyMJBvrUipmynX0ZohMhcxPtMccYgGOJdOiBw=
 modernc.org/gc/v2 v2.4.1/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU=
 modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b h1:BnN1t+pb1cy61zbvSUV7SeI0PwosMhlAEi/vBY4qxp8=
 modernc.org/gc/v3 v3.0.0-20240304020402-f0dba7c97c2b/go.mod h1:Qz0X07sNOR1jWYCrJMEnbW/X55x206Q7Vt4mz6/wHp4=
-modernc.org/libc v1.43.1 h1:t1JKWKv2dxw3xj3OXmA/abCLTyZGEWSjUcOMh8kZ8zc=
-modernc.org/libc v1.43.1/go.mod h1:KpVOBS+2L3K2i2oZac6eycs//ukjVzwrhobyw+mi81c=
+modernc.org/libc v1.45.0 h1:qmAJZf9tYFqK/SFSFqpBc9uHWGsvoYWtRcMQdG+JEfM=
+modernc.org/libc v1.45.0/go.mod h1:YkRHLoN4L70OdO1cVmM83KZhRbRvsc3XogfVzbTXBwE=
 modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
 modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
 modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=
@@ -99,8 +99,8 @@ modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4=
 modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
 modernc.org/sortutil v1.2.0 h1:jQiD3PfS2REGJNzNCMMaLSp/wdMNieTbKX920Cqdgqc=
 modernc.org/sortutil v1.2.0/go.mod h1:TKU2s7kJMf1AE84OoiGppNHJwvB753OYfNl2WRb++Ss=
-modernc.org/sqlite v1.29.3 h1:6L71d3zXVB8oubdVSuwiurNyYRetQ3It8l1FSwylwQ0=
-modernc.org/sqlite v1.29.3/go.mod h1:MjUIBKZ+tU/lqjNLbVAAMjsQPdWdA/ciwdhsT9kBwk8=
+modernc.org/sqlite v1.29.5 h1:8l/SQKAjDtZFo9lkJLdk8g9JEOeYRG4/ghStDCCTiTE=
+modernc.org/sqlite v1.29.5/go.mod h1:S02dvcmm7TnTRvGhv8IGYyLnIt7AS2KPaB1F/71p75U=
 modernc.org/strutil v1.2.0 h1:agBi9dp1I+eOnxXeiZawM8F4LawKv4NzGWSaLfyeNZA=
 modernc.org/strutil v1.2.0/go.mod h1:/mdcBmfOibveCTBxUl5B5l6W+TTH1FXPLHZE6bTosX0=
 modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=