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
const (
ModeUnknown Mode = iota
ModeClientProducer
ModeUnknown Mode = iota
ModeClientProducer // conn act as RTSP client that receive data from RTSP server (ex. camera)
ModeServerUnknown
ModeServerProducer
ModeServerConsumer
ModeServerProducer // conn act as RTSP server that reseive data from RTSP client (ex. ffmpeg output)
ModeServerConsumer // conn act as RTSP server that send data to RTSP client (ex. ffmpeg input)
)
type State byte
+15 -5
View File
@@ -11,9 +11,9 @@ import (
)
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)
case streamer.DirectionSendonly:
case ModeServerConsumer:
i := len(c.tracks)
channelID := byte(i << 1)
@@ -43,11 +43,21 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.
return track
case streamer.DirectionRecvonly:
panic("not implemented")
// camera with backchannel support
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(