mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: cleanup
This commit is contained in:
35
client.go
35
client.go
@@ -580,25 +580,31 @@ func (c *Client) run() {
|
|||||||
|
|
||||||
c.ctxCancel()
|
c.ctxCancel()
|
||||||
|
|
||||||
c.doClose(true)
|
c.doClose()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) doClose(isClosing bool) {
|
func (c *Client) doClose() {
|
||||||
if c.state == clientStatePlay || c.state == clientStateRecord {
|
if c.state == clientStatePlay || c.state == clientStateRecord {
|
||||||
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
||||||
// stop UDP listeners
|
|
||||||
for _, cct := range c.tracks {
|
for _, cct := range c.tracks {
|
||||||
cct.udpRTPListener.stop()
|
cct.udpRTPListener.stop()
|
||||||
cct.udpRTCPListener.stop()
|
cct.udpRTCPListener.stop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c.playRecordStop(isClosing)
|
c.playRecordStop(true)
|
||||||
|
|
||||||
c.do(&base.Request{
|
c.do(&base.Request{
|
||||||
Method: base.Teardown,
|
Method: base.Teardown,
|
||||||
URL: c.streamBaseURL,
|
URL: c.streamBaseURL,
|
||||||
}, true)
|
}, true)
|
||||||
|
|
||||||
|
c.conn.Close()
|
||||||
|
c.conn = nil
|
||||||
|
} else if c.conn != nil {
|
||||||
|
c.connCloserStop()
|
||||||
|
c.conn.Close()
|
||||||
|
c.conn = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, track := range c.tracks {
|
for _, track := range c.tracks {
|
||||||
@@ -607,16 +613,10 @@ func (c *Client) doClose(isClosing bool) {
|
|||||||
track.udpRTCPListener.close()
|
track.udpRTCPListener.close()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.conn != nil {
|
|
||||||
c.connCloserStop()
|
|
||||||
c.conn.Close()
|
|
||||||
c.conn = nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) reset() {
|
func (c *Client) reset() {
|
||||||
c.doClose(false)
|
c.doClose()
|
||||||
|
|
||||||
c.state = clientStateInitial
|
c.state = clientStateInitial
|
||||||
c.session = ""
|
c.session = ""
|
||||||
@@ -877,8 +877,10 @@ func (c *Client) connOpen() error {
|
|||||||
func (c *Client) connCloserStart() {
|
func (c *Client) connCloserStart() {
|
||||||
c.connCloserTerminate = make(chan struct{})
|
c.connCloserTerminate = make(chan struct{})
|
||||||
c.connCloserDone = make(chan struct{})
|
c.connCloserDone = make(chan struct{})
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
defer close(c.connCloserDone)
|
defer close(c.connCloserDone)
|
||||||
|
|
||||||
select {
|
select {
|
||||||
case <-c.ctx.Done():
|
case <-c.ctx.Done():
|
||||||
c.conn.Close()
|
c.conn.Close()
|
||||||
@@ -889,11 +891,9 @@ func (c *Client) connCloserStart() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) connCloserStop() {
|
func (c *Client) connCloserStop() {
|
||||||
if c.connCloserDone != nil {
|
close(c.connCloserTerminate)
|
||||||
close(c.connCloserTerminate)
|
<-c.connCloserDone
|
||||||
<-c.connCloserDone
|
c.connCloserDone = nil
|
||||||
c.connCloserDone = nil
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) do(req *base.Request, skipResponse bool) (*base.Response, error) {
|
func (c *Client) do(req *base.Request, skipResponse bool) (*base.Response, error) {
|
||||||
@@ -1628,7 +1628,6 @@ func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Resp
|
|||||||
|
|
||||||
if res.StatusCode != base.StatusOK {
|
if res.StatusCode != base.StatusOK {
|
||||||
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
||||||
// stop UDP listeners
|
|
||||||
for _, cct := range c.tracks {
|
for _, cct := range c.tracks {
|
||||||
cct.udpRTPListener.stop()
|
cct.udpRTPListener.stop()
|
||||||
cct.udpRTCPListener.stop()
|
cct.udpRTCPListener.stop()
|
||||||
@@ -1704,7 +1703,6 @@ func (c *Client) doRecord() (*base.Response, error) {
|
|||||||
|
|
||||||
if res.StatusCode != base.StatusOK {
|
if res.StatusCode != base.StatusOK {
|
||||||
if *c.protocol == TransportUDP {
|
if *c.protocol == TransportUDP {
|
||||||
// stop UDP listeners
|
|
||||||
for _, cct := range c.tracks {
|
for _, cct := range c.tracks {
|
||||||
cct.udpRTPListener.stop()
|
cct.udpRTPListener.stop()
|
||||||
cct.udpRTCPListener.stop()
|
cct.udpRTCPListener.stop()
|
||||||
@@ -1749,7 +1747,6 @@ func (c *Client) doPause() (*base.Response, error) {
|
|||||||
c.playRecordStop(false)
|
c.playRecordStop(false)
|
||||||
|
|
||||||
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
if *c.protocol == TransportUDP || *c.protocol == TransportUDPMulticast {
|
||||||
// stop UDP listeners
|
|
||||||
for _, cct := range c.tracks {
|
for _, cct := range c.tracks {
|
||||||
cct.udpRTPListener.stop()
|
cct.udpRTPListener.stop()
|
||||||
cct.udpRTCPListener.stop()
|
cct.udpRTCPListener.stop()
|
||||||
|
Reference in New Issue
Block a user