From f7ea9a6b2d2eedb7f6bd3f63ee98cebc169e0f25 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:06:18 +0100 Subject: [PATCH] rtsp server: check validity of announced tracks --- internal/core/rtsp_session.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/internal/core/rtsp_session.go b/internal/core/rtsp_session.go index e30ef983..00feeebe 100644 --- a/internal/core/rtsp_session.go +++ b/internal/core/rtsp_session.go @@ -125,6 +125,35 @@ func (s *rtspSession) onClose(err error) { // onAnnounce is called by rtspServer. func (s *rtspSession) onAnnounce(c *rtspConn, ctx *gortsplib.ServerHandlerOnAnnounceCtx) (*base.Response, error) { + for i, track := range ctx.Tracks { + if track.IsH264() { + _, err := track.ExtractConfigH264() + if err != nil { + return &base.Response{ + StatusCode: base.StatusBadRequest, + }, fmt.Errorf("track %d is not valid", i+1) + } + } + + if track.IsAAC() { + _, err := track.ExtractConfigAAC() + if err != nil { + return &base.Response{ + StatusCode: base.StatusBadRequest, + }, fmt.Errorf("track %d is not valid", i+1) + } + } + + if track.IsOpus() { + _, err := track.ExtractConfigOpus() + if err != nil { + return &base.Response{ + StatusCode: base.StatusBadRequest, + }, fmt.Errorf("track %d is not valid", i+1) + } + } + } + res := s.pathManager.onPublisherAnnounce(pathPublisherAnnounceReq{ Author: s, PathName: ctx.Path,