From 9887abc51a4c049d2067333a681528238c34a7a8 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Tue, 15 Dec 2020 21:25:40 +0100 Subject: [PATCH] fix freeze --- go.mod | 2 +- go.sum | 4 ++-- internal/client/client.go | 41 ++++++++++----------------------------- 3 files changed, 13 insertions(+), 34 deletions(-) diff --git a/go.mod b/go.mod index ce1b5f9e..7cc0b3de 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.15 require ( github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect - github.com/aler9/gortsplib v0.0.0-20201214220650-27636bc8102d + github.com/aler9/gortsplib v0.0.0-20201215190704-e5b126007572 github.com/davecgh/go-spew v1.1.1 // indirect github.com/fsnotify/fsnotify v1.4.9 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 diff --git a/go.sum b/go.sum index 8011b1e3..ed71fd80 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/aler9/gortsplib v0.0.0-20201214220650-27636bc8102d h1:2ZoBLngSzfy/n4FawfA//Gbwu7xkIswOo7trGKtSZyU= -github.com/aler9/gortsplib v0.0.0-20201214220650-27636bc8102d/go.mod h1:8P09VjpiPJFyfkVosyF5/TY82jNwkMN165NS/7sc32I= +github.com/aler9/gortsplib v0.0.0-20201215190704-e5b126007572 h1:7tZCOaqiBURhVXE0xR6jNz6T7UX/LUKUKl0qsZBQwGU= +github.com/aler9/gortsplib v0.0.0-20201215190704-e5b126007572/go.mod h1:8P09VjpiPJFyfkVosyF5/TY82jNwkMN165NS/7sc32I= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= diff --git a/internal/client/client.go b/internal/client/client.go index 2096377a..f3bdd1df 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -113,8 +113,6 @@ type Client struct { streamTracks map[int]*streamTrack rtcpReceivers map[int]*rtcpreceiver.RtcpReceiver udpLastFrameTimes []*int64 - writeFrameEnable bool - writeFrameMutex sync.Mutex onReadCmd *externalcmd.Cmd onPublishCmd *externalcmd.Cmd @@ -775,10 +773,17 @@ func (c *Client) run() { switch c.state { case statePlay: + if c.streamProtocol == gortsplib.StreamProtocolTCP { + c.conn.EnableFrames(false) + } c.stopPlay() c.state = statePrePlay case stateRecord: + if c.streamProtocol == gortsplib.StreamProtocolTCP { + c.conn.EnableFrames(false) + c.conn.EnableReadTimeout(false) + } c.stopRecord() c.state = statePreRecord } @@ -951,10 +956,6 @@ func (c *Client) checkState(allowed map[state]struct{}) error { } func (c *Client) startPlay() { - if c.streamProtocol == gortsplib.StreamProtocolTCP { - c.writeFrameEnable = true - } - c.state = statePlay c.path.OnClientPlay(c) @@ -973,25 +974,11 @@ func (c *Client) startPlay() { } if c.streamProtocol == gortsplib.StreamProtocolTCP { - c.writeFrameMutex.Lock() - c.writeFrameEnable = true - c.writeFrameMutex.Unlock() - - c.conn.EnableReadFrames(true) - c.conn.EnableReadTimeout(false) + c.conn.EnableFrames(true) } } func (c *Client) stopPlay() { - if c.streamProtocol == gortsplib.StreamProtocolTCP { - c.conn.EnableReadFrames(false) - c.conn.EnableReadTimeout(false) - - c.writeFrameMutex.Lock() - c.writeFrameEnable = false - c.writeFrameMutex.Unlock() - } - if c.path.Conf().RunOnRead != "" { c.onReadCmd.Close() } @@ -1053,7 +1040,7 @@ func (c *Client) startRecord() { if c.streamProtocol == gortsplib.StreamProtocolUDP { go c.backgroundRecordUDP() } else { - c.conn.EnableReadFrames(true) + c.conn.EnableFrames(true) c.conn.EnableReadTimeout(true) go c.backgroundRecordTCP() } @@ -1068,10 +1055,6 @@ func (c *Client) stopRecord() { c.serverUDPRtp.RemovePublisher(c.ip(), track.rtpPort, c) c.serverUDPRtcp.RemovePublisher(c.ip(), track.rtcpPort, c) } - - } else { - c.conn.EnableReadFrames(false) - c.conn.EnableReadTimeout(false) } if c.path.Conf().RunOnPublish != "" { @@ -1173,11 +1156,7 @@ func (c *Client) OnReaderFrame(trackID int, streamType base.StreamType, buf []by } } else { - c.writeFrameMutex.Lock() - if c.writeFrameEnable { - c.conn.WriteFrame(trackID, streamType, buf) - } - c.writeFrameMutex.Unlock() + c.conn.WriteFrame(trackID, streamType, buf) } }