diff --git a/src/pkg/parser/ffmpeg/ffmpeg.go b/src/pkg/parser/ffmpeg/ffmpeg.go index d1be074f..7147ba83 100644 --- a/src/pkg/parser/ffmpeg/ffmpeg.go +++ b/src/pkg/parser/ffmpeg/ffmpeg.go @@ -4,6 +4,7 @@ import ( "bufio" "bytes" "context" + "fmt" "io" "net/url" "os" @@ -187,11 +188,19 @@ func (p *Parser) ParseLiveStream(ctx context.Context, url *url.URL, live live.Li return nil } -func (p *Parser) Stop() error { +func (p *Parser) Stop() (err error) { p.closeOnce.Do(func() { if p.cmd.ProcessState == nil { - p.cmdStdIn.Write([]byte("q")) + if p.cmdStdIn != nil && p.cmd.Process != nil { + if _, err = p.cmdStdIn.Write([]byte("q")); err != nil { + err = fmt.Errorf("error sending stop command to ffmpeg: %v", err) + } + } else if p.cmdStdIn == nil { + err = fmt.Errorf("p.cmdStdIn == nil") + } else if p.cmd.Process == nil { + err = fmt.Errorf("p.cmd.Process == nil") + } } }) - return nil + return err } diff --git a/src/recorders/recorder.go b/src/recorders/recorder.go index 0198578f..d7910a92 100644 --- a/src/recorders/recorder.go +++ b/src/recorders/recorder.go @@ -253,7 +253,9 @@ func (r *recorder) setAndCloseParser(p parser.Parser) { r.parserLock.Lock() defer r.parserLock.Unlock() if r.parser != nil { - r.parser.Stop() + if err := r.parser.Stop(); err != nil { + r.getLogger().WithError(err).Warn("failed to end recorder") + } } r.parser = p } @@ -279,7 +281,9 @@ func (r *recorder) Close() { } close(r.stop) if p := r.getParser(); p != nil { - p.Stop() + if err := p.Stop(); err != nil { + r.getLogger().WithError(err).Warn("failed to end recorder") + } } r.getLogger().Info("Record End") r.ed.DispatchEvent(events.NewEvent(RecorderStop, r.Live))