]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 主播断流只判断视频
authorqydysky <32743305+qydysky@users.noreply.github.com>
Fri, 17 Feb 2023 13:02:12 +0000 (21:02 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Fri, 17 Feb 2023 13:02:12 +0000 (21:02 +0800)
Reply/fmp4Decode.go

index c53a5dd772913d12820051fe5242a08defc3c262..7d5277add526600fa3149c48f423d46aecfde6e2 100644 (file)
@@ -217,16 +217,17 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte])
                                        // moofSN       = int(F.Btoi(buf, m[1].i+12, 4))
                                )
 
-                               if e := checkSampleEntries(m[5].i, m[6].i); e != nil {
-                                       //skip
-                                       t.buf.Reset()
-                                       haveKeyframe = false
-                                       cu = m[0].i
-                                       return false
-                               }
-
                                {
                                        ts, _ := get_track_type(m[3].i, m[4].i)
+                                       if ts.handlerType == 'v' {
+                                               if e := checkSampleEntries(m[5].i, m[6].i); e != nil {
+                                                       //skip
+                                                       t.buf.Reset()
+                                                       haveKeyframe = false
+                                                       cu = m[0].i
+                                                       return false
+                                               }
+                                       }
                                        if nil != check_set_maxT(ts, func(_ timeStamp) error {
                                                return errors.New("skip")
                                        }, func(_ timeStamp) error {
@@ -267,16 +268,17 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte])
 
                                // fmt.Println(moofSN, "frame1", keyframeMoof, t.buf.size(), m[0].i, m[10].n, m[10].e)
 
-                               if e := checkSampleEntries(m[5].i, m[6].i); e != nil {
-                                       //skip
-                                       t.buf.Reset()
-                                       haveKeyframe = false
-                                       cu = m[0].i
-                                       return false
-                               }
-
                                {
                                        ts, handlerType := get_track_type(m[3].i, m[4].i)
+                                       if handlerType == 'v' {
+                                               if e := checkSampleEntries(m[5].i, m[6].i); e != nil {
+                                                       //skip
+                                                       t.buf.Reset()
+                                                       haveKeyframe = false
+                                                       cu = m[0].i
+                                                       return false
+                                               }
+                                       }
                                        switch handlerType {
                                        case 'v':
                                                video = ts
@@ -296,6 +298,15 @@ func (t *Fmp4Decoder) Search_stream_fmp4(buf []byte, keyframes *slice.Buf[byte])
                                }
                                {
                                        ts, handlerType := get_track_type(m[7].i, m[8].i)
+                                       if handlerType == 'v' {
+                                               if e := checkSampleEntries(m[9].i, m[10].i); e != nil {
+                                                       //skip
+                                                       t.buf.Reset()
+                                                       haveKeyframe = false
+                                                       cu = m[0].i
+                                                       return false
+                                               }
+                                       }
                                        switch handlerType {
                                        case 'v':
                                                video = ts