Skip to content

Commit

Permalink
Add support allowed_media_types for RTSP server #1054
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexxIT committed May 6, 2024
1 parent 09109e7 commit 290e011
Showing 1 changed file with 37 additions and 1 deletion.
38 changes: 37 additions & 1 deletion pkg/rtsp/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,19 @@ func (c *Conn) Accept() error {
if strings.HasPrefix(tr, transport) {
c.session = core.RandString(8, 10)
c.state = StateSetup
res.Header.Set("Transport", tr[:len(transport)+3])

if c.mode == core.ModePassiveConsumer {
if i := reqTrackID(req); i >= 0 && i < len(c.senders) {
// mark sender as SETUP
c.senders[i].Media.ID = MethodSetup
tr = fmt.Sprintf("RTP/AVP/TCP;unicast;interleaved=%d-%d", i*2, i*2+1)
res.Header.Set("Transport", tr)
} else {
res.Status = "400 Bad Request"
}
} else {
res.Header.Set("Transport", tr[:len(transport)+3])
}
} else {
res.Status = "461 Unsupported transport"
}
Expand All @@ -156,6 +168,15 @@ func (c *Conn) Accept() error {
}

case MethodRecord, MethodPlay:
if c.mode == core.ModePassiveConsumer {
// stop unconfigured senders
for _, track := range c.senders {
if track.Media.ID != MethodSetup {
track.Close()
}
}
}

res := &tcp.Response{Request: req}
err = c.WriteResponse(res)
c.playOK = true
Expand All @@ -172,3 +193,18 @@ func (c *Conn) Accept() error {
}
}
}

func reqTrackID(req *tcp.Request) int {
var s string
if req.URL.RawQuery != "" {
s = req.URL.RawQuery
} else {
s = req.URL.Path
}
if i := strings.LastIndexByte(s, '='); i > 0 {
if i, err := strconv.Atoi(s[i+1:]); err == nil {
return i
}
}
return -1
}

0 comments on commit 290e011

Please sign in to comment.