]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Fix fmp4未知box错误 (#165)
authorqydysky <qydysky@foxmail.com>
Tue, 11 Feb 2025 19:49:53 +0000 (03:49 +0800)
committerGitHub <noreply@github.com>
Tue, 11 Feb 2025 19:49:53 +0000 (03:49 +0800)
Reply/Msg.go
Reply/flvDecode.go
Reply/fmp4Decode.go
go.mod
go.sum

index 30d401a7ab5ccd926ab41f8d9aa1607bf07ececa..e9587c9eb4196e62536bf95759be741263ba83da 100644 (file)
@@ -17,6 +17,7 @@ var msglog = c.C.Log.Base(`Msg`)
 
 // Msg类型数据处理方法map
 var Msg_map = map[string]func(replyF, string){
+       `COMMON_ANIMATION`:                     nil,
        `UNIVERSAL_EVENT_GIFT`:                 nil,
        `UNIVERSAL_EVENT_GIFT_V2`:              nil,
        `PK_INFO`:                              nil,
index 528f3ae25a3de430da258164db4c067516f473fa..e2840f766faecb055c6476f1f16537bedeb96f2b 100644 (file)
@@ -36,10 +36,11 @@ var (
        ErrTagSize          = errors.New("ErrTagSize")
        ErrSignLost         = errors.New("ErrSignLost")
 
-       ActionInitFlv     perrors.Action = `InitFlv`
-       ActionGetIndexFlv perrors.Action = `GetIndexFlv`
-       ActionSeekFlv     perrors.Action = `SeekFlv`
-       ActionOneFFlv     perrors.Action = `OneFFlv`
+       ActionInitFlv        perrors.Action = `InitFlv`
+       ActionGetIndexFlv    perrors.Action = `GetIndexFlv`
+       ActionGenFastSeedFlv perrors.Action = `GenFastSeedFlv`
+       ActionSeekFlv        perrors.Action = `SeekFlv`
+       ActionOneFFlv        perrors.Action = `OneFFlv`
 )
 
 type FlvDecoder struct {
@@ -397,9 +398,9 @@ func (t *FlvDecoder) GenFastSeed(reader io.Reader, save func(seedTo time.Duratio
                                if firstFT == -1 {
                                        firstFT = t
                                }
-                               return save(time.Millisecond*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index))
+                               return perrors.Join(ActionGenFastSeedFlv, save(time.Millisecond*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index)))
                        }); e != nil {
-                               return perrors.New(e.Error(), ActionOneFFlv)
+                               return perrors.Join(ActionGenFastSeedFlv, ActionOneFFlv, e)
                        } else {
                                if dropOffset != 0 {
                                        _ = buff.RemoveFront(dropOffset)
index c0418ff8f9a512191ae7e0d4ae07d8336b910ebd..27923ab5c8bbe5c50d409f0d29b92098345884e4 100644 (file)
@@ -15,10 +15,16 @@ import (
 )
 
 var (
-       ActionInitFmp4     pe.Action = `InitFmp4`
-       ActionGetIndexFmp4 pe.Action = `GetIndexFmp4`
-       ActionSeekFmp4     pe.Action = `SeekFmp4`
-       ActionOneFFmp4     pe.Action = `OneFFmp4`
+       fmp4BoxLenSize  = 4
+       fmp4BoxNameSize = 4
+)
+
+var (
+       ActionInitFmp4        pe.Action = `InitFmp4`
+       ActionGetIndexFmp4    pe.Action = `GetIndexFmp4`
+       ActionGenFastSeedFmp4 pe.Action = `GenFastSeedFmp4`
+       ActionSeekFmp4        pe.Action = `SeekFmp4`
+       ActionOneFFmp4        pe.Action = `OneFFmp4`
 )
 
 var boxs map[string]bool
@@ -277,7 +283,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                                t.buf.Reset()
                                                                haveKeyframe = false
                                                                cu = m[0].i
-                                                               return pe.Join(ErrDealIESkip.New(), e)
+                                                               return pe.Join(ErrDealIESkip, e)
                                                        }
                                                }
                                                if e := check_set_maxT(ts, func(_ timeStamp) error {
@@ -288,7 +294,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                        cu = m[0].i
                                                        return errors.New("skip")
                                                }); e != nil {
-                                                       return pe.Join(ErrDealIESkip.New(), e)
+                                                       return pe.Join(ErrDealIESkip, e)
                                                }
                                        }
 
