From f1996508ef811f4d4e2ea8a8e67b1e1076674950 Mon Sep 17 00:00:00 2001 From: langhuihui <178529795@qq.com> Date: Thu, 5 Oct 2023 20:48:22 +0800 Subject: [PATCH] feat: pull success --- client.go | 57 ++++++++++++++++++++++++++----------------------------- go.mod | 2 +- main.go | 6 ++++++ 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/client.go b/client.go index 019aa55..1c035c5 100644 --- a/client.go +++ b/client.go @@ -28,7 +28,6 @@ func (p *RTSPClient) Disconnect() { func (p *RTSPPuller) Connect() (err error) { p.Conn = rtsp.NewClient(p.RemoteURL) p.SetIO(p.Conn) - p.Conn.Listen(p.onMsg) return p.Conn.Dial() } @@ -39,39 +38,37 @@ func (p *RTSPPuller) Pull() (err error) { if err = p.Describe(); err != nil { return } + p.setTracks() return p.Start() } -func (p *RTSPPuller) onMsg(msg any) { - switch msg { - case rtsp.MethodDescribe: - for _, m := range p.Conn.Medias { - for _, c := range m.Codecs { - sender := core.NewSender(m, c) - rec, err := p.Conn.GetTrack(m, c) - if err != nil { - p.Error("get track", zap.Error(err)) - continue - } - switch c.Name { - case core.CodecH264: - p.VideoTrack = track.NewH264(p.Stream, c.PayloadType) - sender.Handler = p.VideoTrack.WriteRTPPack - case core.CodecH265: - p.VideoTrack = track.NewH265(p.Stream, c.PayloadType) - sender.Handler = p.VideoTrack.WriteRTPPack - case core.CodecAAC: - p.AudioTrack = track.NewAAC(p.Stream, c.PayloadType) - sender.Handler = p.AudioTrack.WriteRTPPack - case core.CodecPCMA: - p.AudioTrack = track.NewG711(p.Stream, true, c.PayloadType) - sender.Handler = p.AudioTrack.WriteRTPPack - case core.CodecPCMU: - p.AudioTrack = track.NewG711(p.Stream, false, c.PayloadType) - sender.Handler = p.AudioTrack.WriteRTPPack - } - sender.HandleRTP(rec) +func (p *RTSPPuller) setTracks() { + for _, m := range p.Conn.Medias { + for _, c := range m.Codecs { + sender := core.NewSender(m, c) + rec, err := p.Conn.GetTrack(m, c) + if err != nil { + p.Error("get track", zap.Error(err)) + continue } + switch c.Name { + case core.CodecH264: + p.VideoTrack = track.NewH264(p.Stream, c.PayloadType) + sender.Handler = p.VideoTrack.WriteRTPPack + case core.CodecH265: + p.VideoTrack = track.NewH265(p.Stream, c.PayloadType) + sender.Handler = p.VideoTrack.WriteRTPPack + case core.CodecAAC: + p.AudioTrack = track.NewAAC(p.Stream, c.PayloadType) + sender.Handler = p.AudioTrack.WriteRTPPack + case core.CodecPCMA: + p.AudioTrack = track.NewG711(p.Stream, true, c.PayloadType) + sender.Handler = p.AudioTrack.WriteRTPPack + case core.CodecPCMU: + p.AudioTrack = track.NewG711(p.Stream, false, c.PayloadType) + sender.Handler = p.AudioTrack.WriteRTPPack + } + sender.HandleRTP(rec) } } } diff --git a/go.mod b/go.mod index a09097c..d84f031 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module m7s.live/plugin/rtsp2/v4 -go 1.21.0 +go 1.20 require ( github.com/AlexxIT/go2rtc v1.7.1 // indirect diff --git a/main.go b/main.go index 1c24930..2e5a4df 100644 --- a/main.go +++ b/main.go @@ -17,6 +17,12 @@ var RTSP2Plugin = engine.InstallPlugin(&conf) func (*RTSP2Config) OnEvent(event any) { switch v := event.(type) { + case engine.FirstConfig: + for streamPath, url := range conf.PullOnStart { + if err := RTSP2Plugin.Pull(streamPath, url, new(RTSPPuller), 0); err != nil { + RTSP2Plugin.Error("pull", zap.String("streamPath", streamPath), zap.String("url", url), zap.Error(err)) + } + } case engine.InvitePublish: //按需拉流 if url, ok := conf.PullOnSub[v.Target]; ok { if err := RTSP2Plugin.Pull(v.Target, url, new(RTSPPuller), 0); err != nil {