diff --git a/README.md b/README.md index 93d06208..fd6ba845 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,8 @@ Flags: --rtsp-port=8554 port of the RTSP TCP listener --rtp-port=8000 port of the RTP UDP listener --rtcp-port=8001 port of the RTCP UDP listener + --read-timeout=5s timeout for read operations + --write-timeout=5s timeout for write operations --publish-user="" optional username required to publish --publish-pass="" optional password required to publish --pre-script="" optional script to run on client connect diff --git a/main.go b/main.go index c2a83768..ffe0c423 100644 --- a/main.go +++ b/main.go @@ -13,11 +13,6 @@ import ( var Version string = "v0.0.0" -const ( - _READ_TIMEOUT = 5 * time.Second - _WRITE_TIMEOUT = 5 * time.Second -) - type trackFlow int const ( @@ -50,6 +45,8 @@ type args struct { rtspPort int rtpPort int rtcpPort int + readTimeout time.Duration + writeTimeout time.Duration publishUser string publishPass string preScript string @@ -77,6 +74,12 @@ func newProgram(args args) (*program, error) { if args.rtcpPort == 0 { args.rtcpPort = 8001 } + if args.readTimeout == time.Duration(0) { + args.readTimeout = 5 * time.Second + } + if args.writeTimeout == time.Duration(0) { + args.writeTimeout = 5 * time.Second + } if args.version == true { fmt.Println("rtsp-simple-server " + Version) @@ -170,6 +173,8 @@ func main() { argRtspPort := kingpin.Flag("rtsp-port", "port of the RTSP TCP listener").Default("8554").Int() argRtpPort := kingpin.Flag("rtp-port", "port of the RTP UDP listener").Default("8000").Int() argRtcpPort := kingpin.Flag("rtcp-port", "port of the RTCP UDP listener").Default("8001").Int() + argReadTimeout := kingpin.Flag("read-timeout", "timeout for read operations").Default("5s").Duration() + argWriteTimeout := kingpin.Flag("write-timeout", "timeout for write operations").Default("5s").Duration() argPublishUser := kingpin.Flag("publish-user", "optional username required to publish").Default("").String() argPublishPass := kingpin.Flag("publish-pass", "optional password required to publish").Default("").String() argPreScript := kingpin.Flag("pre-script", "optional script to run on client connect").Default("").String() @@ -183,6 +188,8 @@ func main() { rtspPort: *argRtspPort, rtpPort: *argRtpPort, rtcpPort: *argRtcpPort, + readTimeout: *argReadTimeout, + writeTimeout: *argWriteTimeout, publishUser: *argPublishUser, publishPass: *argPublishPass, preScript: *argPreScript, diff --git a/server-client.go b/server-client.go index 7ee3b270..85f173f7 100644 --- a/server-client.go +++ b/server-client.go @@ -122,8 +122,8 @@ func newServerClient(p *program, nconn net.Conn) *serverClient { p: p, conn: gortsplib.NewConnServer(gortsplib.ConnServerConf{ NConn: nconn, - ReadTimeout: _READ_TIMEOUT, - WriteTimeout: _WRITE_TIMEOUT, + ReadTimeout: p.args.readTimeout, + WriteTimeout: p.args.writeTimeout, }), state: _CLIENT_STATE_STARTING, write: make(chan *gortsplib.InterleavedFrame), diff --git a/server-udpl.go b/server-udpl.go index cd1da2c5..aaf00a60 100644 --- a/server-udpl.go +++ b/server-udpl.go @@ -52,7 +52,7 @@ func (l *serverUdpListener) log(format string, args ...interface{}) { func (l *serverUdpListener) run() { go func() { for w := range l.write { - l.nconn.SetWriteDeadline(time.Now().Add(_WRITE_TIMEOUT)) + l.nconn.SetWriteDeadline(time.Now().Add(l.p.args.writeTimeout)) l.nconn.WriteTo(w.buf, w.addr) } }()