diff --git a/main.go b/main.go index 200fe4d..f6a09b7 100644 --- a/main.go +++ b/main.go @@ -68,25 +68,7 @@ type HDLSubscriber struct { func (sub *HDLSubscriber) OnEvent(event any) { switch v := event.(type) { - case HaveFLV: - flvTag := v.GetFLV() - if _, err := flvTag.WriteTo(sub); err != nil { - sub.Stop() - } - default: - sub.Subscriber.OnEvent(event) - } -} - -func (*HDLConfig) ServeHTTP(w http.ResponseWriter, r *http.Request) { - streamPath := strings.TrimSuffix(strings.TrimPrefix(r.URL.Path, "/hdl/"), ".flv") - w.Header().Set("Transfer-Encoding", "chunked") - w.Header().Set("Content-Type", "video/x-flv") - sub := &HDLSubscriber{} - sub.ID = r.RemoteAddr - sub.SetParentCtx(r.Context()) - sub.SetIO(w) - if err := plugin.Subscribe(streamPath, sub); err == nil { + case ISubscriber: at, vt := sub.AudioTrack, sub.VideoTrack hasVideo := at != nil hasAudio := vt != nil @@ -124,10 +106,27 @@ func (*HDLConfig) ServeHTTP(w http.ResponseWriter, r *http.Request) { metaData["height"] = vt.SPSInfo.Height } // 写入FLV头 - w.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0}) - codec.WriteFLVTag(w, codec.FLV_TAG_TYPE_SCRIPT, 0, net.Buffers{buffer.Bytes()}) - sub.PlayBlock(sub) - } else { + sub.Write([]byte{'F', 'L', 'V', 0x01, flags, 0, 0, 0, 9, 0, 0, 0, 0}) + codec.WriteFLVTag(sub, codec.FLV_TAG_TYPE_SCRIPT, 0, net.Buffers{buffer.Bytes()}) + case HaveFLV: + flvTag := v.GetFLV() + if _, err := flvTag.WriteTo(sub); err != nil { + sub.Stop() + } + default: + sub.Subscriber.OnEvent(event) + } +} + +func (*HDLConfig) ServeHTTP(w http.ResponseWriter, r *http.Request) { + streamPath := strings.TrimSuffix(strings.TrimPrefix(r.URL.Path, "/hdl/"), ".flv") + w.Header().Set("Transfer-Encoding", "chunked") + w.Header().Set("Content-Type", "video/x-flv") + sub := &HDLSubscriber{} + sub.ID = r.RemoteAddr + sub.SetParentCtx(r.Context()) + sub.SetIO(w) + if err := plugin.SubscribeBlock(streamPath, sub); err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } } diff --git a/pull.go b/pull.go index 9fa8759..a4b8cc4 100644 --- a/pull.go +++ b/pull.go @@ -10,13 +10,11 @@ import ( "go.uber.org/zap" . "m7s.live/engine/v4" "m7s.live/engine/v4/codec" - "m7s.live/engine/v4/log" "m7s.live/engine/v4/util" ) func (puller *HDLPuller) Connect() (err error) { - - log.Info("connect", zap.String("remoteURL", puller.RemoteURL)) + plugin.Info("connect", zap.String("remoteURL", puller.RemoteURL)) if strings.HasPrefix(puller.RemoteURL, "http") { var res *http.Response if res, err = http.Get(puller.RemoteURL); err == nil { @@ -29,7 +27,7 @@ func (puller *HDLPuller) Connect() (err error) { } } if err != nil { - log.Error("connect", zap.Error(err)) + puller.Error("connect", zap.Error(err)) } return }