feat: pull success

This commit is contained in:
langhuihui
2023-10-05 20:48:22 +08:00
parent f8dc132bb5
commit f1996508ef
3 changed files with 34 additions and 31 deletions

View File

@@ -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)
}
}
}

2
go.mod
View File

@@ -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

View File

@@ -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 {