From: qydysky Date: Wed, 5 Jun 2024 16:34:33 +0000 (+0000) Subject: Fix flv未接收到起始段 #118 X-Git-Tag: v0.14.5~8 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=e56fd2920488cd78d259302cf61c04b8ea13bcd3;p=bili_danmu%2F.git Fix flv未接收到起始段 #118 --- diff --git a/CV/Var.go b/CV/Var.go index 89bb4cc..b876174 100644 --- 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 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 index 0000000..cff456c Binary files /dev/null and b/Reply/flvHeaders/flvHeaderHevc differ diff --git a/Reply/stream.go b/Reply/stream.go index b9735a7..9ab460e 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -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)