@@ -298,7 +304,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                        if keyframeMoof {
                                                if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
                                                        if e := t.buf.AppendTo(keyframe); e != nil {
-                                                               return pe.Join(ErrDealIEBreak.New(), e)
+                                                               return pe.Join(ErrDealIEBreak, e)
                                                        }
                                                        cu = m[0].i
                                                        t.buf.Reset()
@@ -309,7 +315,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                        }
                                        if haveKeyframe {
                                                if e := t.buf.Append(buf[m[0].i:m[6].e]); e != nil {
-                                                       return pe.Join(ErrDealIEBreak.New(), e)
+                                                       return pe.Join(ErrDealIEBreak, e)
                                                }
                                        }
                                        return nil
@@ -335,7 +341,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                                t.buf.Reset()
                                                                haveKeyframe = false
                                                                cu = m[0].i
-                                                               return pe.Join(ErrDealIESkip.New(), e)
+                                                               return pe.Join(ErrDealIESkip, e)
                                                        }
                                                }
                                                switch handlerType {
@@ -352,7 +358,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                        cu = m[0].i
                                                        return errors.New("skip")
                                                }); e != nil {
-                                                       return pe.Join(ErrDealIESkip.New(), e)
+                                                       return pe.Join(ErrDealIESkip, e)
                                                }
                                        }
                                        {
@@ -363,7 +369,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                                t.buf.Reset()
                                                                haveKeyframe = false
                                                                cu = m[0].i
-                                                               return pe.Join(ErrDealIESkip.New(), e)
+                                                               return pe.Join(ErrDealIESkip, e)
                                                        }
                                                }
                                                switch handlerType {
@@ -380,7 +386,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                        cu = m[0].i
                                                        return errors.New("skip")
                                                }); e != nil {
-                                                       return pe.Join(ErrDealIESkip.New(), e)
+                                                       return pe.Join(ErrDealIESkip, e)
                                                }
                                        }
 
@@ -389,7 +395,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                                t.AVTDiff = 0.1
                                        }
                                        if diff := math.Abs(video.getT() - audio.getT()); diff > t.AVTDiff {
-                                               return pe.Join(ErrDealIEBreak.New(), fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
+                                               return pe.Join(ErrDealIEBreak, fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
                                                // copy(video.data, F.Itob64(int64(audio.getT()*float64(video.timescale))))
                                        }
 
@@ -397,7 +403,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                        if keyframeMoof {
                                                if v, e := t.buf.HadModified(bufModified); e == nil && v && !t.buf.IsEmpty() {
                                                        if e := t.buf.AppendTo(keyframe); e != nil {
-                                                               return pe.Join(ErrDealIEBreak.New(), e)
+                                                               return pe.Join(ErrDealIEBreak, e)
                                                        }
                                                        cu = m[0].i
                                                        t.buf.Reset()
@@ -408,7 +414,7 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframe *slice.Buf[byte])
                                        }
                                        if haveKeyframe {
                                                if e := t.buf.Append(buf[m[0].i:m[10].e]); e != nil {
-                                                       return pe.Join(ErrDealIEBreak.New(), e)
+                                                       return pe.Join(ErrDealIEBreak, e)
                                                }
                                        }
                                        return nil
@@ -606,7 +612,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                                                t.buf.Reset()
                                                                haveKeyframe = false
                                                                cu = m[0].i
-                                                               return pe.Join(ErrDealIESkip.New(), e)
+                                                               return pe.Join(ErrDealIESkip, e)
                                                        }
                                                }
                                                switch handlerType {
@@ -623,7 +629,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                                        cu = m[0].i
                                                        return errors.New("skip")
                                                }); e != nil {
-                                                       return pe.Join(ErrDealIESkip.New(), e)
+                                                       return pe.Join(ErrDealIESkip, e)
                                                }
                                        }
                                        {
@@ -634,7 +640,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                                                t.buf.Reset()
                                                                haveKeyframe = false
                                                                cu = m[0].i
-                                                               return pe.Join(ErrDealIESkip.New(), e)
+                                                               return pe.Join(ErrDealIESkip, e)
                                                        }
                                                }
                                                switch handlerType {
@@ -651,7 +657,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                                        cu = m[0].i
                                                        return errors.New("skip")
                                                }); e != nil {
-                                                       return pe.Join(ErrDealIESkip.New(), e)
+                                                       return pe.Join(ErrDealIESkip, e)
                                                }
                                        }
 
