Improve RTSP consumer logic
This commit is contained in:
+4
-4
@@ -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
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user