diff --git a/core/ffmpeg/fileWriterReceiverService.go b/core/ffmpeg/fileWriterReceiverService.go index febfd261f..b2c4bf362 100644 --- a/core/ffmpeg/fileWriterReceiverService.go +++ b/core/ffmpeg/fileWriterReceiverService.go @@ -89,7 +89,7 @@ func (s *FileWriterReceiverService) fileWritten(path string) { utils.StartPerformanceMonitor(performanceMonitorKey) s.callbacks.SegmentWritten(path) - if averagePerformance != 0 && averagePerformance > float64(config.Config.GetVideoSegmentSecondsLength()) { + if averagePerformance != 0 && averagePerformance > float64(config.Config.GetVideoSegmentSecondsLength())*1.1 { if !_inWarningState { log.Warnln("slow encoding for variant", index, "if this continues you may see buffering or errors. troubleshoot this issue by visiting https://owncast.online/docs/troubleshooting/") _inWarningState = true diff --git a/core/stats.go b/core/stats.go index d7392ae7a..ae787456a 100644 --- a/core/stats.go +++ b/core/stats.go @@ -48,7 +48,7 @@ func IsStreamConnected() bool { // Kind of a hack. It takes a handful of seconds between a RTMP connection and when HLS data is available. // So account for that with an artificial buffer of four segments. timeSinceLastConnected := time.Since(_stats.LastConnectTime.Time).Seconds() - if timeSinceLastConnected < float64(config.Config.GetVideoSegmentSecondsLength())*2.0 { + if timeSinceLastConnected < float64(config.Config.GetVideoSegmentSecondsLength())*2.3 { return false } diff --git a/utils/performanceTimer.go b/utils/performanceTimer.go index 2a4655f82..78dd09b20 100644 --- a/utils/performanceTimer.go +++ b/utils/performanceTimer.go @@ -13,8 +13,8 @@ var _durationStorage = make(map[string][]float64) // StartPerformanceMonitor will keep track of the start time of this event. func StartPerformanceMonitor(key string) { - if len(_durationStorage[key]) > 30 { - _durationStorage[key] = removeHighAndLow(_durationStorage[key]) + if len(_durationStorage[key]) > 20 { + _durationStorage[key] = removeHighValue(_durationStorage[key]) } _pointsInTime[key] = time.Now() } @@ -28,16 +28,16 @@ func GetAveragePerformance(key string) float64 { delta := time.Since(timestamp).Seconds() _durationStorage[key] = append(_durationStorage[key], delta) - if len(_durationStorage[key]) < 10 { + if len(_durationStorage[key]) < 8 { return 0 } - _durationStorage[key] = removeHighAndLow(_durationStorage[key]) + _durationStorage[key] = removeHighValue(_durationStorage[key]) return avg(_durationStorage[key]) } -func removeHighAndLow(values []float64) []float64 { +func removeHighValue(values []float64) []float64 { sort.Float64s(values) - return values[1 : len(values)-1] + return values[:len(values)-1] } func avg(values []float64) float64 {