@@ -660,7 +666,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                                t.AVTDiff = 0.1
                                        }
                                        if diff := math.Abs(video.getT() - audio.getT()); diff > t.AVTDiff {
-                                               return pe.Join(ErrDealIEBreak.New(), fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
+                                               return pe.Join(ErrDealIEBreak, fmt.Errorf("时间戳不匹配 %v %v (或许应调整fmp4音视频时间戳容差s>%.2f)", video.timeStamp, audio.timeStamp, diff))
                                                // copy(video.data, F.Itob64(int64(audio.getT()*float64(video.timescale))))
                                        }
 
@@ -681,7 +687,7 @@ func (t *Fmp4Decoder) oneF(buf []byte, w ...dealFMp4) (cu int, err error) {
                                        }
                                        if haveKeyframe {
                                                if e := t.buf.Append(buf[m[0].i:m[10].e]); e != nil {
-                                                       return pe.Join(ErrDealIEBreak.New(), e)
+                                                       return pe.Join(ErrDealIEBreak, e)
                                                }
                                        }
                                        return nil
@@ -816,9 +822,9 @@ func (t *Fmp4Decoder) GenFastSeed(reader io.Reader, save func(seedTo time.Durati
                                if firstFT == -1 {
                                        firstFT = t
                                }
-                               return save(time.Second*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index))
+                               return pe.Join(ActionGenFastSeedFmp4, save(time.Second*time.Duration(t-firstFT), int64(totalRead-buff.Size()+index)))
                        }); e != nil {
-                               return pe.New(e.Error(), ActionOneFFmp4)
+                               return pe.Join(ActionGenFastSeedFmp4, ActionOneFFmp4, e)
                        } else {
                                if dropOffset != 0 {
                                        _ = buff.RemoveFront(dropOffset)
@@ -878,7 +884,7 @@ var (
 func decode(buf []byte, reSyncboxName string) (m []ie, err error) {
        var cu int
 
-       for cu < len(buf)-3 {
+       for cu < len(buf)-fmp4BoxLenSize-fmp4BoxNameSize {
                boxName, i, e, E := searchBox(buf, &cu)
                if E != nil {
                        if errors.Is(E, io.EOF) {
@@ -913,8 +919,8 @@ var (
 
 func searchBox(buf []byte, cu *int) (boxName string, i int, e int, err error) {
        i = *cu
-       e = i + int(F.Btoi(buf, *cu, 4))
-       boxName = string(buf[*cu+4 : *cu+8])
+       e = i + int(F.Btoi(buf, *cu, fmp4BoxLenSize))
+       boxName = string(buf[*cu+fmp4BoxLenSize : *cu+fmp4BoxLenSize+fmp4BoxNameSize])
        isPureBoxOrNeedSkip, ok := boxs[boxName]
        if !ok {
                err = ErrUnkownBox.WithReason("未知包: " + boxName)
diff --git a/go.mod b/go.mod
index 29a755538b219152856c6f70ab7aa77a875a670b..47c8b23287d59d3649abd8af042d0d5081886414 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.23
 require (
        github.com/gotk3/gotk3 v0.6.4
        github.com/mdp/qrterminal/v3 v3.2.0
-       github.com/qydysky/part v0.28.20250204174904
+       github.com/qydysky/part v0.28.20250211194255
        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.21.0
diff --git a/go.sum b/go.sum
index afb2147fa0b15c6501eb73c35673595712daa8a0..7a436cb228b7b063a89e6ddc4bbf1da30d956809 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -48,8 +48,8 @@ github.com/qydysky/biliApi v0.0.0-20240725184407-15076dddb6fb h1:dtSpNF9hLQa09TU
 github.com/qydysky/biliApi v0.0.0-20240725184407-15076dddb6fb/go.mod h1:om024vfxALQ5vxsbaGoMm8IS0esLYBnEOpJI8FsGoDg=
 github.com/qydysky/brotli v0.0.0-20240828134800-e9913a6e7ed9 h1:k451T+bpsLr+Dq9Ujo+Qtx0iomRA1XXS5ttlEojvfuQ=
 github.com/qydysky/brotli v0.0.0-20240828134800-e9913a6e7ed9/go.mod h1:cI8/gy/wjy2Eb+p2IUj2ZuDnC8R5Vrx3O0VMPvMvphA=
-github.com/qydysky/part v0.28.20250204174904 h1:9b61I1Uy7WEWC4egJDFezJPFz/acnsR2Nrb1YGi5F30=
-github.com/qydysky/part v0.28.20250204174904/go.mod h1:RAb3G05OaqCSRWFJz9FnONB6iqF/Dk4R+Z5c/H7mWSg=
+github.com/qydysky/part v0.28.20250211194255 h1:rCJs36/oIsEs81abGA1LX0uBoqG0IYqZySDpsvFTOwI=
+github.com/qydysky/part v0.28.20250211194255/go.mod h1:RAb3G05OaqCSRWFJz9FnONB6iqF/Dk4R+Z5c/H7mWSg=
 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=