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
//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()
}
//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()
}
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()
//
var (
- buf = slice.New[byte]()
- fmp4KeyFrames = slice.New[byte]()
- fmp4KeyFramesBuf []byte
- fmp4Decoder = &Fmp4Decoder{}
+ buf = slice.New[byte]()
+ fmp4Decoder = &Fmp4Decoder{}
// flashingSer bool
)
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)
//丢弃所有数据
buf.Reset()
} else {
- fmp4KeyFrames.Reset()
last_available_offset = 0
}
}
// 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()
}
}
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
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=