diff --git a/client.go b/client.go index ec01e43..83c2094 100644 --- a/client.go +++ b/client.go @@ -6,7 +6,6 @@ import ( "github.com/aler9/gortsplib" "github.com/aler9/gortsplib/pkg/base" - "github.com/pion/rtp/v2" "m7s.live/engine/v4" ) @@ -24,11 +23,11 @@ func (p *RTSPPuller) Connect() error { p.Transport = gortsplib.TransportTCP } p.Client = &gortsplib.Client{ - OnPacketRTP: func(trackID int, packet *rtp.Packet) { - p.RTSPPublisher.Tracks[trackID].WriteRTPPack(packet) + OnPacketRTP: func(ctx *gortsplib.ClientOnPacketRTPCtx) { + p.RTSPPublisher.Tracks[ctx.TrackID].WriteRTPPack(ctx.Packet) }, - ReadBufferSize: rtspConfig.ReadBufferSize, - Transport: &p.Transport, + ReadBufferCount: rtspConfig.ReadBufferSize, + Transport: &p.Transport, } // parse URL u, err := base.ParseURL(p.RemoteURL) @@ -71,11 +70,11 @@ func (p *RTSPPusher) OnEvent(event any) { switch v := event.(type) { case *engine.AudioFrame: for _, pack := range v.RTP { - p.Client.WritePacketRTP(p.audioTrackId, &pack.Packet) + p.Client.WritePacketRTP(p.audioTrackId, &pack.Packet, v.DTS == v.PTS) } case *engine.VideoFrame: for _, pack := range v.RTP { - p.Client.WritePacketRTP(p.videoTrackId, &pack.Packet) + p.Client.WritePacketRTP(p.videoTrackId, &pack.Packet, v.DTS == v.PTS) } default: p.RTSPSubscriber.OnEvent(event) @@ -88,8 +87,8 @@ func (p *RTSPPusher) Connect() error { p.Transport = gortsplib.TransportTCP } p.Client = &gortsplib.Client{ - ReadBufferSize: rtspConfig.ReadBufferSize, - Transport: &p.Transport, + ReadBufferCount: rtspConfig.ReadBufferSize, + Transport: &p.Transport, } // parse URL u, err := base.ParseURL(p.RemoteURL) diff --git a/subscriber.go b/subscriber.go index e8afa4d..022cd48 100644 --- a/subscriber.go +++ b/subscriber.go @@ -3,6 +3,7 @@ package rtsp import ( "github.com/aler9/gortsplib" "github.com/aler9/gortsplib/pkg/aac" + "go.uber.org/zap" . "m7s.live/engine/v4" "m7s.live/engine/v4/codec" "m7s.live/engine/v4/track" @@ -35,9 +36,11 @@ func (s *RTSPSubscriber) OnEvent(event any) { case codec.CodecID_AAC: var mpegConf aac.MPEG4AudioConfig mpegConf.Decode(v.GetDecoderConfiguration().Raw) - if atrack, err := gortsplib.NewTrackAAC(97, int(mpegConf.Type), mpegConf.SampleRate, mpegConf.ChannelCount, mpegConf.AOTSpecificConfig); err == nil { + if atrack, err := gortsplib.NewTrackAAC(97, int(mpegConf.Type), mpegConf.SampleRate, mpegConf.ChannelCount, mpegConf.AOTSpecificConfig, 13, 3, 3); err == nil { s.audioTrackId = len(s.tracks) s.tracks = append(s.tracks, atrack) + } else { + v.Stream.Error("error creating AAC track", zap.Error(err)) } case codec.CodecID_PCMA: s.audioTrackId = len(s.tracks) @@ -51,11 +54,11 @@ func (s *RTSPSubscriber) OnEvent(event any) { s.stream = gortsplib.NewServerStream(s.tracks) case *AudioFrame: for _, pack := range v.RTP { - s.stream.WritePacketRTP(s.audioTrackId, &pack.Packet) + s.stream.WritePacketRTP(s.audioTrackId, &pack.Packet, v.PTS == v.DTS) } case *VideoFrame: for _, pack := range v.RTP { - s.stream.WritePacketRTP(s.videoTrackId, &pack.Packet) + s.stream.WritePacketRTP(s.videoTrackId, &pack.Packet, v.PTS == v.DTS) } default: s.Subscriber.OnEvent(event)