diff --git a/main.go b/main.go index 6fef8441..05819743 100644 --- a/main.go +++ b/main.go @@ -16,7 +16,7 @@ type program struct { rtspPort int rtpPort int rtcpPort int - mutex sync.Mutex + mutex sync.RWMutex rtspl *rtspListener rtpl *udpListener rtcpl *udpListener @@ -36,8 +36,8 @@ func newProgram(rtspPort int, rtpPort int, rtcpPort int) (*program, error) { var err error p.rtpl, err = newUdpListener(rtpPort, "RTP", func(l *udpListener, buf []byte) { - p.mutex.Lock() - defer p.mutex.Unlock() + p.mutex.RLock() + defer p.mutex.RUnlock() for c := range p.clients { if c.state == "PLAY" { l.nconn.WriteTo(buf, &net.UDPAddr{ @@ -52,8 +52,8 @@ func newProgram(rtspPort int, rtpPort int, rtcpPort int) (*program, error) { } p.rtcpl, err = newUdpListener(rtcpPort, "RTCP", func(l *udpListener, buf []byte) { - p.mutex.Lock() - defer p.mutex.Unlock() + p.mutex.RLock() + defer p.mutex.RUnlock() for c := range p.clients { if c.state == "PLAY" { l.nconn.WriteTo(buf, &net.UDPAddr{ diff --git a/rtsp_client.go b/rtsp_client.go index 4f73223a..5ab7c886 100644 --- a/rtsp_client.go +++ b/rtsp_client.go @@ -125,8 +125,8 @@ func (c *rtspClient) run(wg sync.WaitGroup) { } sdp, err := func() ([]byte, error) { - c.p.mutex.Lock() - defer c.p.mutex.Unlock() + c.p.mutex.RLock() + defer c.p.mutex.RUnlock() if len(c.p.streamSdp) == 0 { return nil, fmt.Errorf("no one is streaming")