Live video on the AT Protocol
79
fork

Configure Feed

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

at 8dbe97e8cfc7a3b7affe3a2bc2c6b25417f192fe 61 lines 1.4 kB view raw
1package cmd 2 3import ( 4 "context" 5 "fmt" 6 "io" 7 "os" 8 "path/filepath" 9 10 "stream.place/streamplace/pkg/config" 11 "stream.place/streamplace/pkg/log" 12 "stream.place/streamplace/pkg/media" 13) 14 15func Split(ctx context.Context, inFile, outDir string) error { 16 inFD, err := os.Open(inFile) 17 if err != nil { 18 return err 19 } 20 defer inFD.Close() 21 err = os.MkdirAll(outDir, 0755) 22 if err != nil { 23 return err 24 } 25 26 names := []string{} 27 28 err = media.SplitSegments(ctx, &config.CLI{}, inFD, func(fname string) media.ReadWriteSeekCloser { 29 fullPath := filepath.Join(outDir, fname) 30 names = append(names, fullPath) 31 log.Log(ctx, "creating segment file", "path", fullPath) 32 fd, err := os.Create(fullPath) 33 if err != nil { 34 log.Error(ctx, "failed to open segment file", "error", err) 35 return nil 36 } 37 return fd 38 }) 39 if err != nil { 40 return fmt.Errorf("failed to split segments: %w", err) 41 } 42 43 for _, name := range names { 44 fd, err := os.Open(name) 45 if err != nil { 46 return fmt.Errorf("failed to open segment file: %w", err) 47 } 48 defer fd.Close() 49 bs, err := io.ReadAll(fd) 50 if err != nil { 51 return fmt.Errorf("failed to read segment file: %w", err) 52 } 53 _, err = media.ValidateMP4Media(ctx, bs) 54 if err != nil { 55 return fmt.Errorf("failed to validate segment file: %w", err) 56 } 57 log.Log(ctx, "validated segment file", "path", name) 58 } 59 60 return nil 61}