Improve RTSP consumer logic

This commit is contained in:
Alexey Khit
2023-02-17 09:21:43 +03:00
parent e43b1e4ab6
commit c1b810a5fe
2 changed files with 19 additions and 9 deletions
+4 -4
View File
@@ -35,11 +35,11 @@ const (
type Mode byte type Mode byte
const ( const (
ModeUnknown Mode = iota ModeUnknown Mode = iota
ModeClientProducer ModeClientProducer // conn act as RTSP client that receive data from RTSP server (ex. camera)
ModeServerUnknown ModeServerUnknown
ModeServerProducer ModeServerProducer // conn act as RTSP server that reseive data from RTSP client (ex. ffmpeg output)
ModeServerConsumer ModeServerConsumer // conn act as RTSP server that send data to RTSP client (ex. ffmpeg input)
) )
type State byte type State byte
+15 -5
View File
@@ -11,9 +11,9 @@ import (
) )
func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.Track { func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.Track {
switch track.Direction { switch c.mode {
// send our track to RTSP consumer (ex. FFmpeg) // send our track to RTSP consumer (ex. FFmpeg)
case streamer.DirectionSendonly: case ModeServerConsumer:
i := len(c.tracks) i := len(c.tracks)
channelID := byte(i << 1) channelID := byte(i << 1)
@@ -43,11 +43,21 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.
return track return track
case streamer.DirectionRecvonly: // camera with backchannel support
panic("not implemented") case ModeClientProducer:
consCodec := media.MatchCodec(track.Codec)
consTrack := c.GetTrack(media, consCodec)
if consTrack == nil {
return nil
}
return track.Bind(func(packet *rtp.Packet) error {
return consTrack.WriteRTP(packet)
})
} }
panic("wrong direction") println("WARNING: rtsp: AddTrack to wrong mode")
return nil
} }
func (c *Conn) bindTrack( func (c *Conn) bindTrack(