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