From 1a993bf9564bc289070d957764bd917041d220f9 Mon Sep 17 00:00:00 2001 From: karataev Date: Thu, 1 Apr 2021 18:47:14 +0300 Subject: [PATCH 1/3] add config timeout --- ffmpeg/config.go | 3 +++ ffmpeg/ffmpeg.go | 34 +++++++++++++++++++++++++--------- ffmpeg/metadata.go | 2 +- go.mod | 2 +- 4 files changed, 30 insertions(+), 11 deletions(-) diff --git a/ffmpeg/config.go b/ffmpeg/config.go index 05eb7ff..bbda702 100644 --- a/ffmpeg/config.go +++ b/ffmpeg/config.go @@ -1,9 +1,12 @@ package ffmpeg +import "time" + // Config ... type Config struct { FfmpegBinPath string FfprobeBinPath string ProgressEnabled bool Verbose bool + Timeout time.Duration } diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index ea84fbc..c85f19a 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -12,9 +12,11 @@ import ( "regexp" "strconv" "strings" + "syscall" + "time" - "github.com/floostack/transcoder" - "github.com/floostack/transcoder/utils" + "github.com/C0nstantin/transcoder" + "github.com/C0nstantin/transcoder/utils" ) // Transcoder ... @@ -101,16 +103,30 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, if err != nil { return nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } + if int(t.config.Timeout) > 0 { - if t.config.ProgressEnabled && !t.config.Verbose { - go func() { - t.progress(stderrIn, out) - }() - + } + if (t.config.ProgressEnabled && !t.config.Verbose) || (int(t.config.Timeout) > 0) { + if t.config.ProgressEnabled { + go func() { + t.progress(stderrIn, out) + }() + } + done := make(chan error, 1) go func() { defer close(out) - err = cmd.Wait() + done <- cmd.Wait() + }() + select { + case <-time.After(t.config.Timeout): + cmd.Process.Signal(syscall.SIGTERM) + case <-done: + if err != nil { + return nil, err + } + } + } else { err = cmd.Wait() } @@ -192,7 +208,7 @@ func (t *Transcoder) validate() error { } // GetMetadata Returns metadata for the specified input file -func (t *Transcoder) GetMetadata() ( transcoder.Metadata, error) { +func (t *Transcoder) GetMetadata() (transcoder.Metadata, error) { if t.config.FfprobeBinPath != "" { var outb, errb bytes.Buffer diff --git a/ffmpeg/metadata.go b/ffmpeg/metadata.go index 4e81910..21ef3d1 100644 --- a/ffmpeg/metadata.go +++ b/ffmpeg/metadata.go @@ -1,6 +1,6 @@ package ffmpeg -import "github.com/floostack/transcoder" +import "github.com/C0nstantin/transcoder" // Metadata ... type Metadata struct { diff --git a/go.mod b/go.mod index 4c9ade4..c5568d3 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/floostack/transcoder +module github.com/C0nstantin/transcoder go 1.13 From 67bc95b56c82233ffbd92a8aaac218055ff77e25 Mon Sep 17 00:00:00 2001 From: karataev Date: Tue, 10 Aug 2021 19:11:29 +0300 Subject: [PATCH 2/3] fix show errors --- ffmpeg/ffmpeg.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index c85f19a..5d69b54 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -103,9 +103,7 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, if err != nil { return nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } - if int(t.config.Timeout) > 0 { - } if (t.config.ProgressEnabled && !t.config.Verbose) || (int(t.config.Timeout) > 0) { if t.config.ProgressEnabled { go func() { @@ -129,6 +127,9 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, } else { err = cmd.Wait() + if err != nil { + return nil, fmt.Errorf("Error ffmeg execute command %s, %w", cmd.String(), err) + } } return out, nil From 13ecc327cde0674e4962c0d6f53c765ef368bea3 Mon Sep 17 00:00:00 2001 From: karataev Date: Wed, 27 Apr 2022 17:35:52 +0300 Subject: [PATCH 3/3] wait ffmpeg 3 second --- .idea/.gitignore | 4 ++++ ffmpeg/ffmpeg.go | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 .idea/.gitignore diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..fd8ca11 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,4 @@ +modules.xml +transcoder.iml +vcs.xml +workspace.xml diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index 5d69b54..acb20a7 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -104,12 +104,15 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, return nil, fmt.Errorf("Failed starting transcoding (%s) with args (%s) with error %s", t.config.FfmpegBinPath, args, err) } - if (t.config.ProgressEnabled && !t.config.Verbose) || (int(t.config.Timeout) > 0) { + if t.config.ProgressEnabled && !t.config.Verbose { + if t.config.ProgressEnabled { go func() { t.progress(stderrIn, out) }() } + } + if int(t.config.Timeout) > 0 { done := make(chan error, 1) go func() { defer close(out) @@ -118,8 +121,13 @@ func (t *Transcoder) Start(opts transcoder.Options) (<-chan transcoder.Progress, }() select { case <-time.After(t.config.Timeout): - cmd.Process.Signal(syscall.SIGTERM) - case <-done: + err = cmd.Process.Signal(syscall.SIGINT) + if err != nil { + return nil, err + } + time.Sleep(3 * time.Second) + + case err := <-done: if err != nil { return nil, err }