package video import ( "bufio" "context" "game-driver/pkg/logger" "io" "os/exec" "sync" ) func Play(ctx context.Context, file string) error { if file == "" { logger.Infoln("video file is empty") return nil } cmd := exec.CommandContext(ctx, "ffplay", "-autoexit", "-fs", file) pipe, err := cmd.StderrPipe() if err != nil { return err } var wait sync.WaitGroup defer wait.Wait() a := make(chan struct{}) defer close(a) go func() { wait.Add(1) defer wait.Done() for { select { case <-a: default: line, _, err := bufio.NewReader(pipe).ReadLine() if err != nil { if err == io.EOF { return } break } logger.Infoln(string(line)) } } }() return cmd.Run() }