in clips/remux/remux.go [13:58]
func Remux(segments []hls.Segment, path string) error {
var buffer []byte
for _, b := range segments {
buffer = append(buffer, b.Data...)
}
cmd := exec.Command("/opt/bin/ffmpeg", "-f", "mpegts", "-i", "pipe:", "-c", "copy", "-f", "mp4", path)
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
stderr, err := cmd.StderrPipe()
if err != nil {
return err
}
go func() {
defer stdin.Close()
stdin.Write(buffer)
}()
cmd.Start()
slurp, err := ioutil.ReadAll(stderr)
if err != nil {
log.Fatal(err)
}
if err := cmd.Wait(); err != nil {
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.Sys().(syscall.WaitStatus); ok {
ex := status.ExitStatus()
if ex == -1 || ex == 255 {
} else {
return errors.New(string(slurp))
}
}
}
}
return nil
}