Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

segmenter: disallow more than six segments in three seconds

+19 -1
+19 -1
pkg/media/segmenter.go
··· 46 46 } 47 47 48 48 resetTimer := make(chan struct{}) 49 + segmentTimestamps := make([]time.Time, 0, 10) 49 50 50 51 go func() { 51 52 for { ··· 53 54 case <-ctx.Done(): 54 55 return 55 56 case <-resetTimer: 56 - continue 57 + now := time.Now() 58 + segmentTimestamps = append(segmentTimestamps, now) 59 + 60 + // Only keep events from the last 3 seconds 61 + cutoff := now.Add(-3 * time.Second) 62 + filtered := segmentTimestamps[:0] 63 + for _, t := range segmentTimestamps { 64 + if t.After(cutoff) { 65 + filtered = append(filtered, t) 66 + } 67 + } 68 + segmentTimestamps = filtered 69 + 70 + if len(segmentTimestamps) > 6 { 71 + log.Error(ctx, "too many segments in 3 seconds", "count", len(segmentTimestamps)) 72 + elem.ErrorMessage(gst.DomainCore, gst.CoreErrorFailed, "Too many segments in 3 seconds", "More than 6 segments in 3 seconds") 73 + return 74 + } 57 75 case <-time.After(time.Second * 30): 58 76 log.Warn(ctx, "no new segment for 30 seconds") 59 77 elem.ErrorMessage(gst.DomainCore, gst.CoreErrorFailed, "No new segment for 30 seconds", "No new segment for 30 seconds (debug)")