Live video on the AT Protocol
at eli/multitesting 41 lines 1.2 kB view raw
1package media 2 3import ( 4 "context" 5 "fmt" 6 "io" 7 "sort" 8 "time" 9 10 "stream.place/streamplace/pkg/aqtime" 11 "stream.place/streamplace/pkg/config" 12 "stream.place/streamplace/pkg/model" 13) 14 15func ClipUser(ctx context.Context, mod model.Model, cli *config.CLI, user string, writer io.Writer, before *time.Time, after *time.Time) error { 16 segments, err := mod.LatestSegmentsForUser(user, -1, before, after) 17 if err != nil { 18 return fmt.Errorf("unable to get segments: %w", err) 19 } 20 if len(segments) == 0 { 21 return fmt.Errorf("no segments found") 22 } 23 // Sort segments by StartTime, oldest first 24 sort.Slice(segments, func(i, j int) bool { 25 return segments[i].StartTime.Before(segments[j].StartTime) 26 }) 27 segmentFiles := []string{} 28 for _, segment := range segments { 29 aqt := aqtime.FromTime(segment.StartTime) 30 fpath, err := cli.SegmentFilePath(user, fmt.Sprintf("%s.%s", aqt.FileSafeString(), "mp4")) 31 if err != nil { 32 return fmt.Errorf("unable to get segment file path: %w", err) 33 } 34 segmentFiles = append(segmentFiles, fpath) 35 } 36 err = Clip(ctx, segmentFiles, writer) 37 if err != nil { 38 return fmt.Errorf("unable to clip segments: %w", err) 39 } 40 return nil 41}