mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
client: send TEARDOWN even when PLAY or RECORD have not been sent yet
This commit is contained in:
14
client.go
14
client.go
@@ -529,19 +529,22 @@ func (c *Client) runInner() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) doClose() {
|
func (c *Client) doClose() {
|
||||||
|
if c.state != clientStatePlay && c.state != clientStateRecord && c.conn != nil {
|
||||||
|
c.connCloserStop()
|
||||||
|
}
|
||||||
|
|
||||||
if c.state == clientStatePlay || c.state == clientStateRecord {
|
if c.state == clientStatePlay || c.state == clientStateRecord {
|
||||||
c.playRecordStop(true)
|
c.playRecordStop(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.baseURL != nil {
|
||||||
c.do(&base.Request{
|
c.do(&base.Request{
|
||||||
Method: base.Teardown,
|
Method: base.Teardown,
|
||||||
URL: c.baseURL,
|
URL: c.baseURL,
|
||||||
}, true, false)
|
}, true, false)
|
||||||
|
}
|
||||||
|
|
||||||
c.nconn.Close()
|
if c.nconn != nil {
|
||||||
c.nconn = nil
|
|
||||||
c.conn = nil
|
|
||||||
} else if c.nconn != nil {
|
|
||||||
c.connCloserStop()
|
|
||||||
c.nconn.Close()
|
c.nconn.Close()
|
||||||
c.nconn = nil
|
c.nconn = nil
|
||||||
c.conn = nil
|
c.conn = nil
|
||||||
@@ -1259,6 +1262,7 @@ func (c *Client) doSetup(
|
|||||||
// switch transport automatically
|
// switch transport automatically
|
||||||
if c.effectiveTransport == nil &&
|
if c.effectiveTransport == nil &&
|
||||||
c.Transport == nil {
|
c.Transport == nil {
|
||||||
|
c.baseURL = baseURL
|
||||||
return c.trySwitchingProtocol2(medi, baseURL)
|
return c.trySwitchingProtocol2(medi, baseURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1128,6 +1128,15 @@ func TestClientPlayAutomaticProtocol(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err = co.ReadRequest()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.Teardown, req.Method)
|
||||||
|
|
||||||
|
err = co.WriteResponse(&base.Response{
|
||||||
|
StatusCode: base.StatusOK,
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = co.ReadRequest()
|
_, err = co.ReadRequest()
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}()
|
}()
|
||||||
|
@@ -103,7 +103,6 @@ func TestClientSession(t *testing.T) {
|
|||||||
req, err = conn.ReadRequest()
|
req, err = conn.ReadRequest()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.Describe, req.Method)
|
require.Equal(t, base.Describe, req.Method)
|
||||||
|
|
||||||
require.Equal(t, base.HeaderValue{"123456"}, req.Header["Session"])
|
require.Equal(t, base.HeaderValue{"123456"}, req.Header["Session"])
|
||||||
|
|
||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
|
Reference in New Issue
Block a user