Browse Source

new option streamDeadAfter

pull/31/head v0.8.7
aler9 6 years ago
parent
commit
f01bb9685f
  1. 4
      conf.go
  2. 2
      conf.yml
  3. 5
      server-client.go
  4. 5
      streamer.go

4
conf.go

@ -34,6 +34,7 @@ type conf struct {
PostScript string `yaml:"postScript"` PostScript string `yaml:"postScript"`
ReadTimeout time.Duration `yaml:"readTimeout"` ReadTimeout time.Duration `yaml:"readTimeout"`
WriteTimeout time.Duration `yaml:"writeTimeout"` WriteTimeout time.Duration `yaml:"writeTimeout"`
StreamDeadAfter time.Duration `yaml:"streamDeadAfter"`
AuthMethods []string `yaml:"authMethods"` AuthMethods []string `yaml:"authMethods"`
authMethodsParsed []gortsplib.AuthMethod authMethodsParsed []gortsplib.AuthMethod
Pprof bool `yaml:"pprof"` Pprof bool `yaml:"pprof"`
@ -120,6 +121,9 @@ func loadConf(fpath string, stdin io.Reader) (*conf, error) {
if conf.WriteTimeout == 0 { if conf.WriteTimeout == 0 {
conf.WriteTimeout = 5 * time.Second conf.WriteTimeout = 5 * time.Second
} }
if conf.StreamDeadAfter == 0 {
conf.StreamDeadAfter = 15 * time.Second
}
if len(conf.AuthMethods) == 0 { if len(conf.AuthMethods) == 0 {
conf.AuthMethods = []string{"basic", "digest"} conf.AuthMethods = []string{"basic", "digest"}

2
conf.yml

@ -15,6 +15,8 @@ postScript:
readTimeout: 5s readTimeout: 5s
# timeout of write operations # timeout of write operations
writeTimeout: 5s writeTimeout: 5s
# time after which a stream is considered dead
streamDeadAfter: 15s
# supported authentication methods # supported authentication methods
authMethods: [basic, digest] authMethods: [basic, digest]
# enable pprof on port 9999 to monitor performance # enable pprof on port 9999 to monitor performance

5
server-client.go

@ -15,7 +15,6 @@ import (
const ( const (
_CLIENT_CHECK_STREAM_INTERVAL = 5 * time.Second _CLIENT_CHECK_STREAM_INTERVAL = 5 * time.Second
_CLIENT_STREAM_DEAD_AFTER = 15 * time.Second
_CLIENT_RECEIVER_REPORT_INTERVAL = 10 * time.Second _CLIENT_RECEIVER_REPORT_INTERVAL = 10 * time.Second
) )
@ -332,7 +331,7 @@ func (c *serverClient) runRecord() bool {
case <-checkStreamTicker.C: case <-checkStreamTicker.C:
for trackId := range c.streamTracks { for trackId := range c.streamTracks {
if time.Since(c.rtcpReceivers[trackId].lastFrameTime()) >= _CLIENT_STREAM_DEAD_AFTER { if time.Since(c.rtcpReceivers[trackId].lastFrameTime()) >= c.p.conf.StreamDeadAfter {
c.log("ERR: stream is dead") c.log("ERR: stream is dead")
c.conn.NetConn().Close() c.conn.NetConn().Close()
<-readDone <-readDone
@ -388,7 +387,7 @@ func (c *serverClient) runRecord() bool {
case <-checkStreamTicker.C: case <-checkStreamTicker.C:
for trackId := range c.streamTracks { for trackId := range c.streamTracks {
if time.Since(c.rtcpReceivers[trackId].lastFrameTime()) >= _CLIENT_STREAM_DEAD_AFTER { if time.Since(c.rtcpReceivers[trackId].lastFrameTime()) >= c.p.conf.StreamDeadAfter {
c.log("ERR: stream is dead") c.log("ERR: stream is dead")
c.conn.NetConn().Close() c.conn.NetConn().Close()
<-readDone <-readDone

5
streamer.go

@ -16,7 +16,6 @@ import (
const ( const (
_STREAMER_RETRY_INTERVAL = 5 * time.Second _STREAMER_RETRY_INTERVAL = 5 * time.Second
_STREAMER_CHECK_STREAM_INTERVAL = 5 * time.Second _STREAMER_CHECK_STREAM_INTERVAL = 5 * time.Second
_STREAMER_STREAM_DEAD_AFTER = 15 * time.Second
_STREAMER_KEEPALIVE_INTERVAL = 60 * time.Second _STREAMER_KEEPALIVE_INTERVAL = 60 * time.Second
_STREAMER_RECEIVER_REPORT_INTERVAL = 10 * time.Second _STREAMER_RECEIVER_REPORT_INTERVAL = 10 * time.Second
) )
@ -431,7 +430,7 @@ outer:
case <-checkStreamTicker.C: case <-checkStreamTicker.C:
for trackId := range s.clientSdpParsed.Medias { for trackId := range s.clientSdpParsed.Medias {
if time.Since(s.rtcpReceivers[trackId].lastFrameTime()) >= _STREAMER_STREAM_DEAD_AFTER { if time.Since(s.rtcpReceivers[trackId].lastFrameTime()) >= s.p.conf.StreamDeadAfter {
s.log("ERR: stream is dead") s.log("ERR: stream is dead")
ret = true ret = true
break outer break outer
@ -634,7 +633,7 @@ outer2:
case <-checkStreamTicker.C: case <-checkStreamTicker.C:
for trackId := range s.clientSdpParsed.Medias { for trackId := range s.clientSdpParsed.Medias {
if time.Since(s.rtcpReceivers[trackId].lastFrameTime()) >= _STREAMER_STREAM_DEAD_AFTER { if time.Since(s.rtcpReceivers[trackId].lastFrameTime()) >= s.p.conf.StreamDeadAfter {
s.log("ERR: stream is dead") s.log("ERR: stream is dead")
ret = true ret = true
break outer2 break outer2

Loading…
Cancel
Save