From ce2edddbebd9b51114cb644307aed41731509d37 Mon Sep 17 00:00:00 2001 From: Dimitrii Lopanov Date: Fri, 26 Jun 2020 08:32:49 +0300 Subject: [PATCH] handle redirecting via 302 code --- format/rtsp/client.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/format/rtsp/client.go b/format/rtsp/client.go index 907afbd..0238c62 100644 --- a/format/rtsp/client.go +++ b/format/rtsp/client.go @@ -310,6 +310,11 @@ func (self *Client) handleResp(res *Response) (err error) { self.session = fields[0] } } + if res.StatusCode == 302 { + if err = self.handle302(res); err != nil { + return + } + } if res.StatusCode == 401 { if err = self.handle401(res); err != nil { return @@ -318,6 +323,31 @@ func (self *Client) handleResp(res *Response) (err error) { return } +func (self *Client) handle302(res *Response) (err error) { + /* + RTSP/1.0 200 OK + CSeq: 302 + */ + newLocation := res.Headers.Get("Location") + fmt.Printf("\tRedirecting stream to other location: %s\n", newLocation) + + err = self.Close() + if err != nil { + return err + } + + newConnect, err := Dial(newLocation) + if err != nil { + return err + } + + self.requestUri = newLocation + self.conn = newConnect.conn + self.brconn = newConnect.brconn + + return err +} + func (self *Client) handle401(res *Response) (err error) { /* RTSP/1.0 401 Unauthorized