diff --git a/api/encoder/ffmpeg.go b/api/encoder/ffmpeg.go index fc6d9bb..11fcc36 100644 --- a/api/encoder/ffmpeg.go +++ b/api/encoder/ffmpeg.go @@ -2,7 +2,9 @@ package encoder import ( "bufio" + "bytes" "encoding/json" + "fmt" "io" "os/exec" "strconv" @@ -42,10 +44,10 @@ type ffmpegOptions struct { } // Run runs the ffmpeg encoder with options. -func (f *FFmpeg) Run(input string, output string, data string) { +func (f *FFmpeg) Run(input string, output string, data string) error { args := []string{ "-hide_banner", - "-v", "0", + "-loglevel", "error", // Set loglevel to fail job on errors. "-progress", "pipe:1", "-i", input, } @@ -66,6 +68,10 @@ func (f *FFmpeg) Run(input string, output string, data string) { log.Info("running FFmpeg with options: ", args) cmd := exec.Command(ffmpegCmd, args...) stdout, _ := cmd.StdoutPipe() + + // Capture stderr (if any). + var stderr bytes.Buffer + cmd.Stderr = &stderr cmd.Start() // Send progress updates. @@ -74,8 +80,14 @@ func (f *FFmpeg) Run(input string, output string, data string) { // Update progress struct. f.updateProgress(stdout) - cmd.Wait() + err := cmd.Wait() + if err != nil { + fmt.Println(stderr.String()) + f.finish() + return err + } f.finish() + return nil } func (f *FFmpeg) updateProgress(stdout io.ReadCloser) { diff --git a/api/worker/job.go b/api/worker/job.go index d834cb7..294d075 100644 --- a/api/worker/job.go +++ b/api/worker/job.go @@ -95,7 +95,11 @@ func encode(job types.Job, probeData *encoder.FFProbeResponse) error { // Run FFmpeg. f := &encoder.FFmpeg{} go trackEncodeProgress(encodeID, probeData, f) - f.Run(job.LocalSource, dest, p.Data) + err = f.Run(job.LocalSource, dest, p.Data) + if err != nil { + close(progressCh) + return err + } close(progressCh) // Set encode progress to 100. diff --git a/web/src/auth.js b/web/src/auth.js index aaacb95..4ae0a97 100644 --- a/web/src/auth.js +++ b/web/src/auth.js @@ -23,6 +23,7 @@ export default { if (redirect) { context.$router.push({ name: redirect }); + context.$router.go(); } }, (err) => { console.log(err); @@ -50,6 +51,7 @@ export default { cookie.remove('token'); this.user.authenticated = false; context.$router.push({ name: 'login' }); + context.$router.go(); }, checkAuth(context) { diff --git a/web/src/components/JobsTable.vue b/web/src/components/JobsTable.vue index 1dbb280..937d7d5 100644 --- a/web/src/components/JobsTable.vue +++ b/web/src/components/JobsTable.vue @@ -11,8 +11,15 @@ :fields="fields" :items="items"> + +