diff --git a/internal/rtsp/rtsp.go b/internal/rtsp/rtsp.go index 5c023b71..4c9ca162 100644 --- a/internal/rtsp/rtsp.go +++ b/internal/rtsp/rtsp.go @@ -8,7 +8,6 @@ import ( "github.com/AlexxIT/go2rtc/internal/app" "github.com/AlexxIT/go2rtc/internal/streams" - "github.com/AlexxIT/go2rtc/pkg/aac" "github.com/AlexxIT/go2rtc/pkg/core" "github.com/AlexxIT/go2rtc/pkg/rtsp" "github.com/AlexxIT/go2rtc/pkg/tcp" @@ -186,11 +185,11 @@ func tcpHandler(conn *rtsp.Conn) { } } - if query.Get("backchannel") == "1" { - conn.Medias = append(conn.Medias, &core.Media{ - Kind: core.KindAudio, - Direction: core.DirectionRecvonly, - Codecs: []*core.Codec{ + if query.Get("backchannel") == "1" { + conn.Medias = append(conn.Medias, &core.Media{ + Kind: core.KindAudio, + Direction: core.DirectionRecvonly, + Codecs: []*core.Codec{ {Name: core.CodecOpus, ClockRate: 48000, Channels: 2}, {Name: core.CodecPCM, ClockRate: 16000}, {Name: core.CodecPCMA, ClockRate: 16000}, @@ -198,10 +197,9 @@ func tcpHandler(conn *rtsp.Conn) { {Name: core.CodecPCM, ClockRate: 8000}, {Name: core.CodecPCMA, ClockRate: 8000}, {Name: core.CodecPCMU, ClockRate: 8000}, - {Name: core.CodecAAC, ClockRate: 16000, FmtpLine: aac.FMTP + "1408"}, - }, - }) - } + }, + }) + } if s := query.Get("pkt_size"); s != "" { conn.PacketSize = uint16(core.Atoi(s)) diff --git a/pkg/rtsp/producer.go b/pkg/rtsp/producer.go index 323d9197..3d818b62 100644 --- a/pkg/rtsp/producer.go +++ b/pkg/rtsp/producer.go @@ -16,43 +16,38 @@ func (c *Conn) GetTrack(media *core.Media, codec *core.Codec) (*core.Receiver, e } } - switch c.mode { - case core.ModeActiveProducer: - c.stateMu.Lock() - defer c.stateMu.Unlock() + c.stateMu.Lock() + defer c.stateMu.Unlock() + var channel byte + + switch c.mode { + case core.ModeActiveProducer: if c.state == StatePlay { if err := c.Reconnect(); err != nil { return nil, err } } - channel, err := c.SetupMedia(media) + var err error + channel, err = c.SetupMedia(media) if err != nil { return nil, err } c.state = StateSetup + case core.ModePassiveConsumer: + // Backchannel + channel = byte(len(c.Senders)) * 2 + default: + return nil, errors.New("rtsp: wrong mode for GetTrack") + } - track := core.NewReceiver(media, codec) - track.ID = channel - c.Receivers = append(c.Receivers, track) + track := core.NewReceiver(media, codec) + track.ID = channel + c.Receivers = append(c.Receivers, track) - return track, nil - case core.ModePassiveConsumer: - // Backchannel - c.stateMu.Lock() - defer c.stateMu.Unlock() - - channel := byte(len(c.Senders)) * 2 - track := core.NewReceiver(media, codec) - track.ID = channel - c.Receivers = append(c.Receivers, track) - - return track, nil - default: - return nil, errors.New("rtsp: wrong mode for GetTrack") - } + return track, nil } func (c *Conn) Start() (err error) { diff --git a/pkg/rtsp/server.go b/pkg/rtsp/server.go index df2ebdb5..f4aea614 100644 --- a/pkg/rtsp/server.go +++ b/pkg/rtsp/server.go @@ -164,20 +164,14 @@ func (c *Conn) Accept() error { c.state = StateSetup if c.mode == core.ModePassiveConsumer { - trackID := reqTrackID(req) - - if trackID >= 0 { - if trackID < len(c.Senders) { - c.Senders[trackID].Media.ID = MethodSetup - tr = fmt.Sprintf("%d-%d", trackID*2, trackID*2+1) - res.Header.Set("Transport", transport+tr) - } else if trackID >= len(c.Senders) && trackID < len(c.Senders)+len(c.Receivers) { - c.Receivers[trackID-len(c.Senders)].Media.ID = MethodSetup - tr = fmt.Sprintf("%d-%d", trackID*2, trackID*2+1) - res.Header.Set("Transport", transport+tr) + if i := reqTrackID(req); i >= 0 && i < len(c.Senders)+len(c.Receivers) { + if i < len(c.Senders) { + c.Senders[i].Media.ID = MethodSetup } else { - res.Status = "400 Bad Request" + c.Receivers[i-len(c.Senders)].Media.ID = MethodSetup } + tr = fmt.Sprintf("%d-%d", i*2, i*2+1) + res.Header.Set("Transport", transport+tr) } else { res.Status = "400 Bad Request" }