From 8b8afe0c600cf33bbb61678c7b49569ffa75d52f Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 16 Mar 2024 20:02:21 +0800 Subject: [PATCH] =?utf8?q?Improve=20=E9=81=BF=E5=85=8D=E6=BD=9C=E5=9C=A8?= =?utf8?q?=E6=95=B0=E6=8D=AE=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/fmp4Decode.go | 4 ++-- Reply/stream.go | 47 ++++++++++++++++++++++++++++++--------------- go.mod | 6 +++--- go.sum | 20 +++++++++---------- 4 files changed, 46 insertions(+), 31 deletions(-) diff --git a/Reply/fmp4Decode.go b/Reply/fmp4Decode.go index c66cc74..cbc5999 100644 --- a/Reply/fmp4Decode.go +++ b/Reply/fmp4Decode.go @@ -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() } diff --git a/Reply/stream.go b/Reply/stream.go index dc284d1..5525185 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -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 ee4138e..7c26ff8 100644 --- 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 e1b5aa6..b7eca6a 100644 --- 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= -- 2.39.2