mirror of
https://github.com/Monibuca/plugin-rtsp2.git
synced 2025-09-26 19:51:16 +08:00
feat: pull success
This commit is contained in:
57
client.go
57
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
2
go.mod
2
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
|
||||
|
6
main.go
6
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 {
|
||||
|
Reference in New Issue
Block a user