From: qydysky <32743305+qydysky@users.noreply.github.com> Date: Tue, 28 Feb 2023 15:24:10 +0000 (+0800) Subject: Improve fmp4模式内存优化 X-Git-Tag: v0.7.0~11 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=c66c738012a274b588fa78cb4616bc95f48714f1;p=bili_danmu%2F.git Improve fmp4模式内存优化 --- diff --git a/Reply/fmp4Decode.go b/Reply/fmp4Decode.go index fbe44e1..e4e82cb 100644 --- a/Reply/fmp4Decode.go +++ b/Reply/fmp4Decode.go @@ -113,7 +113,7 @@ func (t *Fmp4Decoder) Init_fmp4(buf []byte) (b []byte, err error) { return b, nil } -func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte]) (cu int, err error) { +func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte) (cu int, keyframes [][]byte, err error) { if len(buf) > humanize.MByte*100 { err = errors.New("buf too large") return @@ -243,7 +243,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte]) //deal frame if keyframeMoof { if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() { - keyframes.Append(t.buf.GetPureBuf()) + keyframes = append(keyframes, t.buf.GetCopyBuf()) cu = m[0].i t.buf.Reset() } @@ -332,7 +332,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte]) //deal frame if keyframeMoof { if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() { - keyframes.Append(t.buf.GetPureBuf()) + keyframes = append(keyframes, t.buf.GetCopyBuf()) cu = m[0].i t.buf.Reset() } diff --git a/Reply/stream.go b/Reply/stream.go index 94e1ce3..b0e3395 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -116,7 +116,7 @@ func (t *M4SStream) getM4s() (p *m4s_link_item) { return &m4s_link_item{} }, func(t *m4s_link_item) bool { - return !t.pooledTime.IsZero() || t.createdTime.After(t.pooledTime) || time.Now().Before(t.pooledTime.Add(time.Second*10)) + return t.createdTime.After(t.pooledTime) || time.Now().Before(t.pooledTime.Add(time.Second*10)) }, func(t *m4s_link_item) *m4s_link_item { return t.reset() @@ -805,10 +805,8 @@ func (t *M4SStream) saveStreamM4s() (e error) { // var ( - buf = slice.New[byte]() - fmp4KeyFrames = slice.New[byte]() - fmp4KeyFramesBuf []byte - fmp4Decoder = &Fmp4Decoder{} + buf = slice.New[byte]() + fmp4Decoder = &Fmp4Decoder{} // flashingSer bool ) @@ -977,7 +975,7 @@ func (t *M4SStream) saveStreamM4s() (e error) { download_seq = append(download_seq[:k], download_seq[k+1:]...) k -= 1 - last_available_offset, err := fmp4Decoder.Search_stream_fmp4(buf.GetPureBuf(), fmp4KeyFrames) + last_available_offset, keyframes, err := fmp4Decoder.Search_stream_fmp4(buf.GetPureBuf()) if err != nil { if !errors.Is(err, io.EOF) { t.log.L(`E: `, err) @@ -993,7 +991,6 @@ func (t *M4SStream) saveStreamM4s() (e error) { //丢弃所有数据 buf.Reset() } else { - fmp4KeyFrames.Reset() last_available_offset = 0 } } @@ -1001,13 +998,11 @@ func (t *M4SStream) saveStreamM4s() (e error) { // no, _ := v.getNo() // fmt.Println(no, "fmp4KeyFrames", fmp4KeyFrames.size(), last_available_offset, err) - if !fmp4KeyFrames.IsEmpty() { - fmp4KeyFramesBuf = fmp4KeyFrames.GetCopyBuf() - fmp4KeyFrames.Reset() - t.bootBufPush(fmp4KeyFramesBuf) - t.Stream_msg.Push_tag(`data`, fmp4KeyFramesBuf) + for _, keyframe := range keyframes { + t.bootBufPush(keyframe) + t.Stream_msg.Push_tag(`data`, keyframe) if out != nil { - out.Write(fmp4KeyFramesBuf, true) + out.Write(keyframe, true) out.Sync() } } diff --git a/go.mod b/go.mod index 5ac278b..c010f10 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/gofrs/uuid v4.3.0+incompatible github.com/gotk3/gotk3 v0.6.1 github.com/mdp/qrterminal/v3 v3.0.0 - github.com/qydysky/part v0.22.21 + github.com/qydysky/part v0.23.0 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.3.8 diff --git a/go.sum b/go.sum index 413994a..38a5fb4 100644 --- a/go.sum +++ b/go.sum @@ -45,6 +45,8 @@ github.com/qydysky/part v0.22.20 h1:zbYo4MzQWxcH7L7PSXF7C+8q07hHyh5HseaQHcnXaO8= github.com/qydysky/part v0.22.20/go.mod h1:T6tQU8VYOVT+rX5v40Y7OeDWByz4fwDnyehpa+QIP2c= github.com/qydysky/part v0.22.21 h1:qin7pM8pNJ4J+c7w1eHS+4//SvhWm9VPP2tGLAckwVk= github.com/qydysky/part v0.22.21/go.mod h1:T6tQU8VYOVT+rX5v40Y7OeDWByz4fwDnyehpa+QIP2c= +github.com/qydysky/part v0.23.0 h1:f9RoQS+Moz1s4p7/ScP1aK7z3QQGWL2LRSOV0SWLzOk= +github.com/qydysky/part v0.23.0/go.mod h1:T6tQU8VYOVT+rX5v40Y7OeDWByz4fwDnyehpa+QIP2c= github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=