]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Fix flv未接收到起始段 #118
authorqydysky <qydysky@foxmail.com>
Wed, 5 Jun 2024 16:34:33 +0000 (16:34 +0000)
committerqydysky <qydysky@foxmail.com>
Wed, 5 Jun 2024 16:34:33 +0000 (16:34 +0000)
CV/Var.go
Reply/flvHeaders/flvHeader [new file with mode: 0644]
Reply/flvHeaders/flvHeaderHevc [new file with mode: 0644]
Reply/stream.go

index 89bb4cc40c5f358c22a08e6d5edde7e1939972a2..b87617495da71406f6cbfce883c0e938e55c2f3c 100644 (file)
--- a/CV/Var.go
+++ b/CV/Var.go
@@ -87,6 +87,7 @@ type Common struct {
 
 type LiveQn struct {
        Url          string
+       Codec        string
        ReUpTime     time.Time
        disableCount int
        Expires      time.Time //流到期时间
diff --git a/Reply/flvHeaders/flvHeader b/Reply/flvHeaders/flvHeader
new file mode 100644 (file)
index 0000000..dd08ee0
Binary files /dev/null and b/Reply/flvHeaders/flvHeader differ
diff --git a/Reply/flvHeaders/flvHeaderHevc b/Reply/flvHeaders/flvHeaderHevc
new file mode 100644 (file)
index 0000000..cff456c
Binary files /dev/null and b/Reply/flvHeaders/flvHeaderHevc differ
index b9735a7669471da7caa55e11989565231d04aa35..9ab460e8901145ed4de5a316cc9aeedba05d1898 100644 (file)
@@ -42,9 +42,12 @@ import (
        pweb "github.com/qydysky/part/web"
 )
 
-//go:embed flvHeader
+//go:embed flvHeaders/flvHeader
 var flvHeader []byte
 
+//go:embed flvHeaders/flvHeaderHevc
+var flvHeaderHevc []byte
+
 type M4SStream struct {
        Status               context.Context       //IsLive()是否运行中
        exitSign             *signal.Signal        //IsLive()是否等待退出中
@@ -792,13 +795,22 @@ func (t *M4SStream) saveStreamFlv() (e error) {
                                                }
                                                if keyframe.Size() != 0 {
                                                        if len(t.first_buf) == 0 {
-                                                               //      t.log.L(`W: `, `flv未接收到起始段`)
-                                                               //      pctx.PutVal(cancelC, &errCtx, errors.New(`flv未接收到起始段`))
-                                                               //      break
-                                                               // } else {
-                                                               t.log.L(`W: `, `flv未接收到起始段,使用内置头`)
-                                                               t.first_buf = flvHeader
-                                                               t.msg.Push_tag(`load`, t)
+                                                               switch v.Codec {
+                                                               case "hevc":
+                                                                       t.log.L(`W: `, `flv未接收到起始段,使用内置头`)
+                                                                       t.first_buf = flvHeaderHevc
+                                                                       t.msg.Push_tag(`load`, t)
+                                                               case "avc":
+                                                                       t.log.L(`W: `, `flv未接收到起始段,使用内置头`)
+                                                                       t.first_buf = flvHeader
+                                                                       t.msg.Push_tag(`load`, t)
+                                                               default:
+                                                               }
+                                                               if len(t.first_buf) == 0 {
+                                                                       t.log.L(`W: `, `flv未接收到起始段`)
+                                                                       pctx.PutVal(cancelC, &errCtx, errors.New(`flv未接收到起始段`))
+                                                                       break
+                                                               }
                                                        }
                                                        buf, unlock := keyframe.GetPureBufRLock()
                                                        t.bootBufPush(buf)